ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:90.53KB ,
资源ID:7389827      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7389827.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(七段数码管显示实验.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

七段数码管显示实验.docx

1、七段数码管显示实验单片机实验报告实验九 七段数码管显示实验一、实验目的1学习七段数码管的工作原理;2学习数码管与8051单片机的接口方法;3掌握动态扫描显示技术。二、实验原理如图4.9-1所示,LED数码管由7个发光二极管组成,此外,还有一个圆点型发光二极管在图中以dp表示,用于显示小数点。通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。LED数码管中的发光二极管共有两种连接方法:1)共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的那么不点亮。实验中使用的LED显示器为共阴极接法2)共阳极

2、接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极接5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的那么不点亮。为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。七段发光二极管,再加上一个小数点位,共计八段。因此提供应LED显示器的字形代码正好一个字节。假设a、b、c、d、e、f、g、dp 8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7,那么用共阴极LED数码管显示十六进制数时所需的字形代码如表4.9-1所示。表4.9-1 共阴极LED数码管字形代码字型共阴极字形代码字型共阴极字形

3、代码字型共阴极字形代码03FH67DHC39H106H707Hd5EH25BH87FHE79H34FH96FHF71H466HA77H灭00H56DHb7CH*实际上试验中使用的是共阳极数码管,这里就不一一列出。2、动态显示按图4.9-2b连接线路,通过交替选中LED1和LED0循环显示两位十进制数。七段数码管段码连接不变,位码驱动输入端S1、S0接8255A C口的PC1、PC0,通过C口的这两位交替输出1和0,以便交替选中LED1和LED0,从而实现两位十进制数的交替显示。请编程实现在两个LED数码管上循环显示00 99,程序流程图如图4.9-3(b)所示。三、实验电路图第一局部电路图:第

4、二局部电路图:四、实验设备微型计算机、单片机仿真器、实验仪、示波器(各一台);实验连线(假设干)。五、实验容*由于汇编语言程序中已经做了相应的注释,C语言的编程原理与之一样处不再做重复注释,仅作个别注释,请见谅。1编程在8位数码管上面显示“123456788个数字,每经过1秒8个数字循环左移一位显示。依次为:1234578、23456781、34567812.汇编语言程序代码: ORG 0000HSTART: MOV R4,#00HFLASH: MOV R2,#01H MOV R0,#30H MOV DPTR,#TABFLA ;把字形表首地址给外部寻址存放器LOPFLA: MOV A,R2 ;

5、输出位型 MOV P2,A MOV A,R0 MOVC A,A+DPTR ;在程序段中查表得到字形 MOV P1,A ;输出字形 MOV R3,#0 DJNZ R3,$ ;循环等待延时 MOV P1,#0FFH ;关显示 MOV A,R2 ;位型左移一位 RL A MOV R2,A INC R0 ;下一个字形 CJNE R0,#38H,GOON MOV R0,#30HGOON: CJNE A,#01H,LOPFLA ;假设已经显示一遍那么初始化 INC R4 CJNE R4,#7FH,GOON1 MOV A,30H ;显示表左移更新 MOV 30H,31H MOV 31H,32H MOV 32

6、H,33H MOV 33H,34H MOV 34H,35H MOV 35H,36H MOV 36H,37H MOV 37H,A MOV R4,#00H GOON1: AJMP FLASHTABFLA: ;字形表 DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,88H DB 83H,0C6H,0A1H,86H,8EHENDC语言程序代码:#includedata unsigned char disadd _at_ 0x30;const unsigned char LED_TAB=0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0

7、x82,0xF8,0x80,0x90,0x88,0x83, 0xC6,0xA1,0x86,0x8E;data unsigned char j;void delay() unsigned char i=0xFF; while(i-) ; void change_s() unsigned char *k; unsigned char m; k=&disadd; m=*k; /显示表移位 *k=*(k+1); *(k+1)=*(k+2); *(k+2)=*(k+3); *(k+3)=*(k+4); *(k+4)=*(k+5); *(k+5)=*(k+6); *(k+6)=*(k+7); *(k+7)

8、=m; j=0x00; /计数值初始化main() unsigned char i; unsigned char disbit; unsigned char *disnum,*n; SP=0x40; j=0x00; n=&disadd; *(n)=0x01; /显示设置初值为18 *(n+1)=0x02; *(n+2)=0x03; *(n+3)=0x04; *(n+4)=0x05; *(n+5)=0x06; *(n+6)=0x07; *(n+7)=0x08; while(1) disbit=0x01; disnum=&disadd; for(i=0;i8;i+) P2=0x00; P1=LED

9、_TAB*disnum; P2=disbit; delay(); disbit=disbit1; disnum+; j+; if(j=0x3f) change_s(); /调用显示表移位子程序 2用8255的PA口作为段码输出口,编写程序,利用定时器T0作为时间基准控制电子钟走时,电子钟的格式为:XXXXXX分钟秒钟百分秒汇编语言程序代码: _ADD XDATA 0F003H PA_ADD XDATA 0F000H PB_ADD XDATA 0F001H PC_ADD XDATA 0F002H ORG 0000H AJMP START ORG 000BH AJMP T0INT ORG 0030

10、HSTART: MOV SP,#60H ;设置堆栈 MOV TMOD,#01H ;设置定时器T0的控制字 MOV TH0,#0F0H ;设置定时器计数初值 MOV TL0,#07FH MOV R7,#00H ;显示存放器置初值 MOV R6,#00H MOV R5,#00H MOV R4,#00H MOV R3,#00H MOV R2,#00H MOV 32H,#16 ;设置显示分隔符 MOV 35H,#16 SETB ET0 ;允许中断T0部中断 SETB EA SETB TR0 ;开场计数CONTINUE: MOV 37H,R7 ;进位判断,R7表示百分之一秒之后的以此类推 MOV 36H

11、,R6 CJNE R6,#0AH,NOREACH MOV R6,#00H MOV 36H,R6 INC R5 MOV 34H,R5 CJNE R5,#0AH,NOREACH MOV R5,#00H MOV 34H,R5 INC R4 MOV 33H,R4 CJNE R4,#06H,NOREACH MOV R4,#00H MOV 33H,R4 INC R3 MOV 31H,R3 CJNE R3,#0AH,NOREACH MOV R3,#00H MOV 31H,R3 INC R2 MOV 30H,R2 CJNE R2,#06H,NOREACH MOV R2,#00H MOV 30H,R2 NORE

12、ACH: ACALL DISPLAY ;调用显示子程序 AJMP CONTINUE;中断子程序 T0INT: INC R7 ;R7表示百分之一秒之后的以此类推 CJNE R7,#0AH,NOREACH_S MOV R7,#00H INC R6NOREACH_S: MOV TH0,#0F0H ;计数完一次后再次置计数初值 MOV TL0,#07FH RETI;数码管显示子程序DISPLAY: MOV R1,#01H ;位型输出指针 MOV R0,#30H MOV DPTR,#_ADD MOV A,#80H MOVX DPTR,A LOPFLA: MOV DPTR,#PB_ADD MOV A,R1

13、 MOVX DPTR,A MOV DPTR,#TABFLA MOV A,R0 MOVC A,A+DPTR ;在程序段中查表得到字形 MOV DPTR,#PA_ADD MOVX DPTR,A MOV A,#00HWAIT: DEC A CJNE A,#00H,WAIT ;等待延时 MOV DPTR,#PA_ADD MOV A,#0FFH MOVX DPTR,A ;关显示 MOV A,R1 ;位型左移一位 RL A MOV R1,A INC R0 ;下一个字形 CJNE A,#01H,LOPFLA ;假设已经显示一遍那么初始化 RETTABFLA: DB 0C0H,0F9H,0A4H,0B0H,9

14、9H DB 92H,82H,0F8H,80H,90H,88H DB 83H,0C6H,0A1H,86H,8EH DB 0BFHENDC语言程序代码:#include#define TIMEINT 0x01#define TIMEH 0xf0#define TIMEL 0x7fxdata unsigned char con_address _at_ 0xf003;xdata unsigned char pa _at_ 0xf000;xdata unsigned char pb _at_ 0xf001;xdata unsigned char pc _at_ 0xf002;data unsigned

15、 char disadd _at_ 0x30;const unsigned char LED_TAB=0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90,0x88,0x83, 0xC6,0xA1,0x86,0x8E,0xBF;data unsigned char r2,r3,r4,r5,r6,r7; /显示变量设置为全局变量void delay() unsigned char i=0xFF; while(i-) ; void timer0(void) interrupt 1 using 1 /中断子程序 r7+; if(r7=0x0A) r7=

16、0x00; r6+; TH0=TIMEH; TL0=TIMEL;void display() /显示子程序 unsigned char i; unsigned char disbit; unsigned char *disnum; disbit=0x01; disnum=&disadd; for(i=0;i8;i+) pb=0x00; pa=LED_TAB*disnum; pb=disbit; delay(); disbit=disbit1; disnum+; main() unsigned char *n; SP=0x40; con_address=0x80; TMOD=TIMEINT; T

17、H0=TIMEH; TL0=TIMEL; n=&disadd; r7=0x00; r6=0x00; r5=0x00; r4=0x00; r3=0x00; r2=0x00; *(n+2)=16; *(n+5)=16; ET0=1; EA=1; TR0=1; while(1) *(n+7)=r7; /显示进位判断 *(n+6)=r6; if(r6=0x0A) r6=0x00; *(n+6)=r6; r5+; *(n+4)=r5; if(r5=0x0A) r5=0x00; *(n+4)=r5; r4+; *(n+3)=r4; if(r4=0x06) r4=0x00; *(n+3)=r4; r3+; *(n+1)=r3; if(r3=0x0A) r3=0x00; *(n+1)=r3; r2+; *n=r2; if(r6=0x06) r2=0x00; *n=r2; display(); 六、实验小结通过本次试验,我根本上掌握了数码管显示的程序流程,学会编写一些程序调用相应的相应的子程序,显示所需容,了解了动态扫描显示的程序执行过程,结合定时器的设置和中断的返回,来实现最根本的百分秒显示,从而完成时钟显示,由此,结合前面所学的知识,稳固了数码管显示的知识,增强了我的程序调试能力,为下一步的学习打下了坚实根底。以上程序都记过实验或是仿真器验证,现象正常,假设有错误之处,请教师指正,。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1