我用主機的點陣弄了個9-0秒的倒計時,從機給主機發(fā)送按鍵值(主機倒計時是用定時器0,串口用了定時器一,串口的通信是ok的)。
我要實現(xiàn)的功能是:從機掃描按下按鍵,主機開始顯示倒計時。
我現(xiàn)在的問題是:
我的點陣只能顯示9(不會變成8),我顯示是放在串口中斷里面,定時器0只用來計時(50ms一次溢出),串口波特率4800
請問:1.顯示的函數(shù)應該在哪個地方,中斷還是while循環(huán)
2.中斷的優(yōu)先級需不需要改
請大神們幫幫忙。
看看哪里需要修改。
這是單片機代碼
- u8 Time=0,second=0;
- u8 Val=0;
- void zhongduan_Init(void)
- {
- TMOD = 0x21; //開啟定時器0、1
- TH0 = 0x3C; //設置初始值,定時50ms
- TL0 = 0xB0;
- TH1=0xF3; //計數(shù)器初始值設置,注意波特率是4800
- TL1=0xF3;
- ET0 = 1; //打開定時器0中斷
- TR0 = 0; //不啟動定時器0
- TR1=1; //打開定時器1
- SM0=0;//設置串口工作方式
- SM1=1;
- REN=1; //打開串口接收中斷
- IP=0x10;
- EA=1; //打開總中斷
- ES=1;//打開串口中斷
-
- }
- void main()
- {
- zhongduan_Init();
- while(1)
- {
- }
-
- }
- void Timer0() interrupt 1 //中斷服務函數(shù)
- {
- TH0 = 0x3C;
- TL0 = 0xB0;
- Time++;
- if(Time==20)
- {
- Time=0;
- second++; //一秒時間
- //if(second>=1)convert(); //心形移位
- }
- }
- void Usart() interrupt 4
- {
- Val=SBUF;
- switch(Val)
- {
- case 1:
- display(Val);//顯示
- break;
- }
- RI=0;
- }
- [\code]
- [code=c]
- void display(u8 DATa)//點陣顯示函數(shù)
- {
- u8 j;
- P0=0x7f;
-
- switch(DATa)
- {
- case 0: //初始畫面
- for(j=0;j<8;j++)
- {
- P0=bubian[j];
- Senddata(ten[j]);
- delay(10);
- Senddata(0x00);//消隱
- }
- break;
- case 1:
- show_1();
- break;
- }
- }
- void show_1(void)//倒計時顯示
- {
- u8 j;
- TR0=1;//開啟定時器
-
- while(second<10)//時間一到回到初始頁面
- {
- for(j=0;j<8;j++)
- {
- P0=bubian[j];
- Senddata(count[second][j]);
- delay(5);
- Senddata(0x00);//消隱
- }
- }
- }
復制代碼
|