




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 / 37 单片机数码管显示实验总结 数码管动态显示实验 一、实验要求 1. 在 Proteus 软件中画好 51单片机最小核心电路,包括复位电路和晶振电路 2. 在电 路中增加四个 7段数码管 (共阳 /共阴自选 ),将 P1口作数据输出口与 7 段数码 管数据引脚相连 , 引脚输出选控制信号 3. 在 Keil软件中编写程序 ,采用动态显示法 ,实现数码管显示变量 unsigned int show_value 的值,即把 show_value 的千百十个位的值用数码管显示出来。 二、实验目的 1. 巩固 Proteus软件和 Keil软件的使用方法 2. 学习端口2 / 37 输入输出的高级应用 3. 掌握 7 段数码管的连接方式和动态显示法 4. 掌握查表程序和延时等子程序的设计 三实验说明 如下图所示,由 P1 口将要显示的数字输给七段数码管;再由 P2 第四位输给数码管的公共端,作为扫描输入信号;用外部中断和分别接 PB1 与 PB2,实现数字的增减。所要实现的功能是,开始运行电路功能图时,四个数码管分别显示0000,按下 PB1 增 1,直到 9999 回到 0000,相反按下 PB2减 1,直到 0000回到 9999。 在算相关数据时,由于要显示个十百千的不同数字,要调用disp 函数, disp0=show/1000; /显示千位的值 disp1=show%1000/100; /显示百位的值 disp2=show%100/10; / 显 示 十 位 的 值 disp3=show%10; /显示个位的值 3 / 37 本实验需要用到 IE 寄存器与 TCON 寄存器。 四、硬件原理图及程序设计 硬 件原理图设计 图 开始运行 proteus,四个数码管显示 0000,按下 PB1 数码管增 1,按下 PB2数码管减 1。 程序流程图设计 三)程序设源代码 #include #define SEG7P P1 #define SCANP P2 /定义 8051寄存器头文件 / 定义数码管输入信号接 P1 /定义 数码管扫描信号接 P2 char code TAB10=0xc0, 0xf9, 0xa4, 0xb0, 0x99, /数字 04 0x92, 0x83, 0xf8, 0x80, 0x98 ;/数字 59 char disp4=0,0,0,0; /显示数组 void delay_ms(int x); /声明延迟函数 char scan4=0xfe,0xfd,0xfb,0xf7; /声明输入扫描信号 char i,j; /声明变量 void 4 / 37 display(); /显示数组 diso 的内容 int show=0000; /定义初始值 void get_disp(); /声明返回 diap main() IE=0X85; TCON=0X05; while(1) get_disp(); display(); /主程序开始 / 开 IE 寄 存 器 , 允 许 INT0 和 INT1 中断 /开 INT0, INT1 /无穷循环 void delay_ms(int x) int i,j; for (i=0;i void display() /声明延迟函数 /定义变量 /开始计数,计数 x次 /计数 120次,延迟 1ms 5 / 37 /声明显示函数 for(i=0;i / j=disp3-i; /diap SCANP=scani; / SEG7P=TABj; / delay_ms(4); / void INT0_ISR(void) interrupt 0 /INT0 if(show /9999 show+; / else show=0; / void_INT1_ISR(void) interrupt 2 /INT1 序开始 if(show0) 大于 0 6 / 37 show-; / else show=9999; 9999 void get_disp () disp0=show/1000; / disp1=show%1000/100; / disp2=show%100/10; /开始计数 ,计数 4 次 的值附到变量 j 显示扫描 信号 显示数字到数码管 延迟 4ms 中断子程序开始 如果显示数值小于 显示数值自增 1 否则显示数值 0 中断子程 /如果显示数值 7 / 37 显示数值自减 1 /否则显示数值 显 示千位的值 显示百位的值 显示十位的 disp3=show%10; /显示个位的值 五实验总结 实验过程中遇到的问题及解决方法、体会 问题 1:运行电路原理图时,数码管都不亮。 解决方法:定义 IE 寄存器时,没有开启总开关 EA,导致数码管不能正常显示数字。 问题 2:按下 PB1 或 PB2,数码管乱码。 解决方法 :因为使用了两个外部中断,所以 INT0 和 INT1 都要开启,在声明 INT0 和 INT1时,起初写成 if; show-;if;show+;而应该是 if;show+; if;show-;最电路原理图能正常显示 00009999。 8 / 37 体会 :科学的魅力太强大了,从之前的一个数码管亮 09,现在只要你想要几个数码管亮就可以接几个,写入正确的程序,就能实现你想要的效果。程序一直在增多,实现的功能也在无穷的变换着,越来越觉得单片机实现的功能,在生活中也随处可见。 微机实 验报告 LED数码管显示实验 指导教师: 专业班级: 姓名 : 学号 : 联系方式 : 一、 任务要求 实验目的:理解 LED七段数码管的显示控制原理,掌握数码9 / 37 管与 MCU 的接口技术,能够 编写数码管显示驱动程序;熟悉接口程序调试方法。 实验内容:利用 C8051F310 单片机控制数码管显示器 基本要求: 利用末位数码管循环显 示数字 0-9,显示切换频率为 1Hz。 提高要求: 在 4 位数码管显示器上依次显示当天时期和时间,显示格式如下: yyyy (年份 ) 思考题: 数码管采用动态驱动方式时刷新频率应如何选择?为什10 / 37 么? 二、 设计思路 C8051F310 单片机片上晶振为 ,采用 8 分频后为 ,输入时钟信号采用 48个机器周期。 0 到 9 对应的断码为: FCH、 60H、 DAH、 F2H、 66H、 B6H、 BEH、E0H、 FEH、 F6H 基础部分: 由于只需要用末位数码管显示,不需要改变位码,所以只需要采用 LED的静态显示。采用查表的方法,通过循环结构,每次循环查找数据表下一地址,循环十次后重新开始循环。每次循环延时 1s,采用定时器 0定时方式 1。 提高部分: 四个数码管都要显示,所以采用 LED的动态显示。由于数码管的位选由、控制, P0 端口的其他引脚都没用到,所以对P0 端口初始化赋 00H,每次循环加 40H、选中下一位,四次后十六进制溢出, P0端口变又为 00H回到第一个数码管。 11 / 37 每位数码管显示 一个段码后都延时 1ms采用定时器 0定时方式 1,依然采用查表法改变段码值。通过循环: DJNZ R5,BACK MOV R5,#250 DJNZ R4,BACK MOV R4,#8 来控制每种模式的切换时间,我采用 2s切换一次。 切换 模式,可以采用改变查表法的偏移量来实现,没切换一次模式,偏移量加 04H,三次后回到初始偏移量,来实现三种模式的循环显示。 三、 资源分配 基础部分: 、:控制数码管的位选 P1:控制数码管段码的显示 12 / 37 R0:控制段选 提高部分: 、:控制数码管的位选 P1:控制数码管段码 的显示 R0:控制位选 R1:控制段选 R3:用于改变偏移量来切换模式 R4、 R5:控制 循环次数,控制模式切换时间 四、 流程图 基础部分: 13 / 37 提 高部分 西华大学实验报告 开课学院及实验室:机械工程与自动化学院计算机机房 实验时间 : 2016 年 5 月 20 日 一、 实验目的 二、 实验内容 三、实验电路 四、实验程序 #include sbit key0=P2 ; sbit key1=P2 ; sbit key2=P2 ; 14 / 37 sbit red=P1 ; sbit yell=P1 ; sbit gre=P1 ; sbit LED1=P2 ; sbit LED2=P2 ; int num=0; unsigned char code dispcode= 0x30,0xfc,0xa2,0xa4,0x6c, 0x25,0x21,0xbc,0x20,0x24; void init() 15 / 37 key0=1; key1=1; key2=1; void delayms(int a) int b=0; for(a;a0;a-) for(b=110;b0;b-); int judge() 16 / 37 if(key0=0) delayms(100); if(key0=0) red=0; yell=1; gre=1; num+; if(num=10) num=0; 17 / 37 if(key1=0) delayms(5); if(key1=0) red=1; yell=0; gre=1; 18 / 37 if(key2=0) delayms(5); if(key2=0) red=1; yell=1; gre=0; 19 / 37 return 0; void xianshi() delayms(5); P0=dispcodenum; LED1=0; LED2=1; delayms(5); int main() 20 / 37 init(); while(1) judge(); xianshi(); return 0; 五、实验步骤 六、附录 21 / 37 一、实验目的 1、在之前单 键实验和中断控制数码管 “ 静态 ” 显示实验的基础上,把单键判断、数码管显示和中断结合起来编写中断程序实现单键控制一位数码管; 2、在实现控制一位数码管显示的基础上用单键控制两位数码管显示。 二、实验所需器材与软件 硬件:电脑、传输线、 AT89S52单片机 软件:编程软件 Keil uVision3;读写软件 MePro 三、实验程序的及其分析: 1、单键控制一位数码管显示 主要设计思路:在中断主程序后加入单键判断键按下情况判断语句,把数码管显示程序放在中断子程序中。当有键按下22 / 37 且有中断请求时,重新给数码管显示偏移地址赋值,从而改变显示内容。 程序: ORG 0000H AJMP MAIN ;转向主程序 ORG 001BH ;中断矢量地址 AJMP T_INT ;转向中断服务程序 MAIN: ;主程序标号 MOV R3,#0 ;表偏移地址 MOV DPTR,#TAB ;把表头地址赋值给寄存器 DPTR MOV TMOD,#10H ;设定定时器工作于模式 1 MOV TH1,#0FEH ;定时器赋初值 23 / 37 MOV TL1,#0EH SETB ET1 ;开中断 SETB EA SETB TR1 ;启动定时器 LOOP1:JNB , LOOP4 AJMP LOOP1 LOOP4:ACALL DELAY JNB , LOOP_ADD 单键按下判断程序 LOOP_ADD:INC R3 CJNE R3,#10,LOOP8 MOV R3,#0 24 / 37 LOOP8: AJMP LOOP1 T_INT: MOV TH1,#0FEH MOV TL1,#0EH MOV A,R3 中断程序内嵌的数码管显示程序 MOVC A,A+DPTR MOV P0,A MOV P2,#11111110B RETI TAB:DB 0C0H,0F9H,0A4H,0B0H ,99H,92H,82H,0F8H ;表内容 DB 80H,90H DELAY:MOV R5,#64H 25 / 37 LOOP5:MOV R7,#0FFH LOOP6:NOP NOP 用于单键按下防抖动的延时程序 DJNZ R7,LOOP6 DJNZ R5,LOOP5 RET 2、单键控制两位数码管显示 设计思路:用两个寄存器分别存放数码管显示的个位和十位,并且在数码管显示程序中用移位指令对数码管的位码进行移位,使每次执行中断程序时显示一位数,循环两次中断程序后 “ 静态 ” 显示两位数字。 程序: ORG 0000H 26 / 37 AJMP MAIN ORG 001BH AJMP T_INT MAIN: MOV R0,#0 ;用来判断中断程序显示内容的位数 MOV R3,#0 ;把数码管显示的个位偏移地址存放在R3 MOV R1,#0 ;把数码管显示的十位偏移地址存放在 R1 MOV R4 ,#0FEH ;数码管位码内容 MOV R2,#0 ;用于计算数码管位码移位次数 MOV DPTR,#TAB ;把表头地址赋给 DPTR MOV TMOD,#10H MOV TH1,#0FEH 27 / 37 MOV TL1,#0EH SETB ET1 中断启动初始化 SETB EA SETB TR1 LOOP1:JNB , LOOP4 ;键按下判断程序 AJMP LOOP1 LOOP4:ACALL DELAY JNB ,LOOP_ADD LOOP_ADD:INC R3 ;当有键按下时,个位偏移地址加一位 CJNE R3, #10, LOOP8 ;判断个位显示的数值是否超过 9 INC R1 ;个位数值到 9 后十位进一位 28 / 37 MOV R3,#0 ;使个位显示为 “0” CJNE R1,#10,LOOP8 ;判断十位显示数值是否超过 9 MOV R1,#0 ;显示满 “99” 后将数码管置 “00” LOOP8: AJMP LOOP1 T_INT:MOV TH1,#0FEH MOV TL1,#0EH CJNE R0, #2, LOOP10 MOV A, R3 INC R0 数码管个位和十位切换操作指令 AJMP LOOP11 LOOP10:MOV A,R1 MOV R0,#2 29 / 37 LOOP11:MOVC A,A+DPTR MOV P0,A MOV P2,R4 MOV A,R4 RL A ;显示完一个数码管后对位码向左移一位 MOV R4,A INC R2 ;记录移位次数 CJNE R2,#2,LOOP9 ;当移位次数为两次时,执行位码赋初始值指令 MOV R4,#0FEH ;令位码返回初始值 MOV R2,#0 ;移位次数清零 LOOP9:RETI TAB:DB 0C0H,0F9H,0A4H,0B0H ,99H,92H,82H,0F8H ;表30 / 37 内容 DB 80H,90H DELAY:MOV R5,#99H LOOP5:MOV R7,#0FFH LOOP6:NOP NOP 键防抖动延时判断程序 DJNZ R7,LOOP6 DJNZ R5,LOOP5 RET 四、实 验结果分析 经过艰辛的调试工作,单键的按下判断程序能成功区分抖动键,实现按下与否判断,一位数码管和两位数码管显示均能31 / 37 按预定要求工作,但两位数码管显示程序设计逻辑有局限性,在自己所设计逻辑的模式下难以向上扩展,要实现三位以上数码管显示时有很大困难。 五、实验心得体会 每一次的实验内容都是在之前实验基础上进行的,因此,从多次实验经验来看,要想顺利完成当次实验,课前回顾之前所做实验内容也是颇为重要的。在写程序时应先想好程序设计基本思路,避免在原来的程序模板中漫无目的地插入程序,靠投机取巧实现实验要求,每次在实验中都有深深的体会,在编程序前想好思路,然后循着思路琢磨着怎么实现会比较容易,且能更好掌握程序逻辑结构,免得实现了实验要求,自己却看懂所写的程序。在这次实验中,虽然实现了两位数码管的显示,但是数码管显示的个位和十位是通过存放在两个寄存器中实现的,再向上扩展至多位数码管显示却是难以实现,因此不是一个优良的程序结构,这也是这次实验最难突破的难点。 注: 1、报 告内的项目或内容设置,可根据实际情况加以调整和补充。 32 / 37 2、教师批改学生实验报告时间应在学生提交实验报告时间后 10日内。 实验五 串行口静态显示 一实验 目的 1学习用单片机的串行口扩展 74LS164 实现静态显示方法。 2学习用单片机 I/O 口模拟串口工作实现静态显示的编程方法。 3掌握静态显示的编程方法和数码管显 示技术。 二实验任务 1根据共阳数码管的功能结构,自编一组 0F 的笔形码,并按顺序存放建立程序数据表格。 2利用单片机串行口扩展 74LS164,完成串 -并转换输 出,实现静态显示:要求循环显示 0 F 这数字,即输出数字“0” 时,四位同时显示 0,显示 1 秒后再输出数字 “1” ,33 / 37 即四位同时显示 1, 依次类推,相当于数字自检循环显示。 3利用单片机串行口编写静态显示程序,在数码显示器上30H、 31H 单元的内 容, 30H、 31H 单元为任意的十六进制数。 4用、 分别替代 RXD、 TXD 做模拟串口完成任务 3 的静态显示程序。 三实验电路 静态显示实验电路 连线方法:静态显示只要连接 2 根线:单片机的 RXD 与 DAT 节点连接, TXD 与 CLK 接点连 接,要把电源短路片插上。PW11 是电源端。 四 实验原理说明 1静态显示实际上动态的过程,静态的显示,单片机串行口输出的数据通过 74LS164 串并转换 34 / 37 输出,每输出一个数据,把原先的的数据推挤到下一个显示位上显示。实验时,单片机串行口应工作在方式 0, RXD 输出串行数据, TXD 输出移位时钟,在移位时钟的作用下,串行口发送缓冲器的 数据一位一位地从 RXD 移入到 74LS164 中,并把后面送入的数据推挤原先的数据到下一个级联的74LS164 中输出,每输出一个数据可以延时 1ms。实验时,通过改变延时时间,可以更清楚地观察到数据推挤的过程。 2串行口工作在方式 0 时,串行传输数据为 8 位,只能从RXD 端输入输出。 TXD 端用于输出移位同步时钟信号,其波特率固定为振荡频率的 1 12,由软件置位串行控制寄存器SCON 的 REN 位才能启动串行接收。在 CPU 将数据写入 SBUF 寄存器后,立即启动发送,第 8 位数据输送完后,硬件将SCON 寄存器的 TI 位置 1,必须由软件对它清 0 才能启动发送下一帧数据。 3静态显示笔型码: 笔形码: 0 1 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国柜式感应考勤机市场调查研究报告
- 2024-2030年中国北京市保障房行业发展监测及投资战略研究报告
- 提升的阅读体验的策略
- 2025年中国无线门铃市场调查研究报告
- 2025年中国数据信号防护器市场调查研究报告
- 2025年中国换向电机市场调查研究报告
- 2025年中国广告摇牌市场调查研究报告
- 2025年中国带底座承插口管模具市场调查研究报告
- 2025年中国家饰布艺品数据监测研究报告
- 2025年中国太阳能移动红绿灯数据监测研究报告
- 先进成图技术教与学智慧树知到课后章节答案2023年下青岛滨海学院
- 初级会计师考试 经济法基础课件
- 上海交通大学毕业生思想政治品德情况表
- 23秋国家开放大学《EXCEL在财务中的应用》形考作业1-4参考答案
- 有限空间监理实施细则
- 新产品制造可行性及风险分析报告
- 采购预付款合同
- 2023年泸州市文化和旅游系统事业单位招聘笔试模拟试题及答案
- (中医内科)高级、副高级职称考试模拟试题及答案
- 跌倒坠床原因分析预防措施
- 弱电施工安全技术交底
评论
0/150
提交评论