原本是数码管动态扫描并用按键调加减数字变化,刚开始是OK的,在写EEPROM保存数据设置,后来更改数码管扫描方式按键没作用了,如把显示取消后,按键就有作用,现用LED作测试,发现系统只能执行一道任务类似,MCU用的是STC15W408AS,按键改成最老方式和状态按键都是这样,硬件也更换MCU了,这几天都搞晕了,请各位大神帮忙看看指点下。谢谢!
请看下面的程序 :
- include"STC15W.H"
- #include"intrins.h"
- #define uchar unsigned char
- #define uint unsigned int
- void digplay(uint hig);
- void key();
- sbit PWM=P1^7;
- sbit LED1=P5^5;
- sbit up=P1^4;
- sbit down=P1^5;
- sbit ba=P1^1;
- sbit sh=P1^0;
- sbit ge=P1^2;
- sbit dn=P1^3;
- uint hig=250;
- uchar code LED[]={0xCF,0x81,0xEA,0xE3,0xA5,0x67,0x6F,0xC1,0xEF,0xE7,0x5e};
- /************延时子程序*************/
- void delayxms(uint z)
- {
- uint y,x;
- for(y=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void KeyScan(void)//按键扫描
- {
- static uchar key1_lock=0;//自锁标志
- static uint count1=0;//计数延时
- static uchar key2_lock=0;//
- static uint count2=0;//
- if(up==0)
- {
- if((count1++>=5)&&(key1_lock==0))
- {
- key1_lock=1;
- LED1=~LED1;
- }
- }
- else
- {
- key1_lock=0;
- count1=0;
- }
- if(down==0)
- {
- if((count2++>=5)&&(key2_lock==0))
- {
- key2_lock=1;
- LED1=~LED1;
- }
- }
- else
- {
- key2_lock=0;
- count2=0;
- }
- }
- void Init2()//定时器2初始化
- {
- AUXR&=0x04; //12T
- T2L=0x78; //定时5MS
- T2H=0xec; //
-
- IE2|=0x04;
- AUXR|=0x10; //开始计时
- EA=1;
- }
- void digplay(uint hig)//数码管动态扫描
- {
-
- static uchar i=0;
-
- P3=0x00;
- switch(i)
- {
- case 0:
- P3=LED[hig/100];
- P1=0x02;
- P1=0x00;
- i++;
- break;
- case 1:
- P3=LED[hig/10%10];
- P1=0x01;
- P1=0x00;
- i++;
- break;
- case 2:
- P3=LED[hig%10];
- P1=0x04;
- P1=0x00;
- i++;
- break;
- case 3:
- P3=0x5e;
- P1=0x08;
- P1=0x00;
- i=0;
- break;
- }
- delayxms(5);
- }
- void main()//主程序
- {
- Init2();
- P5M0=0xff;
- P5M1=0x00;
- P3M0=0xff;
- P3M1=0x00;
- P1M0=0xff;
- P1M1=0xf0;
- while(1)
- {
- digplay(hig);
- }
- }
- void t2int() interrupt 12
- {
- KeyScan();
- }
|