某學校課程設計程序與電路
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include <reg52.h> //頭文件
- #include <intrins.h>
- #define uint unsigned int //宏定義
- #define uchar unsigned char
- sbit key1 =P2^0; //按鍵1
- sbit key2 =P2^1; //按鍵2
- sbit key3 =P2^2; //按鍵3
- sbit key4 =P2^3; //按鍵4
- uint a,b;
- uchar table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff}; //第一種現象的數據
- uchar table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //第二種現象的數據
- uchar table3[]={0xaa,0x55}; //第三種現象的數據
- void delay(uint t); //較短延時
- void delayms(); //較長延時
- void main()
- {
-
- while(1)
- {
- if(key1==0) //第一個按鍵按下
- {
- delay(10); //消除機械抖動延時
- if(key1==0) //再次檢測
- {
- while(!key1);//松手檢測
- while(1)
- {
- for(a=0;a<9;a++)
- {
- P1=table[a];
- delayms();
- if(key1==0||key2==0||key3==0||key4==0) //有任一按鍵按下,就打破當前循環
- break;
- }
- if(key1==0||key2==0||key3==0||key4==0)
- break;
- }
- }
- }
-
- if(key2==0) //同理
- {
- delay(10);
- if(key2==0)
- {
- while(!key2);
- while(1)
- {
- for(a=0;a<8;a++)
- {
- P1=0xff;
- delayms();
- P1=table2[a];
- delayms();
- if(key1==0||key2==0||key3==0||key4==0)
- break;
- }
- if(key1==0||key2==0||key3==0||key4==0)
- break;
- }
- }
- }
- if(key3==0) //同理
- {
- delay(10);
- if(key3==0)
- {
- while(!key3);
- while(1)
- {
- for(a=0;a<2;a++)
- {
- P1=0xff;
- delayms();
- P1=table3[a];
- delayms();
- if(key1==0||key2==0||key3==0||key4==0)
- break;
- }
- if(key1==0||key2==0||key3==0||key4==0)
- break;
- }
- }
- }
-
- if(key4==0)
- {
- delay(10);
- if(key4==0)
- {
- while(1) //使其陷入死循環
- {
- if(key1==0||key2==0||key3==0||key4==0)
- break;
- }
- }
- }
-
- }
- }
- void delay(uint t)
- {
- while(t--);
- }
- void delayms()
- {
- for(b=0;b<200;b++)
- {
- delay(200);
- if(key1==0||key2==0||key3==0||key4==0)//可能按鍵按下時程序執行在延時函數里面所以需要檢測打破循環
- break;
- }
- }
復制代碼
所有資料51hei提供下載:
電路仿真.zip
(31.48 KB, 下載次數: 16)
2018-12-24 23:48 上傳
點擊文件名下載附件
按鍵小燈控制電路
程序.zip
(26.66 KB, 下載次數: 11)
2018-12-24 23:48 上傳
點擊文件名下載附件
按鍵小燈控制程序
|