51单片机汇编问题 数码管动态显示 代码如下

ORG 0000H LJMP START ORG 0030HSTART: MOV SP,#60H MOV P0,#0FFH MOV P2,#0FFH
MAIN: MOV P0,#01H ;选定第一位 SETB P2.7 ;打开位选 CLR P2.7 ;关闭位选 MOV P0,#0F9H;送入数字1 SETB P2.6 ;打开位选 CLR P2.6 ;输入位选 ACALL DELAY ;延时

MOV P0,#02H ;同理 SETB P2.7 CLR P2.7 MOV P0,#90H SETB P2.6 CLR P2.6 ACALL DELAY
SJMP MAIN

DELAY: MOV R0,#5HDELAY2: MOV R1,#50HDELAY3: MOV R2,#50H DJNZ R2,$ DJNZ R1,DELAY3 DJNZ R0,DELAY2
END

嘿嘿 你是想显示2位数字 即 1 和 9 吧 程序基本问题不大
只是延时子程序 要在最后加上一条子程序返回指令 即 RET
否则 程序在调用子程序后 将无法正确返回到你的主程序上。
DELAY: MOV R0,#5H
DELAY2: MOV R1,#50H
DELAY3: MOV R2,#50H
DJNZ R2,$
DJNZ R1,DELAY3
DJNZ R0,DELAY2
RET (修改)
END

呵呵 满意 就选满意回答
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-30
你这个都没有定义七段码管的显示静态数据么。先定义一个那个再来问。
//uchar code numb[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极七段码输出编码
//uchar code numb_[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极七段码输出编码
定义一个这个。汇编的话,写到程序存储器中,用MOVC来读。本回答被网友采纳
第2个回答  2012-10-30
什麼问题?

51单片机数码管动态显示从右往左
这是四位数码管从右从左流动显示,像滚动字幕一样的。用不着矩阵按键哪。其实程序很简单,没那么复杂。程序如下 include <reg51.h> define uchar unsigned char define uint unsigned int uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};\/\/共阴段码码,0x0...

51单片机,动态数码管,如下代码,为什么switch函数是1ms刷新一次...
因为定时器每毫秒溢出一次if (TF0 == 1) 成立一次, switch函数执行一句 并且 i的值加1;因此执行的语句下一次溢出数码管显示的位也变化了 数值也变化了 例如由 P0=LedBuff[0] 变化 P0=LedBuff[1];这样,大约5ms 五个数码管轮流显示一次 五个数码管高速轮流显示 ,看上去是同时显示的 但数码管...

用51单片机控制4位一体数码管实现1234轮流显示的程序代码是什么,求!pro...
下面是使用AT89S51单片机控制4位一体数码管轮流显示1234的程序代码:```c include <reg51.h> \/\/ 数码管显示字型码表 unsigned char code LEDDisplay[] = { 0x3F, \/\/ 0 0x06, \/\/ 1 0x5B, \/\/ 2 0x4F \/\/ 3 };sbit DIO = P1^0; \/\/ 串行数据输入 sbit RCLK = P1^1; \/...

LED数码管动态显示2017的51单片机汇编语言
abcdefg 为 P0 口,位选端为 P2 口。八个数码管同时显示 01234567。电路与程序,如下所示:

51单片机数码管滚动显示
include <reg52.h> define uchar unsigned char define uint unsigned int uchar code SEG_B_List[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};\/\/共阳数码管代码表"0-9","空"define StuNumLeng 14 \/\/学号长度,加了2个空格 uchar StuNum[StuNumLeng]={10,2...

51单片机led4位数码管动态显示“0123”的程序,急急,,,能帮忙的就快点...
wela4=1;\/\/显示百位数 delay(1000);P0=0xea;\/\/数字 wela1=1;wela2=1;wela3=0;wela4=1;\/\/显示十位数 delay(1000);P0=0xea;\/\/数字 wela1=1;wela2=1;wela3=1;wela4=0;\/\/显示个位数 delay(1000);} } void delay(uint x){ for(a=x;a>0;a--)for(b=110;b>0;b--);} ...

运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序_百度...
include<reg51.h> define uchar unsigned char;uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; \/\/0到f uchar number,nn=0;uchar dat[]={2,0,1,2,1,1,4,5,8,2};void t0isr() interrupt 1 { TH0=(...

高分:51单片机汇编程序,数码管跳动问题
给你贴一个我写的显示程序(在定时中断中调用,这个程序显示两组数据,500ms换一次):\/ 函数名称: void Display()功能描述: 将缓冲区中可显示字符输出到LED \/ define PIN_SDINP0_0 define PIN_STP0_1 define PIN_SHP0_2 define LOC_D10x08 void Display(void){ unsigned char i,ch,loc;if...

用51单片机实现每隔一秒数码管显示刷新一次,用定时器0实现定时功能。但...
if(temp==20) \/\/定时1s,刷新数码管数字显示 { temp=0; \/\/标志位置零,计数程序修改后是这样的 num++; \/\/原来的写法有问题 if(num>15)num=0;P0=LED7Code[num]; \/\/显示字符,不能是num++ } } } void Time() interrupt 1 using 1 \/\/中断函数 { TH0=(65535-50000)\/256;\/\/定时50...

51单片机用键盘输入并用动态数码管显示
S2 BIT P2.5 S3 BIT P2.6 S4 BIT P2.7 ORG 0000H MAIN:CLR 20H.0 MOV R0,#0FFH ;11111111 MOV R1,#04H ;00000100 LOOP:MOV C,20H.0 LOOP1: MOV A,R0 RRC A ;01111111-c(0)- MOV R0,A ;01111111 MOV P2,A ;01111111 MOV A,P2 ;01111101 CPL A ;10000010 ANL A,#0FH...

相似回答