6個按鍵,每一個按鍵代表一個花型,附帶Proteus仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.png (85.42 KB, 下載次數: 38)
下載附件
2023-5-9 00:49 上傳
單片機源程序如下:
- /*
- 名稱:LED流水燈實驗
- LED接口:LED0-7--------P2
- LED8-16-------P3
- KEY1--------P1.0
- KEY2--------P1.1
- KEY3--------P1.2
- KEY4--------P1.3
- KEY5--------P1.4
- 用按鍵掃描和查表法實現花式流水燈,一次只能閉合一個按鍵
- */
- # include <reg52.h>
- # define uchar unsigned char
- # define uint unsigned int
- uchar i,flag1,flag2,flag3,flag4,flag5,flag6;
- /******************* 定義按鍵 *****************************/
- sbit k1=P1^0;
- sbit k2=P1^1;
- sbit k3=P1^2;
- sbit k4=P1^3;
- sbit k5=P1^4;
- sbit k6=P1^7;
- /************************ 流水燈花樣設計 ********************/
- /***********外圈依次亮********/
- uchar table1_1[]={0xef,0xfe,0xfd,0xfb,0xf7,0x7f};
- uchar table1_2[]={0xf7,0x7f,0xbf,0xdf,0xef,0xfe};
- /*****內圈依次點亮 */
- uchar table2_1[]={0xdf,0xbf};
- uchar table2_2[]={0xfb,0xfd};
- /******* 間隔一個循環點亮 ********/
- uchar table3_1[]={0xfe,0xfb,0xef,0xbf};
- uchar table3_2[]={0xfd,0xf7,0xdf,0x7f};
- /*********第一行到第四行閃爍*************/
- uchar table4_1[]={0xf0,0xff,0xf0,0xff,0xf0,0xff};
- uchar table4_2[]={0x0f,0xff,0x0f,0xff};
- uchar table4_3[]={0xf0,0xff,0xf0,0xff,0xf0,0xff,0xf0,0xff};
- uchar table4_4[]={0x0f,0xff};
- /*********16位流水燈**********/
- uchar table5_1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- /**********全亮全滅交替*******/
- uchar table6_1[]={0x00};
- uchar table6_2[]={0xff};
- /********************* 延時程序 ****************************/
- void delay(uint x)
- {
- uint i;
- while(x--)
- for(i=50;i>0;i--);
- }
- //delay(1000)為1s
- /****************** 判斷按鍵 ***********************/
- void keyscan()
- { if(k1==0) //K1按下
- {delay(10);
- if(k1==0)
- {
- flag6=0;
- flag2=0;
- flag3=0;
- flag4=0;
- flag1=1;
- flag5=0;
- }
- }
- if(k2==0){ //K2按下
- delay(10);
- if(k2==0){
- flag3=0;
- flag1=0;
- flag4=0;
- flag5=0;
- flag6=0;
- flag2=1;
- }
- }
- if(k3==0){ //K3按下
- delay(10);
- if(k3==0){
- flag1=0;
- flag2=0;
- flag4=0;
- flag5=0;
- flag6=0;
- flag3=1;
- }
- }
- if(k4==0){ //K4按下
- delay(10);
- if(k4==0){
- flag5=0;
- flag6=0;
- flag1=0;
- flag2=0;
- flag3=0;
- flag4=1;
- }
- }
- if(k5==0){ //K5按下
- delay(10);
- if(k5==0){
- flag1=0;
- flag2=0;
- flag3=0;
- flag4=0;
- flag6=0;
- flag5=1;
- }
- }
- if(k6==0){ //K6按下
- delay(10);
- if(k6==0){
- flag1=0;
- flag2=0;
- flag3=0;
- flag4=0;
- flag5=0;
- flag6=1;
- }
- }
- }
- /************** 主程序 ************************/
- void main()
- {
-
- P3=0xff;
- P2=0xff;
- while(1)
- {keyscan();
- //按下按鍵1
- if(flag1==1)
- {
- P3=0xff;
- for(i=0;i<6;i++)
- {
- P2=table1_1[i];
- delay(1000);
- keyscan();
- }
- P2=0xff;
-
- for(i=0;i<6;i++)
- {
- P3=table1_2[i];;
- delay(1000);
- keyscan();
- }
- P3=0xff;
-
- }
- //按下按鍵2
- if(flag2==1)
- {
- P3=0xff;
- for(i=0;i<2;i++)
- {
-
- P2=table2_1[i];
- delay(2000);
- keyscan();
- }
- P2=0xff;
- for(i=0;i<2;i++)
- {
- P3=table2_2[i];
- delay(2000);
- keyscan();
- }
- }
-
- //*****當按下第三個按鍵****
- if(flag3==1)
- { P3=0xff;
- for(i=0;i<4;i++)
- {
- P2=table3_1[i];
- delay(1000);
- keyscan();
- } P2=0xff;
- for(i=0;i<4;i++)
- {
-
- P3=table3_1[i];
- delay(1000);
- keyscan();
- }
- P2=0xff;
- P3=0xff;
- for(i=0;i<4;i++)
- {
- P2=table3_2[i];
- delay(1000);
- keyscan();
- }
- P2=0xff;
- for(i=0;i<4;i++)
- {
- P3=table3_2[i];
- delay(1000);
- keyscan();
- }
- }
- //按下第四個按鍵
- if(flag4==1)
- {
- P3=0xff;
- P2=0xff;
- for(i=0;i<6;i++)
- {
- P2=table4_1[i];
- delay(1000);
- keyscan();
- }
- for(i=0;i<4;i++)
- {
- P2=table4_2[i];
- delay(1000);
- keyscan();
- }
- for(i=0;i<10;i++)
- {
- P3=table4_3[i];
- delay(1000);
- keyscan();
- }
-
- P3=table4_4[0];
-
- }
- //按下第五個按鍵
- if(flag5==1)
- {
- P3=0xff;
- for(i=0;i<8;i++)
- {
- P2=table5_1[i];
- delay(1000);
- keyscan();
- }
- P2=0xff;
- for(i=0;i<8;i++)
- {
- P3=table5_1[i];
- delay(1000);
- keyscan();
- }
- P3=0xff;
- }
- //按下第六個按鍵
- if(flag6==1)
- {
- P2=0xff;
- P3=0xff;
- for(i=0;i<1;i++)
- {
- P2=table6_1[i];
- P3=table6_1[i];
- delay(1000);
- keyscan();
- }
- for(i=0;i<1;i++)
- {
- P2=table6_2[i];
- P3=table6_2[i];
- delay(1000);
- keyscan();
- }
- }
- }
- }
復制代碼
Keil代碼與Proteus仿真下載:
4按鍵控制16LED流水燈.zip
(127.5 KB, 下載次數: 45)
2023-5-8 22:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|