求救,单片机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){ unsigned char j; while(x--){for (j=0;j<123;j++){;} }}void main (void){ unsigned char n=1234; while(1){ P2=0xff; P2=dcode[n/1000];a=1;b=1;c=1;d=0;delay1ms(10); P2=0xff; P2=dcode[n%1000/

100];a=1;b=1;c=0;d=1;delay1ms(10); P2=0xff; P2=dcode[n%1000%100/10];a=1;b=0;c=1;d=1;delay1ms(10); P2=0xff; P2=dcode[n%1000%100%10];a=0;b=1;c=1;d=1;delay1ms(10);}}

第1个回答  2012-11-10
#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)
{
unsigned char j;
while(x--) for (j = 0; j < 123; j++);
}

void main (void)
{
unsigned int n = 1234;
while(1){
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 用四位七段数码管动态显示一个数字。本回答被提问者采纳
第2个回答  2012-11-04
你图里的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; 才能得到正确的结果。这个楼上已经说过了。
第3个回答  2012-11-04
你好
你先将unsigned char n=1234;更改为unsigned int n=1234;再试试
因为unsigned char 定义的是无符号8位数,数值范围0-255,而unsigned int 定义的是无符号16位数,数值范围0-65535,你定义的n=1234远超过了255,如果能显示,数值不对,那就是这个了,如果不显示,再查查程序结构。本回答被网友采纳
第4个回答  2012-11-04
P2=dcode[n%1000%100/10];a=1;b=0;c=1;d=1;delay1ms(10);
建议改成
a=1;b=0;c=1;d=1;P2=dcode[n%1000%100/10];delay1ms(10);
其他的按楼上说的试试

求救,单片机at89c51 用四位七段数码管怎么样动态显示一个数字,我的不...
} P2用共阳的数码管。单片机c51 用四位七段数码管动态显示一个数字。

AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?
1、首先我们先打开keil。2、接着,我们要定义好库函数,void main(){while(1)\/\/不断循环显示{dispaly();}}void dispaly(){P0=smg[1];\/\/选择显示数字几,P1=0x7f;\/\/控制是否点亮数码管。3、接着,我们加上一条循环语句。delay(5);\/\/显示5毫秒P0=0XFF;\/\/消影P0=smg[2];P1=0xbf;delay...

AT89C51单片机实现4位数码管显示学号后四位,谢谢
define uint unsigned int \/\/共阴数码管七段码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};uchar code table2[]={5,4,3,2};\/\/这就是学号的后4位,自行修改 void display()\/\/4位显示子程序 { P0=~(table[ table2[0]]);wei1=0;Delay1...

如何使用单片机at89c51驱动4位8段数码管,如果用到芯片来驱动的,电路...
看你将四位数码管接在单片机的哪一组输出口 例如51单片机一般都是四组八位输i\/o口P0,P1,P2,P3口 一般P0口是三态i\/o是要接上拉电阻的。其他接口是不用接上拉电阻的。上拉电阻一般选用1k~4k7都可以保证各管脚输出的电流小于500mA就可以了。图我传的这个图 六位数码管虽然是共阴极的 (但...

AT89C51单片机用4位数码管做秒表,要求用动态扫描做,汇编语言
;汇编时钟程序。4位共阳管。P0口段码,P2.0~P2.3位码。显示毫秒和秒。三个按键一个控制时钟开始走,一个控制暂停和继续。。。一个按键清0 ;12M晶振 2011 04 20 调试完成 STRT EQU P3.2 STP EQU P3.3 CLRR EQU P3.5 ORG 00H SJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN: MOV ...

利用单片机AT89C51设计电路,并用4个按键控制1个数码管的数字的变化(要...
充分利用单片机的中断机制,使数码管LED1直接实现数字流水显示,而另一个数码管LED2根据案件控制,进行多组内容的切换显示变换效果,要求使用至少4个按键来控制显示切换,需要设计出多组显示的至少4组显示内容。

at89c51单片机的七段显示数码管和流水灯的编程
你的LED用错模型了,要用LED-RED那几个后面带颜色的。};flag++;}74HC164就是个移位寄存器,假设你使用的单片机是12M晶振,使用定时器1,并且LED是高电平点亮。那么程序如上,很简单,就是设置两个标志位再使用定时器中断,你每隔一秒发送一个数据给74HC164就可以了。

at89c51单片机的七段显示数码管和流水灯的编程
可以到一些贴吧论坛讨论,相互学习 include <reg52.h> typedef unsigned int uint;typedef unsigned char uchar;sbit wela = P2^7; \/\/数码管位声明 sbit dula = P2^6; \/\/数码管段选声明 sbit FM = P2^3;\/\/蜂鸣器声明 uchar counter = 0, counter1 = 0, j = 0, flag = 0, flag1 ...

用单片机AT89C51 加数码管共阴极的来动态显示学号,比如1234,求用keil...
65536-5000)\/256;TL0=(65536-5000)%256;switch(num){case 0:P2=0x01;break;case 1:P2=0x02;break;case 2:P2=0x04;break;case 3:P2=0x08;break;default:break;}P0=~tab[led[num]];num++;num&=0x03;}main(){TMOD=0x11;TH0=(65536-5000)\/256;TL0=(65536-5000)%256;TR0=1;...

求AT89C51单片机和DS18B20温度程序,用四位共阳数码管显示
\/\/DS18B20的读写程序,数据脚P3.3 \/\/ \/\/温度传感器18B20汇编程序,采用器件默认的12位转化 \/\/ \/\/最大转化时间750微秒,显示温度-55到+125度,显示精度 \/\/ \/\/为0.1度,显示采用4位LED共阳显示测温值 \/\/ \/\/P0口为段码输入,P24~P27为位选 \/\/ \/***\/ include "reg51.h"include...

相似回答