标题:
单片机按键控制小灯的仿真+代码(三种效果)
[打印本页]
作者:
累不死的狗
时间:
2018-12-24 23:51
标题:
单片机按键控制小灯的仿真+代码(三种效果)
某学校课程设计程序与电路
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(15.3 KB, 下载次数: 42)
下载附件
2018-12-25 00:41 上传
单片机源程序如下:
#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 上传
点击文件名下载附件
按键小灯控制电路
下载积分: 黑币 -5
程序.zip
(26.66 KB, 下载次数: 11)
2018-12-24 23:48 上传
点击文件名下载附件
按键小灯控制程序
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1