我用主机的点阵弄了个9-0秒的倒计时,从机给主机发送按键值(主机倒计时是用定时器0,串口用了定时器一,串口的通信是ok的)。
我要实现的功能是:从机扫描按下按键,主机开始显示倒计时。
我现在的问题是:
我的点阵只能显示9(不会变成8),我显示是放在串口中断里面,定时器0只用来计时(50ms一次溢出),串口波特率4800
请问:1.显示的函数应该在哪个地方,中断还是while循环
2.中断的优先级需不需要改
请大神们帮帮忙。
看看哪里需要修改。
这是单片机代码
- u8 Time=0,second=0;
- u8 Val=0;
- void zhongduan_Init(void)
- {
- TMOD = 0x21; //开启定时器0、1
- TH0 = 0x3C; //设置初始值,定时50ms
- TL0 = 0xB0;
- TH1=0xF3; //计数器初始值设置,注意波特率是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 //中断服务函数
- {
- 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)//点阵显示函数
- {
- 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);//消隐
- }
- }
- }
复制代码
|