|
程序在絕大多數(shù)情況下都得跑起來,不可以隨便使用死循環(huán)和阻滯延時。雖然指令是逐條執(zhí)行的,但由于單片機速度很快,主觀感覺許多任務(wù)在同時執(zhí)行。給你一個流水燈和數(shù)碼管動態(tài)顯示的簡單示例參考。仿真圖只代表邏輯正確,完善后才能用于實際電路。
- #include<reg51.h>
- unsigned char code table[]={//共陰數(shù)碼管段碼"0~f-."
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x40,0x80};
- unsigned char code wela[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位碼
- unsigned char data dis_buf[8];//顯示緩存
- unsigned int i,j,k,l;//計數(shù)變量
- void main()
- {
- P1=0xfe;//流水燈初始化
- while(1)
- {
- //i,j,k計數(shù)
- i++;
- if(i>=1000)
- {
- i=0;
- j++;
- if(j>9999)
- {
- j=0;
- k++;
- if(k>9999)
- k=0;
- }
- //流水燈
- P1=P1<<1|0x01;
- if(P1==0xff)
- P1=0xfe;
- }
- //分解數(shù)據(jù)
- dis_buf[0]=table[k/1000%10];
- dis_buf[1]=table[k/100%10];
- dis_buf[2]=table[k/10%10];
- dis_buf[3]=table[k%10];
- dis_buf[4]=table[j/1000%10];
- dis_buf[5]=table[j/100%10];
- dis_buf[6]=table[j/10%10];
- dis_buf[7]=table[j%10];
- //數(shù)碼管動態(tài)顯示
- P0=0x00;//消隱段碼
- P2=wela[l];//位碼
- P0=dis_buf[l];//段碼
- l++;//數(shù)碼管動態(tài)計數(shù)
- if(l>=8)
- l=0;
- }
- }
復(fù)制代碼
|
|