1.png (75.33 KB)
下載附件
2021-6-22 01:19 上傳
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table[]={0xfe,0xfc,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0xff};
- sbit k1 = P2^0;
- sbit k2 = P2^1;
- sbit k3 = P2^2;
- sbit k4 = P3^2;
- sbit k5 = P3^3;
- int i;
- int a,b,l,led;
- uint led1,led2;
- void KEY4();
- void KEY5();
- void delay(uint xms) //延時
- {
- int i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--) ;
- }
- void KEY1() //流水燈向右
- {
- if(k1==0)
- {
- delay(5); //消抖
- if(k1==0)
- {
- ET0 = 0; //關定時器0中斷
- TR0 = 0; //關閉定時器0
- a = 0;
- P1 = 0xff;
- delay(500);
- while(1) //while(1)循環流水燈向右
- {
- P1 = table[a];
- delay(500);
- a++;
- if(a==11) //流水燈到尾重新開始
- a = 0;
- if(k1==0||k2==0||k3==0) //按鍵檢測,退出while(1)循環
- {
- delay(5);
- if(k1==0||k2==0||k3==0)
- break;
- }
- }
- }
- }
- }
- void KEY2() //流水燈向左
- {
- if(k2==0)
- {
- delay(5);
- if(k2==0)
- {
- ET0 = 0;
- TR0 = 0;
- b = 10;
- P1 = 0xff;
- delay(500);
- while(1)
- {
- P1 = table[b];
- delay(500);
- b--;
- if(b<0)
- b = 10;
- if(k1==0||k2==0||k3==0)
- {
- delay(5);
- if(k1==0||k2==0||k3==0)
- break;
- }
- }
- }
- }
- }
- void KEY3() //閃爍燈
- {
- if(k3==0)
- {
- delay(5);
- if(k3==0)
- {
- ET0 = 0;
- TR0 = 0;
- P1 = 0xff;
- delay(500);
- while(1)
- {
- P1 =~ P1; //P1口反轉
- delay(500);
- if(k1==0||k2==0||k3==0)
- {
- delay(5);
- if(k1==0||k2==0||k3==0)
- break;
- }
- }
- }
- }
- }
- void init() //初始化函數
- {
- P1 = 0xff;
- TMOD = 0x01; //定時器0工作在方式1
- IP = 0x01; //PX0 = 1; //中斷優先級 外部中斷0為高優先級中斷
- //IP = 0x40 ;(PX1 = 1;)
- TH0 = (65536 - 50000)/256;
- TL0 = (65536 - 50000)%256;
- /*TH0 = (計數最大值-定時時間)/256
- TL0 = (計數最大值-定時時間)%256
- */
- EA = 1; //開總中斷
- EX0 = 1; //開外部中斷0
- EX1 = 1; //開外部中斷1
- IT0 = 1; //外部中斷0負跳變中斷
- IT1 = 1; //外部中斷1負跳變中斷
- ET0 = 1; //開定時器0中斷
- TR0 = 1; //允許定時器0定時
- }
- void main()
- {
- init(); //初始化函數
- while(1)
- {
- KEY1();
- KEY2();
- KEY3();
- }
- }
- void int0() interrupt 0 //外部中斷0 單個流水燈向右
- {
- uint i;
- led1 = 0xfe;
- for(i=0;i<8;i++)
- {
- P1 = led1;
- delay(500);
- led1 = _crol_(led1,1);
- }
- }
- void time0_int() interrupt 1 //定時器0
- {
- TH0 = (65536 - 50000)/256; //50ms
- TL0 = (65536 - 50000)%256;
- i++;
- if(i==10) //定時器0控制開始燈閃爍
- {
- i = 0;
- P1 =~ P1;
- delay(400);
- }
- }
- void int1() interrupt 2 //外部中斷1 單個流水燈向左
- {
- uint i;
- led2 = 0x7f;
- for(i=0;i<8;i++)
- {
- P1 = led2;
- delay(500);
- led2 = _crol_(led2,-1);
- }
- }
復制代碼
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|