A. 51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示
1、首先,要把代码写好,点亮数码管。
B. keil51单片机数码管滚的显示
一,LED数码管显示的原理
数码管的发光原理实际是七段LED灯(不包括小数点)或者八段LED灯被点亮的结果。八段依次是 a,b,c,d,e,f,g,dp(表示点)。LED数码管是常见的显示器件,在很多场合都可以看到,比如,闹钟冲胡的显示,家电的显示功能,车站等等。我们看到的数码管为“8”字形,数码管又分为共阴极和共阳极两种。
1.共阴极:就是将八段数码管的阴极(负极)接地在一起,需要高电平点亮。如下图所示
2.共阳极:就是将八段数码管的阳极(正极)接(+5v)在一起,需要低电平点亮。如下图所示
3.数码管的具体显示
①共阴数码管的点亮
为使数码管的不同段显示不同的字符,需要点亮和熄灭不同段的LED灯,才可以实现。对于共阴极数码管来说,只需要给高电平LED灯就会被点亮,对应的断码就会亮起。给低电平相应的断码就会熄灭。
以显示“0”为例 只需要给“dp”和“g”给低电平熄灭就可以了
断码的顺序为:dp g f e d c b a
“0”断码用16进制表示为:3FH
其他字符的断码以此类推:如下表所示
②共阳数码管的点亮
为使数码管的不同段显示不同的字符,需要点亮和熄灭不同段的LED灯,才可以实现。对于共阳极数码管来说,只需要给低电平LED灯就会被点亮,对应的断码就会亮起。给高电平相应的断码就会熄灭。
以显示“0”为例 只需要给“dp”和“g”给高电平熄灭就可以了
断码的顺序为:dp g f e d c b a
1 1 0 0 0 0 0 0
“0”断码用16进制表示为:C0H
其他字符的断码以此类推:如下表所示
二.动态数码管的显示(共阴)
思路: 建立显存、断码、位码表格,将软件延时部分设计成子函数的结构,在主函数中利用查表的方法来获得相应的位码和段码,这种思路经常用于显示变化的字符。
显示的状态(左移动态显示,类似于常见的广告牌)
3.原理图(protues仿真图)
4.设计方法
在多个数码管的显示中点亮数码管需要 位码和段码共同作核搏用才能点亮
位码(低电平有效):表示要点亮的数码管的位置。
断码(上面讲过了):就是要点亮哪一段数码管
举例说明:
如果要在上面的六个数码管中点亮第一个数码管,且让它显示“1”,首先确定它的位置是第六个。用八个二进制表示,最低位从0开始,最高位为7 那么它的位码为:11111110 (低电平有效)
断码为0x06
其他的以此类推
先要数码管动态显示要建一个数组。下图为断码
源代码:
#include#include#define uchar unsigned char#define uint unsigned intsbit an=P2^6; sbit wei=P2^7; uchar code tab[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x00,0x40}; //共阴极数码管段码表uchar idata dis_buf[6]={17,17,17,17,17,17}; //显示缓冲区数据(十进制)void delayms(uint i) //延时1ms函数{ uint j; for(;i>0;i--) for(j=120;j>0;j--) {;}}void main() //主函数{ uchar k,m,n,bitcode,segcode; while(1) { for(n=0;n<17;n++) { dis_buf[0]=dis_buf[1]; //数据移动 dis_buf[1]=dis_buf[2]; dis_buf[2]=dis_buf[3]; dis_buf[3]=dis_buf[4]; dis_buf[4]=dis_buf[5]; dis_buf[5]=n; for(m=0;m<100;m++) //100次扫描,大约600ms { bitcode=0xfe; //起始位码 for(k=0;k<6;k++) { P0=0xff; //消影 wei=1; wei=0; segcode=dis_buf[k]; //取数据 P0=tab[segcode]; //送段码散氏拦 an=1; an=0; P0=bitcode; //送位码 wei=1; wei=0; delayms(1); bitcode=_crol_(bitcode,1); //更新位码,准备显示下一位 } } } }}