关于c51单片机 怎样实现静态数码管动态显示的数字等于点亮LED灯的个数?的讨论正在各大平台持续发酵 ,我们精心筛选了最新资讯,希望能为您带来实质性的帮助 。
c51单片机,静态数码管显示数字等于点亮LED灯的个数 ,这个很容易实现的。在P3口接8个LED灯,且负极接P3口,亮1个灯时 ,P3=0xFE,再依次向左移位一次,从低位向左增加一个0 ,则亮灯数加一,同时,用一个变量计数,并送数码管显示就行了 ,一位共阳数码管接在P0口。仿真图如下 。
/********************/
/*
按键静态显示不同数字,即按1键显示1
动态显示:数字移动显示
*/
#include<reg52.h>
#define?uint?unsigned?int?
#define?uchar?unsigned?char?
sbit?Dp=P0^6;
sbit? d1=P2^4;
sbit?d2=P2^5;
sbit?d3=P2^6;
sbit?d4=P2^7;
uchar?code?table[]=
{0x28,0xeb,0x32,0xa2,
0xe1,0xa4,0x24,0xea,
0x20,0xa0,0xf7};
uchar?code?table1[]=?{0xfe,0xfd,0xfb};?uint?num1=0,temp,num,flag=0;
char?Char[50]="===",*p;
uchar?dp=0,wei;
float?A=0;
void?delay(uint?z)
{? uint?x;
uint?y; for(x=z;x>0;x--)?for(y=110;y>0;y--)?;? }
void?jian()?//键盘扫描 ?
{
if(num1==3)num1=0; P2=table1[num1]; temp=P2; temp=temp&0xf0; if(temp!=0xf0) {delay(5); temp=P2; temp=temp&0xf0; if(temp!=0xf0)?{temp=P2;flag=1;
? switch(temp>>4)
? {case?0x0e:num=0+4*num1;
break;
case?0x0d:num=1+4*num1;
break;
case?0x0b:num=2+4*num1;
break;
case?0x07:num=3+4*num1;
break;
? }
while(temp!=0xf0)
? {
temp=P2;
temp=temp&0xf0;
? }
delay(5);
while(temp!=0xf0)
? {
temp=P2;
temp=temp&0xf0;
? }
?
?}
}num1++;? P2=0xff;
}
//数码管显示
void?display(char?z[],uchar?z1) //“:“表示“- ” /***无
{? if(z[0]-'0'<13)? //不能为小于等于0
{d1=0;P0=table[z[0]-'0'];if(z1==1)Dp=0;
delay(1);d1=1;P0=0xff;
} if(z[1]-'0'<13){d2=0;P0=table[z[1]-'0'];if(z1==2)Dp=0;delay(1);d2=1;P0=0xff;?} if(z[2]-'0'<13){d3=0;P0=table[z[2]-'0'];if(z1==3)Dp=0;delay(1);d3=1;P0=0xff;} if(z[3]-'0'<13){d4=0;P0=table[z[3]-'0'];if(z1==4)Dp=0;delay(1);d4=1;P0=0xff;?} }void?main()
{
while(1) {jian();
if(flag==1){flag=0;?
? Char[wei+3]='0'+num;?wei++;
? p=Char+wei-1;
?
? }?
?if(wei>0)display(p,dp);?
}}
硬件电路图
本文已完
c51单片机,静态数码管显示数字等于点亮LED灯的个数 ,这个很容易实现的。在P3口接8个LED灯,且负极接P3口,亮1个灯时 ,P3=0xFE,再依次向左移位一次,从低位向左增加一个0 ,则亮灯数加一,同时,用一个变量计数 ,并送数码管显示就行了,一位共阳数码管接在P0口。仿真图如下 。
/********************/
/*
按键静态显示不同数字,即按1键显示1
动态显示:数字移动显示
*/
#include<reg52.h>
#define?uint?unsigned?int?
#define?uchar?unsigned?char?
sbit?Dp=P0^6;
sbit? d1=P2^4;
sbit?d2=P2^5;
sbit?d3=P2^6;
sbit?d4=P2^7;
uchar?code?table[]=
{0x28,0xeb,0x32,0xa2,
0xe1,0xa4,0x24,0xea,
0x20,0xa0,0xf7};
uchar?code?table1[]=?{0xfe,0xfd,0xfb};?uint?num1=0,temp,num,flag=0;
char?Char[50]="===",*p;
uchar?dp=0,wei;
float?A=0;
void?delay(uint?z)
{? uint?x;
uint?y; for(x=z;x>0;x--)?for(y=110;y>0;y--)?;? }
void?jian()?//键盘扫描 ?
{
if(num1==3)num1=0; P2=table1[num1]; temp=P2; temp=temp&0xf0; if(temp!=0xf0) {delay(5); temp=P2; temp=temp&0xf0; if(temp!=0xf0)?{temp=P2;flag=1;
? switch(temp>>4)
? {case?0x0e:num=0+4*num1;
break;
case?0x0d:num=1+4*num1;
break;
case?0x0b:num=2+4*num1;
break;
case?0x07:num=3+4*num1;
break;
? }
while(temp!=0xf0)
? {
temp=P2;
temp=temp&0xf0;
? }
delay(5);
while(temp!=0xf0)
? {
temp=P2;
temp=temp&0xf0;
? }
?
?}
}num1++;? P2=0xff;
}
//数码管显示
void?display(char?z[],uchar?z1) //“:“表示“-” /***无
{? if(z[0]-'0'<13)? //不能为小于等于0
{d1=0;P0=table[z[0]-'0'];if(z1==1)Dp=0;
delay(1);d1=1;P0=0xff;
} if(z[1]-'0'<13){d2=0;P0=table[z[1]-'0'];if(z1==2)Dp=0;delay(1);d2=1;P0=0xff;?} if(z[2]-'0'<13){d3=0;P0=table[z[2]-'0'];if(z1==3)Dp=0;delay(1);d3=1;P0=0xff;} if(z[3]-'0'<13){d4=0;P0=table[z[3]-'0'];if(z1==4)Dp=0;delay(1);d4=1;P0=0xff;?} }void?main()
{
while(1) {jian();
if(flag==1){flag=0;?
? Char[wei+3]='0'+num;?wei++;
? p=Char+wei-1;
?
? }?
?if(wei>0)display(p,dp);?
}}
硬件电路图
呈现c51单片机 怎样实现静态数码管动态显示的数字等于点亮LED灯的个数?的核心内容解析,若这些分析对您的工作或学习有所助益 ,建议您将本站加入书签以便后续查阅。本文来自作者[彼啦左]投稿,不代表捕梦资讯立场,如若转载,请注明出处:https://urbike.com.cn/news/12032.html
评论列表(3条)
我是捕梦资讯的签约作者“彼啦左”
本文概览:关于c51单片机 怎样实现静态数码管动态显示的数字等于点亮LED灯的个数?的讨论正在各大平台持续发酵,我们精心筛选了最新资讯,希望能为您带来实质性的帮助。c51单片机,静态数...
文章不错《c51单片机 怎样实现静态数码管动态显示的数字等于点亮LED灯的个数?》内容很有帮助