蓝桥杯单片机组-第九届预赛“彩灯控制器”心得

终于有时间写了,但是程序还有瑕疵,EEPROM我在去看一看。就把剩下的部分说了吧。
程序大概框架
蓝桥杯单片机组-第九届预赛“彩灯控制器”心得_第1张图片
这也是大部分单片机运行的模式,相比于RTOS的缺点就很明显了。就像杰哥说的,单片机运行的很快,让人产生一种各个模块同时运行的错觉,但并不是这样。

用具体问题具体方法的办法来讲一下第九届的省赛
1. 题目有个要求是通过按键S4进入设置界面,当前被选择的显示单位要以0.8s为间隔亮灭
我们分析一下,亮就是给相应数字的位选,灭无非也就是给位选,不过给的位选是全灭(0xFF,共阴数码管)

void Timer0_Init(void)
{
 AUXR &= 0x7F;
 TMOD &= 0x01;
 TH0 = (65536 - 2000) / 256;
 TL0 = (65536 - 2000) % 256;
 TF0 = 0;
 TR0 = 1;
 ET0 = 1;
 EA = 1;
}//定时器0初始化
void Timer0() interrupt 1
{
   ulms++;  //2ms加一次
   if(!(ulms % 400))	//0.8s  ucSec加一次
   {
   	ucSec++;
   }
   if(ucSec & 1)   //ucSec大于0x01以后,和0x01进行相与,即可对ucSec进行清零
   {
	switch(Flag) 
	{
	  case 1:      //第一位闪烁
	    DisplayBuff[0] = 0xff;
	  case 2:      //第二位闪烁
	    DisplayBuff[1] = 0xff;
	   ......
	}
   }
}

这个方法是我在书上看到的,刚开始很懵,后来明白了,真的很棒的写法。

你可能感兴趣的:(单片机)