请教大神,我想使用按键控制数码管显示不同的内容,为啥实现不了呢,同一个按键,按一次显示温度、按一次显示时间,如此循环。按键加了延时后,按下去后数码管会变黑。求帮我分析下。
单片机源程序如下:
- u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值
- u8 DisData[8];
- u8 DisplayData[8];
- u8 Data[8];
- u8 keypro() //按键处理函数
- {
- u8 i,flag=0,t=0;
- if(k1==0)
- {
- if(k1==0)
- {
- for(i=0;i<2;i++)
- {
- delay2s();
- flag++;
- if(flag==2)flag=0;
- }
- }
- //while(!k1);
- }
- switch(flag)
- {
- case (0):t=0;break;
- case (1):t=1;break;
- }
- return t;
- }
- void dyna() \\数码管显示函数
- {
- unsigned int i;
- for(i=0;i<8;i++)
- {
- switch(i)
- {
- case (0):SA=0;SB=0;SC=0;break;
- case (1):SA=1;SB=0;SC=0;break;
- case (2):SA=0;SB=1;SC=0;break;
- case (3):SA=1;SB=1;SC=0;break;
- case (4):SA=0;SB=0;SC=1;break;
- case (5):SA=1;SB=0;SC=1;break;
- case (6):SA=0;SB=1;SC=1;break;
- case (7):SA=1;SB=1;SC=1;break;
- }
- switch(keypro())
- {
- case 1:Data[i]=DisplayData[i];break;
- case 0:Data[i]=DisData[i];break;
- }
- GPIO_DIG=Data[i];
- delay(20);
- GPIO_DIG=0x00;//消隐
- }
- }
复制代码
|