AT89C51编程,两个四位八段数码管引脚图显示

求救,单片机at89c51 用四位七段数码管怎么样动态显示一个数字,我的不能得到结果1234_百度知道
求救,单片机at89c51 用四位七段数码管怎么样动态显示一个数字,我的不能得到结果1234
#include&reg51.h&sbit a=P3^0;sbit b=P3^1;sbit c=P3^2;sbit d=P3^3;unsigned char code dcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};void delay1ms(unsigned int x){ while(x--){for (j=0;j&123;j++){;}
}}void ...
我有更好的答案
#include&reg51.h&sbit a = P3^0;sbit b = P3^1;sbit c = P3^2;sbit d = P3^3;unsigned char code dcode[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};void delay1ms(unsigned int x){
while(x--)
for (j = 0; j & 123; j++);}void main (void){
unsigned int n = 1234;
P2 = dcode[n / 1000];
d = 1; delay1ms(10); d = 0;
P2 = dcode[n / 100 % 10]; c = 1; delay1ms(10); c = 0;
P2 = dcode[n / 10 % 10];
b = 1; delay1ms(10); b = 0;
P2 = dcode[n % 10] ;
a = 1; delay1ms(10); a = 0;
}}P2用共阳的数码管。单片机c51 用四位七段数码管动态显示一个数字。
采纳率:64%
你先将unsigned char n=1234;更改为unsigned int n=1234;再试试因为unsigned char 定义的是无符号8位数,数值范围0-255,而unsigned int 定义的是无符号16位数,数值范围0-65535,你定义的n=1234远超过了255,如果能显示,数值不对,那就是这个了,如果不显示,再查查程序结构。
本回答被网友采纳
你图里的LED数码管是共阴的接法,当P2口的某位置1时相应的段点亮。unsigned char code dcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};上面的段码是无法得到正确的显示,改为如下就可以了: unsigned char code dcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
另外 unsigned char n=1234; 这句的结果已经溢出了,应该改为unsigned int n=1234; 才能得到正确的结果。这个楼上已经说过了。
P2=dcode[n%];a=1;b=0;c=1;d=1;delay1ms(10);建议改成
a=1;b=0;c=1;d=1;P2=dcode[n%];delay1ms(10);其他的按楼上说的试试
其他1条回答
为您推荐:
其他类似问题
七段数码管的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。两位数码管显示_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
两位数码管显示
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩14页未读,
定制HR最喜欢的简历
你可能喜欢AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?_百度知道
AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?
共阳极接法,位选端为P2口,abcdefg为P2口,求个汇编语言程序
我有更好的答案
通常的办法是扫描显示,这样的话,用12个IO口就可以实现了,8位段码加上4位位码。程序如下:DAT
EQU 30HSCANLED EQU 34HORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:
MOV SP,#5FH
MOV TMOD,#01H
MOV TH0,#0F4H
MOV TL0,#048H
MOV P2,#00H
MOV SCANLED,#0
MOV 30H,#1
MOV 31H,#2MOV 30H,#3MOV 31H,#4SETB EA
SETB TR0SJMP $;--------------------T0ISR:CLR TR0MOV TH0,#0F4HMOV TL0,#048H
MOV DPTR,#LEDTABMOV R0,#DAT
MOV A,SCANLED
MOV A,SCANLED
MOV P2,#01H
SJMP T0DIST001:
MOV P2,#02H
SJMP T0DIST002:
MOV P2,#04H
SJMP T0DIST003:
MOV P2,#08HT0DIS:
MOVC A,@A+DPTR
INC SCANLED
MOV A,SCANLED
ANL A,#03H
MOV SCANLED,A
RETI;--------------------LEDTAB:
DB 0C0H ;&0& 00H
DB 0F9H ;&1& 01H
DB 0A4H ;&2& 02H
DB 0B0H ;&3& 03H
DB 99H ;&4& 04H
DB 92H ;&5& 05H
DB 82H ;&6& 06H
DB 0F8H ;&7& 07H
DB 80H ;&8& 08H
DB 90H ;&9& 09H;--------------------END
高级工程师
ORG&00H&AJMP&MAIN&ORG&30HMAIN:&LCALL&DISP&MOV&20H,#1&MOV&21H,#2&MOV&22H,#3&MOV&23H,#4&AJMP&MAINDISP:&MOV&A,20H&&&ACALL&SEG7&MOV&P0,A&SETB&P2.0&ACALL&DLY&CLR&P2.0&MOV&A,21H&&&ACALL&SEG7&MOV&P0,A&SETB&P2.1&ACALL&DLY&CLR&P2.1&MOV&A,22H&&ACALL&SEG7&MOV&P0,A&SETB&P2.2&ACALL&DLY&CLR&P2.2&MOV&A,23H&&ACALL&SEG7&MOV&P0,A&SETB&P2.3&ACALL&DLY&CLR&P2.3&&RET&DLY:&MOV&R7,#2D1:&MOV&R6,#40&DJNZ&R6,$&DJNZ&R7,D1&RETSEG7:&INC&A&MOVC&A,@A+PC&RET&&&&&DB&&&&&&&&0C0H;0&&&&&&&&DB&&&&&&&&0F9H;1&&&&&&&&DB&&&&&&&&0A4H;2&&&&&&&&DB&&&&&&&&0B0H;3&&&&&&&&DB&&&&&&&&099H;4&&&&&&&&DB&&&&&&&&092H;5&&&&&&&&DB&&&&&&&&082H;6&&&&&&&&DB&&&&&&&&0F8H;7&&&&&&&&DB&&&&&&&&080H;8&&&&&&&&DB&&&&&&&&090H;9&&&&&&&&&&&&&&END
本回答被提问者采纳
自己要学会仿制写程序,懂了原理之后就容易理解了,我说一下原理吧:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划&a,b,c,d,e,f,g,dp&的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
动态显示,先显示1,再显示2,3,4轮流。
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
汇编语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。 上传我的文档
 下载
 收藏
粉丝量:105
该文档贡献者很忙,什么也没留下。
 下载此文档
51单片机-八段数码管显示
下载积分:1500
内容提示:51单片机-八段数码管显示
文档格式:PDF|
浏览次数:526|
上传日期: 16:59:14|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1500 积分
下载此文档
该用户还上传了这些文档
51单片机-八段数码管显示
关注微信公众号在四位共阴极数码上显示“2 3 5 8”四个数字
前言:学机械的,软硬兼修必需!从基础再学起。
(1)数码管(7SEG-MPX4-CC-BLUE)
数码管是一种半导体发光器件,其基本单元是发光二极管。下见数码管结构图。
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮;反之为高电平时不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
数码管按段数分为七段数码管和八段数码管(多一个小数点显示);按能显示多少个“8”,可分为1位、2位、3位、4位等数码管。
驱动方式分静态式和动态式两类。静态驱动编程简单,显示高度高,但占用I/O端口多,增加硬件电路的复杂性;动态驱动通过分时轮流控制各个数码管的选通控制打开,就使各个数码管轮流受控显示。只要扫描的速度足够快,二极管的余辉效应给人印象就是一组稳定的显示数据,不会有闪烁感,能够节省大量的I/O端口,而且功耗更低。
2. 仿真电路设计
(1)元件:
单片机(AT89C51)、4位共阴极数码管(7SEG-MPX4-CC-BLUE)。
(2)内容:
对于数码管,P1段控,P2位控。
(3)电路连线:
3. 程序设计
(1)内容:
共阴极数码管,低电平位有效;数码管位控以逐位显示,段控以输出当位内容;数码管发光,各位显示延时,产生常亮错觉。
(2)代码:
#include &reg51.h&
#define uint unsigned int
#define uchar unsigned char
void Delay(uint);
voidLedScan(void);
// common cathode(共阴极)
// Led code, "0~9, A~F"
ucharLedOfNum[] =
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
/******************** Main function ********************/
void main(void)
P2 = 0xFF;
LedScan();
/******************** Led scan ********************/
// P1控制段码显示
// P2位控(共阴极)
voidLedScan(void)
for (k=0; k&150; k++)
P1 = LedOfNum[2];
P2 = 0x0E;
Delay(1000);
P1 = 0x00;
P1 = LedOfNum[3];
P2 = 0x0D;
Delay(1000);
P1 = 0x00;
P1 = LedOfNum[5];
P2 = 0x0B;
Delay(1000);
P1 = 0x00;
P1 = LedOfNum[8];
P2 = 0x07;
Delay(1000);
P1 = 0x00;
/******************** Delay function ********************/
void Delay(uint x)
while (x--)
for(k=0;k&125; k++) ;
4. 仿真操作
(1)装入HEX文件,运行。
(2)运行结果:
b. 分解(改延时delay1000)
5. 实物确认
一开始有两根线接错,后来再一步步检查线路找出来。延时时间略短,亮度有点不足,或限流电阻太大了。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!}

我要回帖

更多关于 四位八段数码管引脚图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信