导航:首页 > 操作系统 > 单片机数码管字母

单片机数码管字母

发布时间:2023-07-10 20:57:04

单片机字母显示

从DISP知道,这是一个显示子程序
从SJMP DISP知道,这个是一个死循环,不停的在显示
那么显示在哪里
从P1可知,应该是P1口接了数码管。
那么显示了什么?
从#3CH可知,接了共阴极数码管
显示的是字母“b”且小数点不亮(可查阅段选码)

然后为什么这里是一个死循环?
应该是程序中有中断,一直在等待中断跳出。

SJMP DISP 跳到DISP:MOV P1,#3CH 这句,DISP是一个标号。也就是如果没有中断产生
那就一直在执行
DISP:MOV P1,#3C
-----SJMP DISP

可以看到你的程序是有中断的
MOV IE,#85H中断开放
-----SETB PX1
-----SETB IT0
-----SETB IT1

㈡ 共阴极单片机数码管我不明白排列顺序为何是hgfedcba这个顺序,而不是从abcdefgh这个

不管是共阴还是共阳,都是按,dp,g,f,e,d,c,b,a的顺序显示。
只是对于共阴1代表亮,0代表灭。共阳正好相反。比如想用共阴显示0,那按照顺序就是0011 1111,转换为16进制就是3f,所以ox3f就代表零。

㈢ 单片机数码管显示的原理(CA CC) 字型的显示 动态显示的原理 大概的说下 采纳的再加分

数码管,举个例子,8段共阴极数码管。其实它的结构很简单,就是8个LED发光二极管,这8个LED发光二极管的正极就是a b c d e f g dp(小数点)这8个,负极就8个LED连接在一起。
单片机I/O口比如P0什么的不是有8个?正好连接到8个发光二极管的正极。然后把数码管负极接地。当你要显示数字,比如2时,2对应a b d e g这几个字母对应的LED亮,所以只要单片机接到abdeg的IO口置高电平就行了,正高负低,LED不就亮了?对应的LED亮了,不就显示对应的数字了?
至于动态显示,一般是8个数码管吧?段的接口不变,还是P0口,而它们的负极呢,不再接地了,而是接到P2口(P1什么的都行)。P2口来控制哪个数码管亮。只有当P2口为低电平的时候,LED才有可能导通并亮。
比如你要显示12345678,你可以先把P0口的段码调到1,也就是bc亮,P1.1、P1.2置高电平,这样就是显示1了,然后就是位选了,1是显示在第一位,所以你应该把P2.0置低电平,其他位置高电平,这样,第一个数码管就显示1了。显示2,则把P2.1拉低,其他拉高。这样弄一个循环,数码管不就从1依次显示到8了?
不过由于单片机执行指令很快,如果直接12345678这样显示,由于太快,会导致数码管很暗,所以,你可以在切换数码管的时候,加上一点点的延时,不过不能太长,不然就会闪了。当然你也可以把显示程序放到中断里,比如没过10ms就显示一次,这样会更好一点。
懂了吗?

㈣ 单片机四位数码管显示中间一行字母

51单片机(四位数码管芦袜的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示P ”个字符;2)等待按键,如按了任何一个键,则将这 4个字符清除, 改为显示0000”个字符(为数字的0)。E3最佳答案下面这个程序是4x4距阵键拍或盘丄ED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#i nclude<at89x52.h> un sig ned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //gongyang 数码管 0-F 代码

un sig ned char k;//设置全局变量k为键盘的键值键盘延时函数

//延时函数
void key_delay(void) {int t;for(t=0;t<500;t++);}

键盘扫描函数******************************/
//键盘扫描函数
void keyscan(void)

{unsigned char a;P2 = 0xf0;if(P2!=0xf0){key_delay();if(P2!=0xf0){P2 = 0xfe; key_delay();a = P2;switch (a)
//键盘初始化//有键按下?//延时//确认真的有键按下?//使行线 P2.4 为低电平,其余行为高电平//a 作为缓存/陪贺激/开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线 P2.5 为低电平,其余行为高电平a = P2;switch (a)
case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线 P2.6 为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;
}} break;}}}}

**************************** ***主函数 ***********************************
void main(void){while(1)
//调用键盘扫描函数//查找按键对应的数码管显示代码
{keyscan(); switch(k){case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;
case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break; default:break; // 退出}}}

end
Welcome ToDownload !!!欢迎您的下载,资料仅供参考!

5.9
网络文库VIP限时优惠现在开通,立享6亿+VIP内容
立即获取
51单片机(四位数码管的显示)程序[1]
51单片机(四位数码管的显示)程序
基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示P ”个字符;2)等待按键,如按了任何一个键,则将这 4个字符清除, 改为显示0000”个字符(为数字的0)。
E3最佳答案
下面这个程序是4x4距阵键盘丄ED数码管显示,一共可以到0-F显示,你可以稍微
改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!

㈤ 单片机数码管管码的意义是什么

单片机数码管是由8个LED组成的,根据“共阴”还是“共阳”,这个码正好相反,如果共阴,那么发“高”也就是1点亮,如果是共阳,发“低”也就是0点亮。每个LED是按如下图的方式排列的,于是“码”就按这个顺序来给定一个控制状态值。

㈥ 单片机开关控制LED数码管的编码

一,什么是数码管

数码管,其实就是由多个led组合在一起的组合显示块;有共阴极的,也有共阳极的。使用的数码管不同,里面包含的led个数也会有相关的差异。我们通常使用的数码管,里面有8个led灯,大家可以参照生活中的数码管器件就一目了然了,你会发现,数码管显示的每一个数字或字母,都是一段一段组合拼接起来的,并不是像写的那样圆滑。其中,组合的每一个段,就是一个led灯。

二,点亮一个数码管

2.1.在点亮数码管之前,你还必须弄清楚,改数码管的接是共阴极还是共阳极的接法;其次,还得弄清楚是那几个(或一个) IO口是IO口 的断选位(也就是控制显示哪一个数码管,通常由IO口控制一个译码器来实现,因为这样更节约IO口资源)。

2.2.弄清楚断选位之后,还得知道,是哪些IO口控制我们的数码管上的led;

比如:

P0.0 控制数码管上的led.0;(注意:数码管上对应的led位,可以参照原理图上的或查阅相关资料获得,这里仅仅举列)

P0.1-->led.1 P0.2-->led2 ......

2.3.想要点亮数码管很容易,只要开启对应的数码管断选位,再设置数码管上led的值为点亮(有的数码管是共阴极接法,有的是共阳极接法,根据具体的设计,给出相关的高或低电平即可)就OK了。但是,我们要在数码管上显示我们想要的数字增么办呢?这个时候,就是考研创造力的时候了,有的数码管的资料会直接给出它的真值表,但有的却不一定找得到。在这个时候,我们就得根据我们想要显示的数字,点亮并熄灭对应数码管上的led来实现。(推荐:你可以自己先实验,找出0-9,或其他想要显示的字符所对应的IO口的值,来保存起来,这样你就可以重复利用啦!)

三,点亮多个数码管

3.1 我们想要点亮多个数码管,首先可以根据2.1,弄清楚你的数码管的断选位,然后周期性的改变断选位的值,以此动态逐个显示你的数码管。

3.2 在显示多个数码管时,建议周期大于100hz,这样人眼难以识别起关和开的瞬间,我们看起来就像时很多个数码管同时点亮了一样。

四,动态显示数码管

4.1 ,在动态显示数码管的值时,建议先根据2.2和2.3,把对应的数码管显示参数照准,并保存下来,这样你用起来也方便。

4.2, 动态显示数码管,我们可以在规定的时间周期,改变数码管对应led的开关个数来实现,比如说:

0 在数码管中显示的值为0xc0 1是0xf9

那么我们就可以在规定的时间里,切换该值,从而达到动态效果。

4.3 我们应该注意的时,扫描数码管(即显示多个数码管)应该与设置数码管的值(数码管中led的状态更新)区分开,扫描周期我们可以放短一点,而改变它的值的周期我们可以一秒或者是2秒改变一次。

4.4 消除余晖,大家实验后,可能会发现,你显示的值有的时候并不是想要的,它会跳动或者是亮灭不清晰,这个我们就叫做余晖效应。

产生余晖效应的原因是因为你在选则下一个数码管的时候,还保留了上一个数码管的显示值,所以我们消除余晖,只需要在改变数码管显示值的时候,先关闭所有数码管的显示,在值跟新完成后我们再打开显示。这里你不用担心关闭和开启会有闪烁,更新值的时间会很短,肉眼时几乎察觉不到滴。

5,示列代码

/*

芯片:stc89c52

器件:38译码器等

编译环境:UV4,C语言

*/

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

unsigned char code LedChar[] = {undefined

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e

};//数码管显示值真值表缓存数组

unsigned char LedBuff[6] = {undefined

0xff,0xff,0xff,0xff,0xff,0xff

};//数码管显示值缓存数组

void main()

{undefined

unsigned char i =0;

unsigned int cnt = 0;

unsigned long sec = 0;

ENLED = 0;

ADDR3 = 1;

TMOD = 0x01;

TH0 = 0xfc;

TL0 = 0x67;

TR0 = 1;

while(1)

{undefined

if(TF0==1)

{undefined

TF0 = 0;

TH0 = 0xfc;

TL0 = 0x67;

cnt++;

if(cnt>=1000)

{undefined

cnt = 0;

sec++;

LedBuff[0] = LedChar[sec%10];

LedBuff[1] = LedChar[sec/10%10];

LedBuff[2] = LedChar[sec/100%10];

LedBuff[3] = LedChar[sec/1000%10];

LedBuff[4] = LedChar[sec/10000%10];

LedBuff[5] = LedChar[sec/100000%10];

}

switch(i)

{undefined

case 0:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LedBuff[0];ENLED = 0;break;

case 1:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LedBuff[1];ENLED = 0;break;

case 2:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=LedBuff[2];ENLED = 0;break;

case 3:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=LedBuff[3];ENLED = 0;break;

case 4:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LedBuff[4];ENLED = 0;break;

case 5:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff[5];ENLED = 0;break;

default:break;

}

}

}

}

以上代码,仅供参考,您需要根据自己原理图的设计来实现。

㈦ 用89c51单片机写一个数码管显示HELLO的程序,是在一个七段数码管上依次出现几个字母

在数码管依次排列好这一句话,首先取模,然后写显示函数,写完函数放置while(1)中无限循环下去

代码如下:

#include; //用的是单独操作,没有用总线

sbit led1 = P1^0;

sbit led2 = P1^1;

sbit led3 = P1^2;

sbit led4 = P1^3;

sbit led5 = P1^4;

sbit led6 = P1^5;

sbit led7 = P1^6; //看清楚自己的管脚,不一定对应,这里采用P0对应段选

code unsigned char led_paly[5] = {0x76,0x79,0x38,0x38,0x5c};// H E L L O

void delay(unsigned int um)//延时函数

{

int i,j;

for(i = 0;i &lt; um;i++)

{

for(j = 0;j &lt; 200;j++);

}

}

void display()

{

P0 = led_paly[0];//显示局尺桐H

led2 = 0;

delay(50);

led2 = 1;

P0 = led_paly[1];//显示E

led3 = 0;

delay(50);

led3 = 1;

P0 = led_paly[2];//显示L

led4 = 0;

delay(50);

led4 = 1;

P0 = led_paly[3];//显示E

led5 = 0;

delay(50);

led5 = 1;

P0 = led_paly[4];//显示O

led6 = 0;

delay(50);

led6 = 1;

}

void main(void)

{

while(1)

{

display();

}

}

(7)单片机数码管字母扩展阅读:

51单片机的接口作用

P0口:可以被定义为桐坦数据/地址的低八位,能够用于外部程序/数据存储器。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:标准输入输出I/O,P1口管脚写入1后,被内部上拉为高,可用作输入。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:既困枣可用于标准输入输出I/O,也可用于外部程序存储器或数据存储器访问时的高八位地址。

P3口:既可以做标准输入输出I/O,也可作为AT89C51的一些特殊功能口。

阅读全文

与单片机数码管字母相关的资料

热点内容
单片机中三位数码管原件 浏览:140
pdf可以删除其中一页 浏览:216
清dns缓存的命令 浏览:103
免费pdf在线转换 浏览:768
堆货算法 浏览:878
vsc编译vc程序 浏览:197
centos55命令 浏览:709
美国干编程有什么条件 浏览:505
阿里云服务器远程链接 浏览:249
墨镜慧眼怎么下载厂商的app 浏览:61
iphone加密专线 浏览:491
aes产生加密文件 浏览:415
编程实现蓝牙通信 浏览:769
怎么恢复掉签的app 浏览:848
服务器部署ip地址 浏览:323
涉密场所周边安全防护距离算法 浏览:674
安卓fpse模拟器怎么设置加速 浏览:948
建行app怎么生成电子签章 浏览:510
获取当前时间javadate 浏览:75
带密码的wifi如何加密 浏览:239