51单片机数码管显示学号实验汇编代码.
51单片机流水灯与数码管显示实验设计

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4; //这个key没用到,具体功能可以完善函数uint temp,shu=432;uchar aa,bb,cc,bai,shi,ge,flag,flag1,t0,t1,count;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x38,0x3f,0};void init();void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge); void delayms(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){init();while(1){if(flag!=1)//减数还未到指定值{temp=_crol_(temp,1);//流水灯P1=temp;//赋值给P1口delayms(10);//流水延时10msdisplay(7,6,5,bai,shi,ge);}// if(t0%4==0) t0这个变量是T0溢出时间的倍数值,每次到指定的倍数值都会被清零,所以这个判断语句错误// if(t0==60) t0每次到10都会被清零,所以这个判断语句错误else if(count!=100) //没有到指定的时间3s,但这里设置的是5s,因为led闪烁的时间是50ms,这样闪烁的次数就多一点,便于看清效果{temp=0xff;P1=temp;delayms(50);//闪烁延时temp=0x00;P1=temp;}else{display(16,14,17,17,18,19);temp=0xff;//关闭ledP1=temp;//这里我们可以看出在位带操作的时候P1是已定义变量,不需要中间变量过度}}}void init(){TMOD=0x11;TH0=(65535-5000)/256;TL0=(65535-5000)%256;TH1=(65535-5000)/256;TL1=(65535-5000)%256;EA=1;ET0=1;ET1=1;TR0=1;temp=0xfe;P1=temp;}void timer0()interrupt 1{TH0=(65535-5000)/256;TL0=(65535-5000)%256;t0++;if(t0==10)t0=0;//闪烁间隔时间10*50msif(flag==1){count++;//计数3sif(count==100){EA=0;//关闭总中断,也可以写TR0=0,因为在数码管停止减数的时候已经关闭了TR1}}}void timer1()interrupt 3{TH1=(65535-5000)/256;TL1=(65535-5000)%256;t1++;if(t1==2){t1=0;shu--;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu==398){TR1=0;//关闭定时器1,数码管显示的内容不变TR0=0;//这里也可以不关闭TR0直接清零TH0=(65535-5000)/256;TL0=(65535-5000)%256;TR0=1;//这里的定时器0计数值的清零初始是为了3s的算时(函数里设置了5s)flag=1;}}void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge) {dula=1;P0=table[aa];dula=0;wela=1;P0=0xfe;wela=0;delayms(1);dula=1;P0=table[bb];dula=0;wela=1;P0=0xfd;wela=0;delayms(1);dula=1;P0=table[cc];dula=0;wela=1;P0=0xfb;wela=0;delayms(1);dula=1;P0=table[bai];dula=0;wela=1;P0=0xf7;wela=0;delayms(1);dula=1;P0=table[shi];dula=0;wela=1;P0=0xef;wela=0;delayms(1);dula=1;P0=table[ge];dula=0;wela=1;P0=0xdf;wela=0;delayms(1);}(注:可编辑下载,若有不当之处,请指正,谢谢!)。
51单片机_数码管显示

一 LED显示器的结构与原理
a +5V a b b
c c
COM 10 9 g f a f g b 8 a 7 b 6
d d
e e
f e d g e 1 d 2 3 c 4 dp 5 dp COM GND dp g c f
(a )
(b )
(c )
管脚排列
共阴极数码管
共阳极数码管
一 LED显示器的结构与原理
思考:1.如果是共阴极的数码管怎样显示0呢? 2.大家能不能把所有数码管能显示的 字符的字型码分析出来? 3.怎样实现令一个数码管连续显示0— 9十个字符。
一个数码管显示0、1、2的程序 #include <reg51.h> void delay(int); void main() { P2=0x00; P0=0x03; delay(400); P0=0x9f; delay(400); P0=0x25; delay(400); } void delay(int x) { int i,j; for(i=0;i<x;i++) for(j=1;j<120;j++); }
2. 数码管显示原理 LED数码管的a~g七个发光二极管。加正电压 的发光,加零电压的不能发光,不同亮暗的组合就 能形成不同的字型,这种组合称为字型码。共阳极 和共阴极的字型码是不同的,下面我们分析一下。 如下图所示,把一个共阳极的数码管接到 STC89C52RC单片机的P0口上,思考,怎样让此数码 管显示数字0?
voiddelayintledled字型显示代码表字型显示代码表显示十六进制代码dp共阴极共阳极3fh06h5bh4fh66h6dh7dh07h7fh6fh77h7ch39h5eh79h71h76hf3hc0hf9ha4hb0h99h92h82hf8h80h90h88h83hc6ha1h86h8eh89h8chledled显示器静态显示及应用实例显示器静态显示及应用实例静态显示的特点静态显示就是单片机将所要显示的数据送出去后数码管始终显示该数据不变到下一次显示时再传送一次新的显示数据
51单片机4×4矩阵键盘且在数码管最后一位显示汇编语言

51下面是51单片机使用4×4矩阵键盘的汇编程序,并在数码管的最后一位显示一个字符:```ORG 0 ;程序从地址0开始MOV P1,#0FFH ;P1口设置为输入口MOV P0,#0FH ;P0口设置为输出口LOOP:MOV A,P1 ;读取P1口的值CJNE A,#0FFH,KEY_PRESSED ;判断是否有按键按下SJMP LOOP ;如果没有按键按下,继续循环KEY_PRESSED:MOV R0,A ;保存按键的值CLR P0.0 ;选定行0MOV A,P1ANL A,#0F0H ;按位与运算,保留列位的值CJNE A,#0F0H,COL0 ;判断是否有按键按下在第0列MOV A,#'0' ;如果在第0列按下按键,则A的值为0JMP DISP ;跳转到显示程序COL0:CLR P0.1 ;选定行1MOV A,P1ANL A,#0F0HCJNE A,#0E0H,COL1 ;判断是否有按键按下在第1列MOV A,#'1' ;如果在第1列按下按键,则A的值为1JMP DISP ;跳转到显示程序COL1:CLR P0.2 ;选定行2MOV A,P1ANL A,#0F0HCJNE A,#0D0H,COL2 ;判断是否有按键按下在第2列MOV A,#'2' ;如果在第2列按下按键,则A的值为2JMP DISP ;跳转到显示程序COL2:CLR P0.3 ;选定行3MOV A,P1ANL A,#0F0HCJNE A,#0B0H,COL3 ;判断是否有按键按下在第3列MOV A,#'3' ;如果在第3列按下按键,则A的值为3JMP DISP ;跳转到显示程序COL3:CLR P0.4 ;选定行4MOV A,P1ANL A,#0F0H4MOV A,#'4' ;如果在第4列按下按键,则A的值为4 JMP DISP ;跳转到显示程序COL4:CLR P0.5 ;选定行5MOV A,P1ANL A,#0F0HCJNE A,#0B0H,COL5 ;判断是否有按键按下在第5列 MOV A,#'5' ;如果在第5列按下按键,则A的值为5 JMP DISP ;跳转到显示程序COL5:CLR P0.6 ;选定行6MOV A,P1ANL A,#0F0HCJNE A,#0D0H,COL6 ;判断是否有按键按下在第6列 MOV A,#'6' ;如果在第6列按下按键,则A的值为6 JMP DISP ;跳转到显示程序COL6:CLR P0.7 ;选定行7MOV A,P1ANL A,#0F0HCJNE A,#0E0H,COL7 ;判断是否有按键按下在第7列 MOV A,#'7' ;如果在第7列按下按键,则A的值为7 JMP DISP ;跳转到显示程序COL7:MOV A,#00HJMP EXIT ;如果没有按下任何键,退出程序DISP: ;数码管显示程序MOV R1,#100B ;延时计数器初始化MOV P2,A ;把按键值存入P2口MOV A,#07HANL A,P0 ;从P0口读取选定的行值MOV P0,A ;根据选定的行值输出相应的值ACALL DELAY ;调用延时程序MOV P0,#0FH ;关闭所有行DJNZ R1,$ ;当延时计数器不为0时,继续延时MOV A,#0FHMOV P0,A ;清除所有显示JMP LOOP ;跳转回主程序EXIT:MOV P2.7,1 ;在数码管的最后一位显示字符1SJMP EXIT ;无限循环DELAY: ;延时程序MOV R2,#75DMOV R3,#200D DELAY3:DJNZ R3,$DJNZ R2,DELAY2 RET```。
单片机实验报告——矩阵键盘数码管显示

单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日矩阵键盘一、实验内容1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。
按其它键没有结果。
二、实验目的1、学习独立式按键的查询识别方法。
2、非编码矩阵键盘的行反转法识别方法。
3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。
4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。
5、掌握利用Keil51软件对程序进行编译。
6、会根据实际功能,正确选择单片机功能接线,编制正确程序。
对实验结果能做出分析和解释,能写出符合规格的实验报告。
三、实验原理1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。
这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
数码管显示程序(汇编语言)

实验三数码显示一、实验目的了解LED数码管动态显示的工作原理及编程方法。
二、实验内容编制程序,使数码管显示“DJ--88”字样。
三、实验程序框图四、实验步骤联机模式:(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)数码管显示“DJ--88”字样。
脱机模式:1、在P.态下,按SCAL键,输入2DF0,按EXEC键。
2、数码管显示“DJ--88”字样。
五、实验程序清单CODE SEGMENT ;S6.ASM display "DJ--88"ASSUME CS:CODEORG 2DF0HSTART: JMP START0PA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口BUF DB ?,?,?,?,?,?data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1hdb 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1CON1: CALL DISPJMP CON1DISP: MOV AL,0FFH ;00HMOV DX,PAOUT DX,ALMOV CL,0DFH ;显示子程序 ,5msMOV BX,OFFSET BUFDIS1: MOV AL,[BX]MOV AH,00HPUSH BXMOV BX,OFFSET DATA1ADD BX,AXMOV AL,[BX]POP BXMOV DX,PBOUT DX,ALMOV AL,CLMOV DX,PAOUT DX,ALPUSH CXDIS2: MOV CX,00A0HLOOP $POP CXCMP CL,0FEH ;01HJZ LX1MOV AL,0FFH ;00HMOV DX,PAOUT DX,ALINC BXROR CL,1 ;SHR CL,1JMP DIS1LX1: MOV AL,0FFHMOV DX,PBOUT DX,ALRETBUF1: MOV BUF,0DHMOV BUF+1,19HMOV BUF+2,17HMOV BUF+3,17HMOV BUF+4,08HMOV BUF+5,08HRETCODE ENDSEND START。
51单片机数码管显示程序设计

练习3主程序参考:
ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030H START: MOV SP,#50H ;初始化堆栈 LCALL INIT ;初始化 MOV DISBUF,#0 MOV DISBUF+1,#1 MOV DISBUF+2,#2 MOV DISBUF+3,#3 MOV DISBUF+4,#4 MOV DISBUF+5,#0 MOV FLASH,#11000000B MOV R0,#0 LOOP: MOV DISBUF+5,R0 LCALL DELAY INC R0 CJNE R0,#10,LOOP MOV R0,#0 AJMP LOOP
恢复现场
返回
动态显示参考程序1:定义变量
;--------------------------------------------------------;动态显示程序 ;--------------------------------------------------------;全局变量定义 FLAG EQU 20H ;标志位 DISSEG EQU P0 ;显示段驱动 DISBIT EQU P2 ;显示位驱动P2.7-P2.2 DISBUF EQU 21H ;显示缓冲区首地址21H-26H DISBITBUF EQU 27H ;当前显示位计数器0-5 FLASH EQU 28H ;闪烁控制xxxxxx00,将x=1闪烁,=0不闪 ;小数点的处理: ;若显示‘3’,缓冲区放‘3’,若显示‘3.’,缓冲区放‘3+80H’, 最高位为1 S_PULSE EQU FLAG.0 ;秒脉冲 CNT_2D5MS EQU 2FH ;2.5MS计数器 CNT_10MS1 EQU 30H ;10MS计数器 CN_0D5S EQU 31H ;0.5秒计数器 ;----------------------------------------------------------
51单片机数码管显示程序

;该程序库为4位显示,可以设置3个小数点的位置,数据在R2中, LED_DATA EQU P0 ;数码管数据口定义SHOW1 EQU 30H ;个位SHOW2 EQU 31H ;十位SHOW3 EQU 32H ;百位SHOW4 EQU 33H ;千位SHOW5 EQU 34H ;万位XSDW EQU 50H ;小数点位数ORG 0000HAJMP LOOPORG 0030HLOOP: MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV SP,#60HMOV XSDW,#00HLOOP0: CALL CONVTCALL PLAYJB P3.7,LOOP0CALL DELAY2MSCALL DELAY2MSCALL DELAY2MSCALL DELAY2MSCALL DELAY2MSCALL DELAY2MSCALL DELAY2MSJB P3.7,LOOP0JNB P3.7, LOOP1NOPLOOP1: CALL PLAYJNB P3.7, LOOP1MOV A,XSDWCJNE A,#3,LOOP2MOV XSDW,#00HAJMP LOOP0LOOP2: INC XSDWAJMP LOOP0;---------------------------------------------------------;代码变换 (HEX TO BCD);---------------------------------------------------------CONVT: CLR EAMOV 41H,#00HMOV R4,40H ;待转换低位 MOV R3,41H ;待转换高位HEX2BCD: CLR AMOV R5,AMOV R6,AMOV R7,AMOV R2,#16 ;转换16位H2B: CLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R7ADDC A,R7DA AMOV R7,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,ADJNZ R2,H2BMOV A,R7MOV B,#16DIV ABMOV R4,AMOV R4,AMOV R3,BMOV A,R5MOV R7,AMOV A,R6MOV B,#16DIV ABMOV R6,AMOV R5,BMOV SHOW5,R7 ;万位MOV SHOW4,R6MOV SHOW2,R4MOV SHOW1,R3 ;个位H2B0: SETB EARET;-----------------------------------------------------;显示子程序;---------------------------------------------PLAY: PUSH ACCMOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示CJNE A,#3, PLAY0AJMP PLAY5PLAY0: NOPMOV A,SHOW4 ;取千位JNZ PLAY5 ;等于0吗MOV SHOW4,#0AH ;等于0送数据0A,即不显示MOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示CJNE A,#2, PLAY1AJMP PLAY5PLAY1: NOPMOV A,SHOW3 ;取百位JNZ PLAY5MOV SHOW3,#0AHMOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示CJNE A,#1, PLAY2AJMP PLAY5PLAY2: NOPMOV A,SHOW2 ;取十位JNZ PLAY5MOV SHOW2,#0AHPLAY5: MOV R1,XSDW ;小数点的位数送R2MOV A,SHOW4 ;获得当前位地址MOV DPTR,#TAB_NU ;获得表头MOVC A,@A+DPTR ;查表获得显示数据MOV LED_DATA,A ;显示数据CJNE R1,#3, PLAY6 ;小数点的位数送R2,如果是3就点亮3位的小数点 CLR P0.7PLAY6: NOP ;不是则不点亮CLR P2.4LCALL DELAY2MS ;延时 2 MSSETB P2.4MOV A,SHOW3 ;获得当前位地址MOV DPTR,#TAB_NU ;获得表头MOVC A,@A+DPTR ;查表获得显示数据MOV LED_DATA,A ;显示数据CJNE R1,#2, PLAY7 ;小数点的位数送R2,如果是2就点亮2位的小数点 CLR P0.7PLAY7: NOP ;不是则不点亮CLR P2.5LCALL DELAY2MS ;延时 2 MSSETB P2.5MOV A,SHOW2 ;获得当前位地址MOV DPTR,#TAB_NU ;获得表头MOVC A,@A+DPTR ;查表获得显示数据MOV LED_DATA,A ;显示数据CJNE R1,#1, PLAY8 ;小数点的位数送R2,如果是3就点亮3位的小数点 CLR P0.7PLAY8: NOP ;不是则不点亮CLR P2.6LCALL DELAY2MS ;延时 2 MSSETB P2.6MOV A,SHOW1 ;获得当前位地址MOV DPTR,#TAB_NU ;获得表头MOVC A,@A+DPTR ;查表获得显示数据MOV LED_DATA,A ;显示数据CLR P2.7LCALL DELAY2MS ;延时 2 MSSETB P2.7POP ACCRET;---------------------------------------------------------;延时子程序;---------------------------------------------------------DELAY2MS:MOV R6,#10DEL1:MOV R7,#100DJNZ R7,$DJNZ R6,DEL1RETTAB_NU:DB 0C0H,0DDH,0A1H,89H,9CH,8AH,82H,0D9H,80H,88H,0FFH;---------------------------------------------------------END(注:可编辑下载,若有不当之处,请指正,谢谢!)。
51单片机-数码管显示

} void delay(int x) {
int i,j; for(i=0;i<x;i++)
for(j=1;j<120;j++); }
LED字型显示代码表
段符号
十六进制代码
显示 dp
g
f
e
d
c
b
a 共阴极 共阳极
0
0
1
0
2
0
3
0
4
0
5
0
6
0
7
0
8
0
9
0
A0
b
0
C0
d
0
E0
F
0
H0
P0
0
1
1
1
1
1
1
3FH
C0H
0
0
0
0
1
1
0
06H
F9H
1
0
1
1
0
1
1
5BH
A4H
1
0
0
1
1
1
1
4FH
B0H
1
1
0
0
1
Hale Waihona Puke 1066H
99H
1
1
0
1
1
0
1
6DH 92H
1
1
1
1
1
0
1
7DH
1. 静态显示的特点
静态显示就是单片机将所要显示的数据送出去后,数码管始终显示 该数据(不变),到下一次显示时,再传送一次新的显示数据。