51单片机数码管显示实验报告

发布时间 : 星期一 文章51单片机数码管显示实验报告更新完毕开始阅读

51单片机数码管显示实验

实验内容:

1)编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复。 2)C语言程序 #include

#define uint unsigned int void display(); void num(); int i;

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表 void delayms(uint); void main() { while(1) { num(); display(); } }

void display() { P2=0xff;//消隐 P0连接段选,P1节位选 P1=0x00;//8个数码管同时显示 P2=table[i];//数码管显示数码0 delayms(1000);//延时5ms }

void num() { if(i<9) i++; else i=0; }

void delayms(uint x) { uint i,j; for(i=0;i

3)汇编语言:

ORG 0000H LJMP MAIN ORG 0100H

;P2连接段选,P1节位选 MAIN: MOV P1,#00H

MOV R2,#00H

;所有的数码管都显示

;从0开始显示

LOOP: MOV A,R2

;为下面的基址加变址寄存器寻址方式做准备

;把数组的首地址赋给DPTR

MOV DPTR,#TAB1

MOVC A,@A+DPTR ;取数组中的数字 MOV P2,A

;把取得的值送给P0口显示

;延时一会

ACALL DELAY INC R2

;为取下一个数加一

CJNE R2,#10,LOOP ;只要数小于10就继续循环显示 MOV R2,#00H

LJMP LOOP

;如果加到10后重新从0开始

;进入循环函数

;****************************************** TAB1:

DB 0C0H,0F9H,0A4H,0B0H,99H;

数组

DB 92H,82H,0F8H,80H,90H

RET

;****************************************** DELAY: MOV R3,#3 ;延时函数 DE1: DE2:

MOV R4,#0FFH MOV R5,#0FFH

DJNZ R5,$ DJNZ R4,DE2

DJNZ R3,DE1

RET

;*************************************************

END

(3)编写程序学习数码管的动态显示,让8只数码管从从左往右显示1、2、3……8。

C语言程序: #include #define uint unsigned int

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表 void delayms(uint x); void zuoyi(); void main() { }

void delayms(uint x) { }

void zuoyi()

uint i,j; for(i=0;i

P1=0xfe; for(i=0;i<8;i++) { } }

P2=table[i]; delayms(3); zuoyi();

{ }

汇编语言: ;数码管动态显示

ORG 0000H LJMP MAIN ORG 0100H int a; a=~P1; a=a<<1; P1=~a;

;P0连接段选,P1节位选

MAIN: MOV R2,#0 ;从0开始显示

MOV P1,#0FEH

LOOP: MOV A,R2

MOV DPTR,#TAB1 MOVC A,@A+DPTR MOV P2,A ACALL DELAY INC R2 MOV A,P1 RL A MOV P1,A CJNE R2,#8,LOOP MOV R2,#0 AJMP LOOP

;****************************************** TAB1:

DB 0C0H,0F9H,0A4H,0B0H,99H ;数组

DB 92H,82H,0F8H,80H,90H

RET

;****************************************** DELAY: MOV R3,#5H ;延时函数 DE1: 思考:

(1)改变延时常数,使发光二极管闪亮时间改变。 (2)(2)修改程序,使发光二极管闪亮移位方向改变。

答:(1)静态显示过程中改变delayms(uint x)中x的值即可改变延时时间.当延时很短时就是动态显示,动态显示C语言中把《《改为》》即可,汇编中把RL改为RR即可。

实验人:王贯华

MOV R4,#0FFH

DJNZ R4,$ DJNZ R3,DE1 RET

学2012406500540

号:

联系合同范文客服:xxxxx#qq.com(#替换为@)