|
板子是郭天祥的TX-1C板子 程序實現的是四個獨立按鍵分別實現不同的功能 有疑問的地方不是程序和現象有問題,都正常,但是在按下S5獨立按鍵的時候 發現LED亮了好幾個 感覺很奇怪 以下是單片機代碼
- /*
- KEY1:秒表加一;
- KEY2:秒表減一;
- KEY3:清零;
- KEY4:開啟秒表;
- */
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define digTube P0
- sbit KEY1 = P3^4;
- sbit KEY2 = P3^5;
- sbit KEY3 = P3^6;
- sbit KEY4 = P3^7;
- sbit DULA = P2^6;
- sbit WELA = P2^7;
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- uint tube = 0;
- uint time = 0;
- void DelayMs(uint ms);
- void Display(uint num);
- void KeyScan();
- void Init();
- void main()
- {
- Init();
-
- while (1)
- {
- KeyScan();
- Display(tube);
- }
- }
- void T0time() interrupt 1
- {
- TH0=(65536-922)/256;
- TL0=(65536-922)%256;
-
- time++;
- if (time == 1000)
- {
- time = 0;
- if (tube >= 999)
- {
- tube = 0;
- }
- else
- {
- tube++;
- }
- }
- }
- void KeyScan()
- {
- if (KEY1 == 0)
- {
- DelayMs(10);
-
- if(KEY1 == 0)
- {
- if (tube >= 999)
- {
- tube = 0;
- }
- else
- {
- tube++;
- }
- while (KEY1 == 0);
- }
- }
-
- if (KEY2 == 0)
- {
- DelayMs(10);
-
- if(KEY2 == 0)
- {
- if (tube <= 0)
- {
- tube = 999;
- }
- else
- {
- tube--;
- }
- while (KEY2 == 0);
- }
- }
-
- if (KEY4 == 0)
- {
- DelayMs(10);
-
- if (KEY4 == 0)
- {
- TR0 = ~TR0;
- while (KEY4 == 0);
- }
- }
-
- if (KEY3 == 0)
- {
- DelayMs(10);
-
- if (KEY3 == 0)
- {
- tube = 0;
- while (KEY3 == 0);
- }
- }
- }
- void Display(uint num)
- {
- uint bai, shi, ge;
-
- bai = num/100;
- shi = num%100/10;
- ge = num%10;
-
- DULA = 1;
- digTube = table[bai];
- DULA = 0;
- digTube = 0xff;
- WELA = 1;
- digTube = 0x7e;
- WELA = 0;
- DelayMs(5);
-
- DULA = 1;
- digTube = table[shi];
- DULA = 0;
- digTube = 0xff;
- WELA = 1;
- digTube = 0x7d;
- WELA = 0;
- DelayMs(5);
-
- DULA = 1;
- digTube = table[ge];
- DULA = 0;
- digTube = 0xff;
- WELA = 1;
- digTube = 0x7b;
- WELA = 0;
- DelayMs(5);
- }
- void Init()
- {
- TMOD=0x01;
- TH0=(65536-922)/256;
- TL0=(65536-922)%256;
- TR0=0;
- ET0=1;
- EA=1;
- }
- void DelayMs(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=114;j>0;j--);
- }
復制代碼 然后我KEY4的功能分別換了 發現不是程序功能的問題,好像按下S5就會亮LED 對此很好奇 希望有前輩可以指導一下
|
|