1.任务
利用2个LED和4位数码管来显示一定功能
1.启动后,led熄灭,数码管显示0-00
2.D1数码管循环闪烁,每闪烁1次数码管最右边两位加1,加到100清零
3.D1每闪烁10下,D2灯的状态翻转一次,且数码管最左边1位数加1,到10为0
2.设计电路
proteus里找到以下元件
7SEG-MPX4-CA-BULE
9排阻
俩个LED
10Ω的电阻
连接好之后写代码
3.插入写好的hex
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code SMG_Duanma[10] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};
sbit C1=P2^7;
sbit C2=P2^6;
sbit C3=P2^5;
sbit C4=P2^4;
sbit D1=P1^1;
sbit D2=P1^0;
uint aa=0;cc=0;com=0;
void weixuan(uchar n)
{
switch(n)
{
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;
}
}
void smgDisout(uchar wei,uchar duan)
{
P0=0XFF;
switch(wei)
{
case 1: weixuan(1); break;
case 2: weixuan(2); break;
case 3: weixuan(3); break;
case 4: weixuan(4); break;
}
P0=duan;
}
void smgDisplay(uint dat)
{
smgDisout(1,SMG_Duanma[com]);
smgDisout(2,0xbf);
smgDisout(3,SMG_Duanma[(dat%100)/10]);
smgDisout(4,SMG_Duanma[dat%10]);
}
void delay(uint t)
{
while(t--)
{
smgDisplay(aa);
}
}
void led()
{
aa++;
delay(1000);
if(aa%10==0)
{
com++;
D2=~D2;
}
}
void main()
{
D1=0;D2=0;
while(1)
{
D1=0;
delay(3000);
D1=1;
smgDisplay();
led();
if(aa==100)
{
aa=0;
}
}
}
现象: