某学校课程设计程序与电路
仿真原理图如下(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)
|