发布时间 : 星期一 文章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 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 号: