标题:
51单片机按键,led小灯泡,数码管综合程序与Proteus仿真
[打印本页]
作者:
2420726393
时间:
2021-5-27 00:22
标题:
51单片机按键,led小灯泡,数码管综合程序与Proteus仿真
其中开关SW1为系统总控制开关//系统初始为关闭状态/此时按下SW1,系统开启,指示灯D1亮,
第一块数显板会显示按下次数1////此时按SW2/第一次D2亮起//第二次按下D3亮起//第三次按下D2和D3会同时熄灭,每按一次,
第四块数显板会显示开关SW2按下次数。当任意一个开关按下次数达到10次时,对应的数显板会从零开始重新计数。
开关SW3按下时,不管系统处于什么状态,都将关闭系统,而SW4按下时,第二个小灯泡会点亮
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
6@RAW8C%FO)~18Y030XOTVG.png
(55.76 KB, 下载次数: 56)
下载附件
2021-5-27 00:22 上传
单片机源程序如下:
/*此系统为开关联合控制LED工作台////其中开关SW1为系统总控制开关//系统初始为关闭状态/此时按下SW1,系统开启,指示灯D1亮,
第一块数显板会显示按下次数1////此时按SW2/第一次D2亮起//第二次按下D3亮起//第三次按下D2和D3会同时熄灭,每按一次,
第四块数显板会显示开关SW2按下次数。当任意一个开关按下次数达到10次时,对应的数显板会从零开始重新计数。*/
#include"reg52.h"
sbit C1=P3^0; //定义数码管四个引脚
sbit C2=P3^1;
sbit C3=P3^2;
sbit C4=P3^3;
unsigned char F=0; //定义系统是否开启
unsigned char A=0; //定义D3灯开关次数
sbit D1=P1^0; //LED引脚
sbit D2=P1^1;
sbit D3=P1^2;
sbit SW1=P2^0; //开关引脚
sbit SW2=P2^1;
unsigned char s1=0,s2=0; //数显管开关次数
unsigned char SMG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void SMGDelay(unsigned char t) //此处为延时函数定义
{
while(t--);
}
void SMGPLAY(unsigned char P,unsigned char D) //四个数显管的显示位置
{
P0=0xff; //消隐
switch(P)
{
case 1:C1=1;C2=0;C3=0;C4=0;break;
case 2:C1=0;C2=1;C3=0;C4=0;break;
case 3:C1=0;C2=0;C3=1;C4=0;break;
case 4:C1=0;C2=0;C3=0;C4=1;break;
}
P0=D;
}
void PUT4SMG() //定义四个数显管显示内容
{
SMGPLAY(1,SMG[s1]);
SMGDelay(100);
SMGPLAY(2,0xbf);
SMGDelay(100);
SMGPLAY(3,0xbf);
SMGDelay(100);
SMGPLAY(4,SMG[s2]);
SMGDelay(100);
}
void KEYS() //定义开关按下次数和系统开关和小灯泡亮灭
{
if(SW1==0)
{
SMGDelay(100);
if(SW1==0)
{
while(SW1==0)
{
PUT4SMG();
}
s1++;
if(s1==10)
{
s1=0;
}
if(F==0)
{
F=1;
D1=0;
}
else
{
F=0;
D1=1;
D2=1;
D3=1;
A=0;
}
}
}
if(SW2==0)
{
SMGDelay(100);
if(SW2==0)
{
while(SW2==0)
{
PUT4SMG();
}
s2++;
if(s2==10)
{
s2=0;
}
if(F==1)
{
A++;
switch(A)
{
case 1:D2=0;break;
case 2:D3=0;break;
case 3:D2=1;D3=1;A=0;break;
}
}
}
}
}
void main()
{
while(1)
{
PUT4SMG();
KEYS();
}
}
复制代码
所有资料51hei提供下载:
联合控制开关 LED.rar
(20.23 KB, 下载次数: 19)
2021-5-27 00:21 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1