实验六 使用单片机定时器的数码管动态显示驱动实验
数码管动态显示实验报告

一、实验目的1. 掌握数码管动态扫描显示的原理和编程实现方法;2. 熟悉单片机与数码管之间的接口连接;3. 学会使用定时器中断控制数码管的动态显示;4. 培养动手能力和问题解决能力。
二、实验原理数码管动态显示是通过单片机控制多个数码管同时显示不同的数字或字符,利用人眼的视觉暂留效应,实现快速切换显示内容,从而在有限的引脚数下显示更多的信息。
实验中,我们采用动态扫描的方式,依次点亮数码管,通过定时器中断控制扫描速度。
三、实验器材1. 单片机开发板(如51单片机、AVR单片机等);2. 数码管(共阳/共阴自选);3. 连接线;4. 电阻;5. 实验台;6. 编译器(如Keil、IAR等)。
四、实验步骤1. 设计电路图:根据实验要求,设计单片机与数码管的连接电路图,包括数码管的段码、位选信号、电源等。
2. 编写程序:使用C语言或汇编语言编写程序,实现数码管的动态显示功能。
(1)初始化:设置单片机的工作模式、定时器模式、端口方向等。
(2)显示函数:编写显示函数,实现数码管的点亮和熄灭。
(3)定时器中断服务程序:设置定时器中断,实现数码管的动态扫描。
3. 编译程序:将编写的程序编译成机器码。
4. 烧录程序:将编译后的程序烧录到单片机中。
5. 连接电路:将单片机与数码管连接好,包括数码管的段码、位选信号、电源等。
6. 运行实验:打开电源,观察数码管的显示效果。
五、实验结果与分析1. 实验结果:数码管按照预期实现了动态显示功能,依次点亮每位数码管,并显示出不同的数字或字符。
2. 分析:(1)通过调整定时器中断的周期,可以改变数码管的扫描速度,从而控制显示效果。
(2)在编写显示函数时,要考虑到数码管的共阳/共阴特性,选择合适的点亮和熄灭方式。
(3)在实际应用中,可以根据需要添加其他功能,如显示时间、温度等。
六、实验总结1. 通过本次实验,掌握了数码管动态显示的原理和编程实现方法。
2. 熟悉了单片机与数码管之间的接口连接,提高了动手能力。
数码管动态显示实验报告

数码管动态显示实验报告1.实验目的:本实验旨在通过使用单片机控制数码管的动态显示,了解数码管的原理和使用方法,加深对单片机控制的理解。
2.实验原理:数码管是由许多发光二极管(LED)组成的,每个数码管有7个发光二极管组成7段,再加上一个小数点(或8段数码管),通过控制每个发光二极管的亮灭状态,可以显示出数字、字母等字符。
本实验使用的是共阴极数码管,在通常情况下,数码管引脚为低电平时亮灯,为高电平时灭灯。
3.实验器材:-STC89C52单片机-共阴极数码管-电阻-面包板及连接线-电源4.实验步骤:步骤1:连接电路将数码管的7个引脚分别连接到单片机的7个I/O引脚上,并通过电阻限流。
连接电路后,确认连接无误。
步骤2:编写程序使用C语言编写程序,实现数码管的动态显示。
可以使用延时函数和位操作函数控制数码管的亮灭,通过改变每个数码管引脚的高低电平状态,实现显示不同的数字、字母。
步骤4:实验观察与分析观察数码管的显示效果,通过改变程序中的参数,可以实现不同的显示效果。
5.实验结果与分析:经过实验,我们成功实现了数码管的动态显示。
通过编写程序,我们可以实现数码管显示数字、字母等不同的字符。
调整程序中的参数,可以实现不同的动态显示效果,如流水灯、闪烁等。
数码管的动态显示是通过改变每个数码管引脚的高低电平实现的,通过快速改变引脚电平状态的时间间隔,创建了肉眼无法察觉的视觉效果,从而实现了动态显示。
此外,通过实验我们还了解到了单片机控制数码管的原理和方法,加深了对单片机控制的理解。
6.实验总结:通过本实验,我们了解到了数码管的动态显示原理和方法,并通过编写程序,成功实现了数码管的动态显示。
同时,我们还巩固了单片机控制的知识,提高了自己的动手能力和问题解决能力。
在今后的学习和工作中,我们将进一步掌握数码管的使用方法,并能够将其应用于更加复杂的应用场景中,实现更多有趣的功能。
单片机c语言版数码管动态显示实验报告

数码管动态显示实验一、实验要求1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2.在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码管数据引脚相连,P2.0~P2.3引脚输出选控制信号3.在Keil软件中编写程序,采用动态显示法,实现数码管显示变量unsigned intshow_value的值(show_value的值范围为0000~9999),即把show_value的千百十个位的值用数码管显示出来。
二、实验目的1.巩固Proteus软件和Keil软件的使用方法2.学习端口输入输出的高级应用3.掌握7段数码管的连接方式和动态显示法4.掌握查表程序和延时等子程序的设计三.实验说明(条理清晰,含程序的一些功能分析计算)如下图(五)所示,由P1口将要显示的数字输给七段数码管;再由P2第四位输给数码管的公共端,作为扫描输入信号;用外部中断P3.2和P3.3分别接PB1与PB2,实现数字的增减。
所要实现的功能是,开始运行电路功能图时,四个数码管分别显示0000,按下PB1增1,直到9999回到0000,相反按下PB2减1,直到0000回到9999。
在算相关数据时,由于要显示个十百千的不同数字,要调用disp函数,disp[0]=show/1000; //显示千位的值 disp[1]=show%1000/100; //显示百位的值disp[2]=show%100/10; //显示十位的值 disp[3]=show%10; //显示个位的值本实验需要用到IE寄存器与TCON寄存器。
四、硬件原理图及程序设计(一)硬件原理图设计图(五)开始运行proteus,四个数码管显示0000,按下PB1数码管增1,按下PB2数码管减1。
(二)程序流程图设计三)程序设源代码#include<reg51.h> //定义8051寄存器头文件#define SEG7P P1 // 定义数码管输入信号接P1 #define SCANP P2 //定义数码管扫描信号接P2 char code TAB[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0~4 0x92, 0x83, 0xf8, 0x80, 0x98 };//数字5~~9 char disp[4]={0,0,0,0}; //显示数组void delay_ms(int x); //声明延迟函数char scan[4]={0xfe,0xfd,0xfb,0xf7}; //声明输入扫描信号char i,j; //声明变量void display(); //显示数组diso的内容int show=0000; //定义初始值void get_disp(); //声明返回diap main() //主程序开始{IE=0X85; //开IE寄存器,允许INT0和INT1中断TCON=0X05; //开INT0,INT1while(1) //无穷循环{get_disp();display();}void delay_ms(int x) //声明延迟函数{ int i,j; //定义变量for (i=0;i<x;i++) //开始计数,计数x次for (j=0;j<120;j++); //计数120次,延迟1ms }void display() //声明显示函数{for(i=0;i<4;i++) //开始计数,计数4次{ j=disp[3-i]; //diap的值附到变量j SCANP=scan[i]; //显示扫描信号SEG7P=TAB[j]; //显示数字到数码管delay_ms(4); //延迟4ms}}void INT0_ISR(void) interrupt 0 //INT0中断子程序开始 {if(show<9999) //如果显示数值小于9999show++; //显示数值自增1else show=0; //否则显示数值0}void_INT1_ISR(void) interrupt 2 //INT1中断子程序开始{if(show>0) //如果显示数值大于0show--; //显示数值自减1else show=9999; //否则显示数值9999}void get_disp (){disp[0]=show/1000; //显示千位的值disp[1]=show%1000/100; //显示百位的值disp[2]=show%100/10; //显示十位的disp[3]=show%10; //显示个位的值}五.实验总结实验过程中遇到的问题及解决方法、体会问题1:运行电路原理图时,数码管都不亮。
单片机原理数码管动态显示实验单片机原理实验报告

程序源代码:
1.动态显示法,实现数码管分别显示数字 1-8;
#include<> #define uchar unsigned char #define uint unsigned int uchar code Ledcode[]={
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
连接图
显示 1-8
时钟自动计时 连接图
红绿灯效果图 1 红绿灯效果图 2
4、创建一个 Keil 应用程序:新建一个工程项目文件;为工程选择目标器件 (AT89C52);为工程项目创建源程序文件并输入程序代码;保存创建的源程 序项目文件;把源程序文件添加到项目中。 5、把用户程序经过编译后生成的 HEX 文件添加到仿真电路中的处理器中(编 辑元件→文件路径) 2 实验程序 <流程图>
指导教师
杨烈君
实验日期
实验目的: 1. 巩固 Proteus 软件和 Keil 软件的使用方法 2. 学习端口输入输出的高级应用 3. 掌握 7 段数码管的连接方式和动态显示法 4. 掌握查表程序和延时等子程序的设计
实验要求: 1. 在 Proteus 软件中画好 51 单片机最小核心电路,包括复位电路和晶振
电路 2. 在电路中增加八位 7 段数码管(共阳/共阴自选),将 P2 口作数据输出
口与 7 段数码管数据引脚相连 ,P3 引脚输出位选控制信号 3. 在 Keil 软件中编写程序,采用动态显示法,实现数码管分别显示数字
1-8 4. 实现指定数值的显示 (可使用 缓存数值) 5. 实现类似时钟的效果,如“ 13-23-25” 13 时 23 分 25 秒 6. 实现时钟的自动计时 7. 扩展要求: 结合 LED 显示,实现带数码显示的交通灯
数电实验 数码管的动态显示

实验六数码管的动态显示
一、实验目的:
1.学习多位数码动态显示的原理。
2.培养综合运用多种中规模集成器件组合逻辑功能部件的能力及实验技能。
二、实验器材:
74LS139 74LS153 74LS00 74LS74 数字电子线路实验箱
三、实验原理:
数字电路中数据的显示方式有两种,一种为静态显示,一种为动态显示。
前面的实验中数码管的显示方式均为静态显示,数码管动态显示原理与静态显示不同,如果数码管采用共阳极接法一般在阴极接入数据信号,同时在阳极信号接入高电平则该数码管显示数据。
静态显示原理框图:
4路数据输入
数据
选择
2-4译
码器振荡器
秒脉冲
计数
器
七段
译码
4位
数码
管显
示
电路设计图:
测试:。
单片机原理数码管动态显示实验单片机原理实验报告

宁德师范学院计算机系实验报告( 2014— 2015 学年第2学期)课程名称单片机原理实验名称数码管动向显示实验专业计算机科学与技术(非师范)年级2012级学号 B47姓名王秋指导教师杨烈君实验日期实验目的:1.坚固 Proteus 软件和 Keil 软件的使用方法2.学习端口输入输出的高级应用3.掌握 7 段数码管的连结方式和动向显示法4.掌握查表程序和延时等子程序的设计实验要求:1.在 Proteus 软件中画好 51 单片机最小核心电路,包含复位电路和晶振电路2.在电路中增添八位 7 段数码管 ( 共阳 / 共阴自选 ) ,将 P2 口作数据输出口与7 段数码管数据引脚相连, P3 引脚输出位选控制信号3.在 Keil 软件中编写程序,采纳动向显示法,实现数码管分别显示数字1-84.实现指定数值的显示(可使用缓存数值)5.实现近似时钟的见效,如“13-23-25 ” 13 时 23 分 25 秒6.实现时钟的自动计时7.扩展要求:联合 LED显示,实现带数码显示的交通灯实验设施(环境):1.计算机2. Proteus ISIS 7 Professional应用程序3. Keil应用程序实验内容:数码管动向显示技术要务实现:1.动向显示法,实现数码管分别显示数字1-8 ;2.实现指定数值的显示(可使用缓存数值)();3.实现近似时钟的见效,如“13-23-25” 13时23分25秒;4.实现时钟的自动计时;扩展要求:联合 LED显示,实现带数码显示的交通灯;实验步骤、实验结果及分析:1实验步骤:1、使用 Proteus ISIS 7 Professional应用程序,建立一个.DSN 文件2、在“库”下拉菜单中,选中“拾取元件”(快捷键 P),分别选择以下元件: AT89C51、CAP、CAP-ELEC、CRYSTAL、 RESPACK-8。
3、建立仿真电路:连结图显示 1-8显示显示时间时钟自动计时连结图红绿灯见效图1红绿灯见效图24、创立一个Keil应用程序:新建一个工程项目文件;为工程选择目标器件(AT89C52);为工程项目创立源程序言件并输入程序代码;保留创立的源程序项目文件;把源程序言件增添到项目中。
单片机数码管动态显示实验报告
单片机数码管动态显示实验报告单片机数码管动态显示实验程序(汇编)单片机数码管动态显示实验程序org 00hajmp headorg 0030hhead:mov sp,#0070hnum equ p0 ;p0口连接数码管reset:mov dptr ,#tabmov r0,#4sh:acall show_tabcall dptr_adddjnz r0,shmov r0 ,#4sjmp resetdptr_add:inc dptrinc dptrinc dptrinc dptrrettab :db0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;;;;;;;;;;;;;;;;;;;;; 函数的功能是用来动态显示dptr上的四个数据 ;;;;;;;;;;;;;;;;;;;;;; show_tab:clr amov r2,#0mov r3,#148mov p2,#238loop:movc a,@a+dptrmov num ,aacall delay_5msinc r2mov a,r2;调用片选函数前注意A的变化acall select_movcjne r2,#4,loopmov r2,#0clr adjnz R3,loopret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;select_mov:;p2的初值238push 0e0hmov a,p2rl amov p2,apop 0e0hretdelay_5ms:mov r6,#5signed_5ms:call delay_1msdjnz r6,signed_5msret篇二:单片机动态数码显示设计实验报告微机原理与接口技术实验报告实验题目:指导老师:班级:计算机科学与技术系姓名:动态数码显示设计2014年 12月3日实验十三动态数码显示设计一、实验目的1.掌握动态数码显示技术的设计方法。
数码管的动态显示实验报告
数码管的动态显示实验报告数码管的动态显示实验报告一、引言数码管是一种常见的数字显示器件,广泛应用于计算机、电子仪器和仪表等领域。
本实验旨在通过动态显示的方式,展示数码管的工作原理和应用。
二、实验目的1. 了解数码管的基本结构和工作原理;2. 学习使用单片机控制数码管进行动态显示;3. 掌握数码管的编码方式和显示原理。
三、实验器材和原理1. 实验器材:数码管、Arduino开发板、面包板、杜邦线等;2. 实验原理:数码管是由多个发光二极管组成的,每个发光二极管可以通过控制其阳极和阴极来实现亮灭。
通过快速切换不同的发光二极管,可以实现数码管的动态显示。
四、实验步骤1. 连接电路:将数码管的阳极和阴极分别连接到Arduino开发板的数字输出引脚和地线上;2. 编写程序:使用Arduino开发环境,编写程序控制数码管的动态显示;3. 上传程序:将编写好的程序上传到Arduino开发板;4. 运行实验:观察数码管的动态显示效果。
五、实验结果和分析经过实验,我们成功实现了数码管的动态显示。
通过控制不同的数字和显示时间间隔,我们可以展示各种数字、字母、符号等。
数码管的动态显示效果生动鲜明,能够吸引人的注意力。
六、实验心得通过本次实验,我深入了解了数码管的工作原理和应用。
数码管作为一种常见的显示器件,在现代电子领域扮演着重要的角色。
掌握数码管的编码方式和显示原理,对于今后的学习和工作都具有重要意义。
七、实验应用数码管广泛应用于各种计算机和电子设备中,如电子钟、电子秤、数字仪表等。
其动态显示效果可以提高用户体验,增加信息传递效果。
同时,数码管的低功耗、易控制等特点也使其成为电子产品中不可或缺的一部分。
八、实验展望数码管作为一种显示器件,随着科技的发展,其在分辨率、显示效果、节能等方面还有很大的发展空间。
未来,我们可以期待更加智能化、高清晰度的数码管产品的出现,为人们的生活和工作带来更多的便利和乐趣。
九、结论通过本次实验,我们深入了解了数码管的动态显示原理和应用。
单片机实验报告,数码管显示
单片机实验报告,数码管显示实验目的1、掌握数码管动态扫描显示的原理和编程实现方法;2、掌握软件延时程序的使用。
实验任务利用数码管动态显示,设计一个两位秒表,计时0-59,时间到了显示“FF”,使用软件延时实现。
实验原理数码管动态显示的连接方式是将所有数码管的段码a、b、c、d、e、f、g、dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。
所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
具体过程是:当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的位选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中每位数码管的点亮时间为2ms左右,由于人的视觉暂留现象及发光极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
实现延时通常有两种方法:一种是硬件延时,这需要用到单片机的定— 1 —时器,这种方法可以提高CPU的工作效率,也能做到精确控制时间,此方法将在实验四中再学习;另一种方法是软件延时,这种方法主要采用循环体进行。
可以采用for循环以及for循环嵌套的方式达到粗略的长时间延时,利用Keil软件可以调试和观察for语句的延时时间。
实验结果:总结:本次实验我很好的复习了有关C语言的相关语句知识点,合理的运用到了单片机的程序编码中去,但实验过程中,也出现了很多问题。
比如在运行过程中,数码管会乱码,检查后发现是扫描信号端口错误,将扫描信号端口顺序调换,重新运行则解决了乱码问题。
共阴数码管电路0到15的显示参数代码表要记清楚。
(单片机实验教学资料)5.数码管动态显示
实验效果上,学生能够通过实际操作掌握数码管动态显示 的方法,提高对单片机的应用能力。在实验过程中,需要 注意避免数码管亮度过高导致视觉疲劳,以及保证程序的 稳定性,避免出现闪烁或乱码现象。
展望
技术发展与新应用
教学改进与新方法
个人能力提升与拓展
随着技术的不断发展,数码管动态显 示技术将会有更多的应用领域。例如 ,在智能家居、物联网等领域中,数 码管动态显示可以作为人机交互界面 ,实现更加直观、高效的信息展示。
或字符。
数码管内部通常有8个LED段, 分别表示数字0-9和字母A-F。
当给某个LED段加上正向电压时, 该段点亮;反之,则熄灭。
动态显示与静态显示的区别
静态显示
每个数码管在某一时刻只显示一 个字符,需要使用多路复用技术 来控制多个数码管。
动态显示
通过轮流点亮不同的数码管,使 多个数码管同时显示不同的字符 ,实现多位显示。
实验结果展示
结果1
数码管成功显示数字或字母,无闪烁 或错位现象。
结果2
数码管显示效果不理想,存在闪烁或 错位现象。
结果分析
分析1
程序编写正确,数码管连接无误,因此数码管能够正确显示数字或字母。
分析2
程序中存在延时函数设置不当或数码管连接存在问题,导致数码管显示效果不 理想。
05
总结与展望
总结
发送控制信号
02
根据需要显示的内容,编写程序代码以向数码管发送相应的控
制信号。
刷新显示
03
在需要动态显示的情况下,编写程序代码以实现数码管的刷新
显示。
数码管驱动程序的编写
确定驱动程序功能
根据实际需求,确定驱动程序应具备的功能,如显示数字、字母 或自定义字符等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(28-初值)×机器周期时长
方式2和方式0、1最大的差别就是计数器的初值是由硬件控制自动装入的。在方式0、1下一旦计数器溢出,就表示计数器已回0,如果要按照原先的初值重新计数,就需要通过软件重装计数器初值,由于重装操作需要执行一定数量的代码,因此影响了定时时间的精度。方式2则采用硬件控制重装初值,完全避免了重装操作对定时精度的影响,适用于需要产生高精度定时间隔的场合,常用作单片机串行口的波特率发生器。
表6-1M1、M0和定时器/计数器工作方式的对应关系
功能选择位C/T
当C/ =0时为选择定时(Timer)功能,即定时器/计数器的内部计数器对单片机的机器周期进行计数,从而实现定时功能。
当C/ =1时为选择计数(Counter)功能,即定时器/计数器的内部计数器对单片机的T0或T1引脚引入的外部脉冲进行计数。
五、实验过程
1.电路连接
将基本IO板上的J1和CPU板上单片机的P0(J1或J5)相连、基本IO板上的J2和CPU板上单片机的P1(J2或J6)相连即可。注意连接时的顺序,单片机端口的低位和A段相连。
2.程序设计
根据实验要求,设计代码如下:
程序中在设置定时器初值时,为了增强可读性,定义了宏FPS,即每秒中断次数,此时应特别注意,要确保在当前晶振频率下,OSC/12/FPS能够得到整数,否则将会引起定时误差。例如在本例中,晶振频率为11.0592MHz,FPS定义为200时,可整除得到定时常数为4608。
数码管的动态显示是通过程序在运行过程中对每一位数码管轮流驱动,交替点亮实现的。动态显示的方法利用了人眼视觉暂留的原理,只要各数码管轮流点亮的间隔小于人眼视觉暂留的时间(约40ms),人们就会觉得数码管是一直点亮的。
综上所述,实验系统的数码管共有8个(电路连接情况如图3-8所示),为了满足每个数码管两次点亮间隔不超过40ms的条件,每个数码管的点亮时间应不大于5ms。本实验设置每个数码管点亮时间为5ms。
TR1:定时器/计数器1(T1)的运行控制位。通过软件置1或清0来启动或停止T1内部计数器的计数。
TR0:定时器/计数器0(T0)的运行控制位。其功能和操作方式同TR0。
单片机复位后,TCON寄存器的所有位均为0。
3. MCS-51定时器/计数器的工作方式
MCS-51的定时器/计数器0(T0)有方式0~方式3共4种工作方式,定时器/计数器1(T1)则只有方式0~方式2共3种工作方式。因为方式3很少使用,因此本节仅介绍工作方式0~2。
1. MCS-51定时器/计数器的结构及功能
MCS-51单片机内部提供两个16位定时器/计数器,分别是定时器/计数器0(T0)和定时器/计数器1(T1)。虽然它们被称为定时器/计数器,但本质上它们都计数器。当选择单片机的机器周期作为计数对象时,由于机器周期出现的频率和晶振频率之间的关系是固定的,对固定频率的信号进行计数实际上就是定时器;当对通过T0引脚(P3.4)或T1引脚(P3.5)引入的外部脉冲作为计数对象时,它们是计数器。
当C/ =1时,为计数工作方式,计数源选择开关连接到单片机的T0引脚(P3.4)或者T1引脚(P3.5),计数器对T0引脚或T1引脚引入的脉冲信号进行计数,每当外部信号发生一次负跳变(即从高电平到低电平的下降边沿),计数器加1。
不论定时器/计数器工作在定时方式还是计数方式,GATE(门控位)都控制着定时器/计数器的运行条件:
(216-初值)×机器周期时长
当晶振频率为12MHz,则定时方式1最长的定时时间为(216-0)×1μs=65.536ms。
(3)定时器/计数器工作方式2
当TMOD中的M1M0为10时,定时器/计数器被选为工作方式2,具有自动重装功能的8位计数器,其逻辑结构如图6-3所示。
图6-3 MCS-51定时器/计数器工作方式2逻辑结构
根据电路连接方式和数码管驱动方式,设计显示0~9,A~F的字型码;
设置8个字节的显示缓冲区,通过数码管动态显示驱动的方法,将显示缓冲区内容显示在8位数码管上。
三、实验设备
硬件:PC机,nKDE-51单片机实验教学系统;
软件:Keil C51集成开发环境,FlashMagic单片机程序烧写软件。
四、实验原理
GATE:门控位
当GATE=0时,TCON寄存器中的TR0或TR1(定时器/计数器运行控制位)为1则可立即启动定时器/计数器0或1;
当GATE=1时,不但TR0或TR1要为1,而且单片机的 或 引脚的输入也为高电平时,才能启动定时器/计数器0或1。
(2)定时器控制寄存器TCON
TCON寄存器用于控制定时器/计数器0和1的启动和停止,还包括溢出标志及中断控制标志等。它的字节地址为88H,可以位寻址。TCON的高4位存放定时器/计数器的运行控制位和溢出标志位,其余4位为外部中断的触发方式控制位和中断请求标志,在上一个实验中已做过介绍,此处不再赘述。
当C/ =0时,为定时工作方式,计数源选择开关连接到振荡器的12分频输出,计数器对机器周期脉冲计数。其定时时间为:
(213-初值)×机器周期时长
从上式可以看出,初值越大,计数器离溢出越近,定时时间越短,当计数器初值为0时定时时间最长。如果系统晶振频率为12MHz,则每个机器周期时长为1μs,则在定时器方式0下最长的定时时间为(213-0)×1μs=8.192ms。
TCON寄存器的地址及各功能位分布如下:
TF1:定时器/计数器1(T1)的溢出标志。当T1计数溢出时,由硬件将此位置1。TF1可供程序查询,同时也是定时器/计数器1的中断请求标志。如果中断系统被设置允许该中断,则当CPU响应中断,进入中断服务程序后,由硬件将TF1自动清0,不需要软件处理。
TF0:定时器/计数器0(T0)的溢出标志。其功能和操作方式同TF1。
2.定时器/计数器的控制与状态寄存器
T0和T1的1Βιβλιοθήκη 位加1计数器由两个8位特殊功能寄存器THx和TLx(x=0或1)组成,它们可被软件编程设置为不同的组合状态(13位、16位或两个独立的8位计数器),从而形成定时器/计数器的4种工作方式,这些工作方式的选择及控制都由两个特殊功能寄存器TMOD和TCON中的内容来决定。
(2)定时器/计数器工作方式1
当TMOD中的M1M0为01时,定时器/计数器被选为工作方式1,16位计数器,其逻辑结构如图6-2所示。
图6-2 MCS-51定时器/计数器工作方式1逻辑结构
定时器/计数器方式1和方式0的工作原理完全相同,此处不再赘述。它们的差别仅在于计数器的位数不同:方式0为13位计数器,而方式1则将THx和TLx合为一个16位的计数器。因此,在作为定时器使用时,方式1的最大定时时间为:
(1)工作方式控制寄存器TMOD
TMOD寄存器用于定义定时器/计数器0和1的操作模式及选择工作方式,其格式为:
位宽8位的TMOD寄存器分成高低两部分,各4位,分别用于定义T1和T0的工作模式及选择工作方式,对应位的功能相同。各位的定义及功能说明如下。
M1M0:工作模式选择位
M1M0两位共有四种组合,可定义四种定时器/计数器的工作方式,分别为13位、16位定时器/计数器、具有自动重装的8位定时器/计数器和将T0分成两个8位计数器四种。具体工作方式选择如表6-1所示。
当它们用做计数器时,只要T0或T1的引脚上有一个从1到0的负跳变,相应的计数器就加1。由于单片机在每个机器周期的S5P2状态对T0及T1引脚的电平进行一次采样,因此单片机需要用两个机器周期来识别一次负跳变,所以单片机计数器的最高计数频率为晶振频率的1/24。
不管是用作定时器还是计数器,T0和T1的计数器都只能递增计数,当16位计数器的计数值增加到0FFFFH时,下一次计数脉冲的到达将会使计数器的值回到0000H,计数器产生溢出信号,置位相应的标志位,并向主机申请中断。由于递增计数的特性,当设定计数次数时,必须以计数器的计数量程减去计数次数作为初值赋给计数器作为计数初值,才能在设定的计数次数后置位相应的标志位,向CPU申请中断。
3.验证结果
在Keil中建立新工程,将上述程序代码加入工程,编译链接后,将生成的HEX文件烧写到单片机中,验证运行结果和设计要求是否相符。
(1)定时器/计数器工作方式0
当TMOD中的M1M0为00时,定时器/计数器被选为工作方式0,13位计数器,其逻辑结构如图6-2所示。
图6-2MCS-51定时器/计数器工作方式0逻辑结构
在工作方式0下,16位计数器THx和TLx一共只使用了13位,由THx的8位和TLx的低5位组成,即TLx的5位计数溢出后,THx的计数加1,直到全部的13位计数值为全1后,下一个计数脉冲的到达将使TFx置位为1,并向CPU申请中断。程序可以通过查询TFx是否为1来判断定时器/计数器的计数是否溢出,也可以通过开放相应的中断来处理定时器/计数器计数溢出事件。
当GATE=0时,图6-2中的或门输出始终为1,在这种情况下,与门的输出(计数控制信号)由TRx决定,定时器/计数器不受 输入电平的影响,只要TRx=1,对应的定时器/计数器就允许计数,TRx=0则停止计数。
当GATE=1时,图6-2中与门的输出(计数控制信号)由 的输入电平和TRx共同决定,只有当 为高电平且TRx=1这两个条件都满足时,定时器/计数器才开始计数,否则定时器/计数器停止计数。
图6-1MCS-51单片机定时器/计数器0、1结构框图
定时器/计数器的基本结构如图6-1所示。它是由6个特殊功能寄存器组成的。其中,定时器T0由TH0和TL0两个8位计数器组成;定时器T1由TH1和TL1两个8位计数器组成。
当它们用做定时器时,其计数脉冲来源于晶振时钟输出信号的12分频,即每个机器周期使计数器加1,所以说定时器本质上是针对机器周期的计数器,一旦单片机的晶振频率选定,机器周期也就随之确定,从而使对机器周期的计数转换为对确定时间的计数。例如,当单片机晶振频率选择为12MHz时,一个机器周期就是1μs,即计数器对机器周期每计数一次,就是1μs,具体的定时时长可通过简单的换算变换成相应的计数值。