測試脈衝數,並且傳送到電腦串列埠,利用stc8a晶元的串列埠3,定時器3產生波特率,利用pwm增強,pwm的p21介面產生pwm脈衝,有四個按鍵,+,-,模式選擇,確定鍵。模式選擇。
模式1是設定pwm的占空比,其中pwm的週期設定固定,500hz頻率,通過設定t1h的反轉點,實現pwm,將反轉點的值設定為變數,按鍵可控制該變數的增加或者變小,用示波器進行過驗證,可行。
模式2是調節pid的p值引數,暫時不用,後續用pid矯正的時候,可以設定不同的p值,進行p整定;
模式3是pid的i值設定;
模式4/5是留空,後續進行擴充套件;
模式6是編碼器的極限值,在後續的時候,可以設定這個資料,可以實現檢測到編碼脈衝的總數的時候,觀察轉的角度,實現脈衝數和旋轉角度的對應;
模式7是定時器的定時次數的設定,每次定時器2產生50ms,定時20次,就是1秒,可以改變定時的時間,觀察不同的時間內,旋轉的角度;
#include 「string.h」 // strlen函式需用
#include // sprintf函式需用
#include 「lcd1602.h」
#include 「key_single.h」
#include 「myfun.h」
#include 「pwm.h」
#define encoderlimit 100
#define fosc 11059200ul
#define brt (65536 - fosc / 115200 / 4)
sbit pwmx = p2^1;
sbit pled = p7^2;
sbit ecoderdir=p6^5; //編碼器正反方向,ecoderdir=1,a超b,=0;b超a,
sbit a0=p6^6; //電機正反轉
sbit a1=p6^7; //正反
sbit l0=p1^4; //燈0
sbit l1=p1^5; //燈1;
sbit l2=p1^6; //燈2;
sbit l3=p1^7; //燈3;
bit flagpwm=0;
bit flag2=1,flag3=0;
bit s3ti0=0;
unsigned char dir=0;
int time=0;
long int timecount=100;//預設5秒
unsigned long encodernum0=100,encodernum=0;
unsigned char bufmode[3],buf[9];
unsigned char datas = ;
void port_mode() // 埠模式
void main()
break;
case 0:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
// else if(dir0)
// // break;
} break;
case 6:
break;
case 7:
break;
default:break;
}// default:break;
}break;
case 1:
break;
case 2:
break;
case 3:
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
default:break;
}//default:break;
} break;
case 3://確定,啟動電機
delay50ms();
s3buf = 0x0a;//將接收到的資料放入到傳送暫存器
while (!(s3con&0x04)); //等待傳送資料完成
// //s3t1不能位定址,***x xx0x
s3con=0x50;//將s3t1清零
// flag2=0;
//延時5秒,再次開啟計數器中斷,定時中斷,進行計數
for(t=20;t>0;t–)
delay50ms(); //200cheng50=10000ms=10miao
ea=1;
tr0=1;tr1=1;
a0=1;a1=0;
long_str(encodernum,buf);
writestring(8,0,buf);
writestring(0,0,「m」);
encodernum=0;
pwmcr=0x82;//
flag3=0;
//long_str(encodernum,buf);
// writestring(8,0,buf);
// writestring(0,0,「m」);
} //任意鍵按下,退出這個
else //有按鍵按下,顯示定時計數得到的脈衝數
}
} break;
default:break;
}// if(flagpwm==12)
// // keynum=100;
//0123456789abcdef
//m0 w20 u99999t03
i10.55 +r
//顯示
int_str(keymode,bufmode);writestring(1,0,bufmode);
int_str(timecount,bufmode);writestring(14,0,bufmode);
int_str(pwmvalue,buf);writestring(4,0,buf);
long_str(encodernum,buf);writestring(8,0,buf);
sprintf(buf,"%0.2f",pvalue);writestring(1,1,buf); // 保留2位小數
sprintf(buf,"%0.2f",ivalue);writestring(8,1,buf); }}
void tm0_isr() interrupt 1 using 1
void time1()interrupt 3
}
Python模組 以主程式的形式執行
案例 1 1 建立乙個模組,名稱為fun。塊如下 pinetree 我是一棵松樹 定義全域性變數 松樹 def fun christmastree 定義函式 pinetree 掛上彩燈.我變成一棵聖誕樹 定義區域性變數 print pinetree 輸出區域性變數值 函式體外 print 下雪了.p...
主程式與DLL之間的全域性變數問題
有幾個朋友經常向我問題在dll中怎麼共用乙個全域性變數。比如像使用者登陸後的使用者名稱 username 其實這個問題很簡單。下面我把我的做法寫出來大家一起分享。把共享的變數放在主程式裡 username,等等,在主程式裡寫兩個函式 function curusername pchar begin ...
主程式與DLL之間的全域性變數問題
有幾個朋友經常向我問題在dll中怎麼共用乙個全域性變數。比如像使用者登陸後的使用者名稱 username 其實這個問題很簡單。下面我把我的做法寫出來大家一起分享。把共享的變數放在主程式裡 username,等等,在主程式裡寫兩個函式 function curusername pchar begin ...