不要用长时间延时
要善用显示的那段延时
- #include <reg51.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit KK1 = P3^1;//按键输入;
- sbit KK2 = P3^3;//输出
- uchar code table[11] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
- /**************************************************************
- * 名称 : Delay_1ms()
- * 功能 : 延时子程序,延时时间为 1ms * x
- * 输入 : x (延时一毫秒的个数)
- * 输出 : 无
- ***************************************************************/
- void Delay_1ms(uint x)
- {
- uchar i, j;
- for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);
- }
- /**************************************************************
- * 名称 : Display(uchar k,uchar EN)
- * 功能 : 将参数分成十位、个位分别显示
- * 输入 : k,EN
- * 输出 : 无
- ***************************************************************/
- void Display(uchar k,uchar EN)
- {
- P2 = 0; //先消隐
- if (k / 10 == 0) P0 = table[10]; //显示空白
- else P0 = table[k / 10]; //显示十位
- if(EN)P2 = 0x02;
- Delay_1ms(1); //显示1ms
- P2 = 0;
- P0 = table[k % 10]; //显示个位
- if(EN)P2 = 0x01;
- Delay_1ms(1);
- }
- /**************************************************************
- * 名称 : Main()
- * 功能 : 主函数
- ***************************************************************/
- void Main(void)
- {
- uchar Value = 0; //数值
- uchar Step = 0;
- uchar XiaoDou = 0;
- uint Yanshi = 0;
- uint mSec = 0;
- bit DispEN = 0;
- while(1)
- {
- Display(Value,DispEN);//耗时2ms
-
- if(!KK1) //KK1按下
- {
- if(XiaoDou<0xff)XiaoDou++;//KK1依然按下
- if(XiaoDou == 10)
- {
- Value++;
- if(Value>5)Value=0;
- Step = 0;
- }
- }
- else
- {
- XiaoDou = 0;
- }
-
- if(Value == 0)
- {
- DispEN = 0;
- }
- else
- {
- switch(Step)
- {
- case 0:
- KK2 = 0;
- mSec=0;
- Yanshi=0;
- Step++;
- break;
- case 1:
- if(++mSec>=500)
- {
- mSec=0;
- if(++Yanshi>=5)
- {
- Yanshi=Value*60;
- KK2 = 1;
- Step++;
- }
- }
- break;
- case 2:
- if(++mSec>=500)
- {
- mSec=0;
- if(--Yanshi==0)
- {
- Step=0;
- }
- }
- break;
- }
- }
- }
- }
复制代码
|