




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机实验报牛实验九 七段数码管显示实验一、实验目的1学习七段数码管的工作原理;2学习数码管与 8051 单片机的接口方法;3掌握动态扫描显示技术。二、实验原理如图所示, LED 数码管由 7 个发光二极管组成,此外,还有一个圆点型发光 二极管(在图中以 dp 表示),用于显示小数点。通过七段发光二极管亮暗的不共阳极接法共阴极接法图 同组合,可以显示多种数字、字母以及其它符号。 LED 数码管中的发光二极管共 有两种连接方法:1) 共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴 极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的 则不点亮。实验中使用的 LE
2、D显示器为共阴极接法2) 共阳极接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳 极接 5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。为了显示数字或符号,要为 LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。 七段发光二极管, 再加上一个小数点位, 共计八段。因此提供给 LED显示器的字形代码正好一个字节。若 a、b、 c、d、e、f、g、 dp 8个显示段依次对应一个字节的低位到高位,即D0、D1、 D2、D3、D4、D5、 D6、D7,则用共阴极 LED数码管显示十六进制数时所需的字形代码如表所示。表 共阴极 LED 数码管字形
3、代码字型共阴极字形 代码字型共阴极字形 代码字型共阴极字形 代码03FH67DHC39H106H707Hd5EH25BH87FHE79H34FH96FHF71H466HA77H灭00H56DHb7CH实际上试验中使用的是共阳极数码管,这里就不一一列出2、动态显示按图( b)连接线路,通过交替选中 LED1 和 LED0循环显示两位十进制 数。七段数码管段码连接不变, 位码驱动输入端 S1、S0接 8255A C口的 PC1、 PC0,通过 C口的这两位交替输出 1 和 0,以便交替选中 LED1和 LED0,从而 实现两位十进制数的交替显示。请编程实现在两个 LED 数码管上循环显示00 99
4、,程序流程图如图 (b)所示。(a) 静态显示程序流程图(b) 动态显示程序流程图三、实验电路图 第一部分电路图:第二部分电路图:四、实验设备微型计算机、单片机仿真器、实验仪、示波器 (各一台 ); 实验连线 (若干 )。五、实验内容*由于汇编语言程序中已经做了相应的注释,C 语言的编程原理与之相同处不再做重复注释, 仅作个别注释, 请见谅。1编程在 8 位数码管上面显示“” 8 个数字,每经过 1 秒 8 个数字循环左移 一位显示。依次为: 1234578、 汇编语言程序代码:;把字形表首地址给外部寻址寄存器;输出位型;在程序段中查表得到字形;输出字形ORG 0000HSTART:MOV R
5、4,#00HFLASH:MOV R2,#01HMOV R0,#30HMOV DPTR,#TABFLALOPFLA:MOV A,R2MOV P2,AMOV A,R0MOVC A,A+DPTRMOV P1,AMOV R3,#0DJNZ R3,$MOV P1,#0FFHMOV A,R2RL AMOV R2,AINC R0CJNE R0,#38H,GOONMOV R0,#30HGOON:CJNE A,#01H,LOPFLAINC R4CJNE R4,#7FH,GOON1;循环等待延时;关显示;位型左移一位;下一个字形;若已经显示一遍则初始化;显示表左移更新;字形表MOV A,30HMOV 30H,31
6、HMOV 31H,32HMOV 32H,33HMOV 33H,34HMOV 34H,35HMOV 35H,36HMOV 36H,37HMOV 37H,AMOV R4,#00HGOON1:AJMP FLASHTABFLA:DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90H,88HDB 83H,0C6H,0A1H,86H,8EHENDC语言程序代码:#includedata unsigned char disadd _at_ 0x30;const unsigned char LED_TAB=0xC0,0xF9,0xA4,0xB0,0x99,0x92,
7、 0x82,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)=m; j=0x00;m
8、ain()unsigned char i;unsigned char disbit; unsigned char *disnum,*n;SP=0x40; j=0x00;n=&disadd;* (n)=0x01;* (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;/ 显示表移位/ 计数值初始化/ 显示设置初值为18编写程序, 利用定时器 T0作为时间基准;设置堆栈;设置定时器 T0 的控制字fo
9、r(i=0;i8;i+)P2=0x00;P1=LED_TAB*disnum;P2=disbit;delay();disbit=disbit1;disnum+;j+;if(j=0x3f) change_s(); / 调用显示表移位子程序2用 8255 的 PA口作为段码输出口, 控制电子钟走时,电子钟的格式为:XXXXXX分钟秒钟百分秒汇编语言程序代码:COM_ADD XDATA 0F003HPA_ADD XDATA 0F000HPB_ADD XDATA 0F001HPC_ADD XDATA 0F002HORG 0000HAJMP STARTORG 000BHAJMP T0INTORG 0030
10、HSTART:MOV SP,#60HMOV TMOD,#01HMOV TH0,#0F0HMOV TL0,#07FHMOV R7,#00HMOV R6,#00HMOV R5,#00HMOV R4,#00HMOV R3,#00HMOV R2,#00HMOV 32H,#16MOV 35H,#16SETB ET0SETB EASETB TR0CONTINUE:;设置定时器计数初值;显示寄存器置初值;设置显示分隔符;允许中断( T0 内部中断);开始计数MOV 37H,R7 后的以此类推);进位判断, R7 表示百分之一秒(之MOV36H,R6CJNER6,#0AH,NOREACHMOVR6,#00HM
11、OV36H,R6INCR5MOV34H,R5CJNER5,#0AH,NOREACHMOVR5,#00HMOV34H,R5INCR4MOV33H,R4CJNER4,#06H,NOREACHMOVR4,#00HMOV33H,R4INCR3MOV31H,R3CJNER3,#0AH,NOREACHMOVR3,#00HMOV 31H,R3INC R2MOV 30H,R2CJNE R2,#06H,NOREACHMOV R2,#00HMOV 30H,R2NOREACH:ACALL DISPLAYAJMP CONTINUE;中断子程序T0INT:INC R7推)CJNE R7,#0AH,NOREACH_SMO
12、V R7,#00HINC R6NOREACH_S:MOV TH0,#0F0HMOV TL0,#07FHRETI;数码管显示子程序DISPLAY:MOV R1,#01HMOV R0,#30HMOV DPTR,#COM_ADDMOV A,#80HMOVX DPTR,ALOPFLA:MOV DPTR,#PB_ADDMOV A,R1MOVX DPTR,AMOV DPTR,#TABFLA;调用显示子程序;R7 表示百分之一秒 (之后的以此类;计数完一次后再次置计数初值;位型输出指针MOVA,R0MOVC A,A+DPTRMOVDPTR,#PA_ADDMOVX DPTR,AMOVA,#00HWAIT:DE
13、CACJNEA,#00H,WAITMOVDPTR,#PA_ADDMOVA,#0FFHMOVX DPTR,AMOVA,R1RLAMOVR1,AINCR0CJNEA,#01H,LOPFLA;在程序段中查表得到字形;等待延时;关显示;位型左移一位;下一个字形;若已经显示一遍则初始化RETTABFLA:DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90H,88HDB 83H,0C6H,0A1H,86H,8EHDB 0BFHENDC语言程序代码:#include#define TIMEINT 0x01#define TIMEH0 xf0#define TIM
14、EL 0x7f xdata 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 char disadd _at_ 0x30;const unsigned char LED_TAB=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8
15、E,0xBF;data unsigned char r2,r3,r4,r5,r6,r7; void delay()/ 显示变量设置为全局变量unsigned char i=0xFF; while(i-)void timer0(void) interrupt 1 using 1r7+;if(r7=0x0A)r7=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
16、+)pb=0x00; pa=LED_TAB*disnum; pb=disbit;/ 中断子程序/ 显示子程序delay();disbit=disbit1; disnum+; main()unsigned char *n;SP=0x40; con_address=0x80; TMOD=TIMEINT;TH0=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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息处理技术员考试试题及答案的核心内容
- 校招初中数学面试题目及答案
- 人民医学网手机应用建设方案
- 网络管理员技术能力的试题及答案标准
- 医疗健康领域的数字化领导力实践案例
- 校招:网络工程笔试题及答案
- 商业智能在数字化转型绩效评估中的应用
- 2025年公司的可持续战略试题及答案
- 网络管理员考试实践技能考核试题及答案
- 校招:软件测试岗笔试题库及答案
- 统编版语文七年级下第18课《井冈翠竹》公开课一等奖创新教学设计
- 针刺伤预防与处理-2024中华护理学会团体标准
- 基装合同范例版
- 永久性租房合同(2篇)
- 外卖员交通安全课件
- 车辆火灾应急处理方法
- 儿童绘本故事《蚂蚁搬家》
- 《全氟己酮灭火系统技术规范》
- 2025年安徽合肥东部新中心建设投资限公司招聘8人高频重点提升(共500题)附带答案详解
- 水循环课件完整版本
- 2024年公司政工专业技术工作总结样本(4篇)
评论
0/150
提交评论