实验六 使用单片机定时器的数码管动态显示驱动实验
数码管动态显示实验报告
一、实验目的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
在需要动态显示的情况下,编写程序代码以实现数码管的刷新
显示。
数码管驱动程序的编写
确定驱动程序功能
根据实际需求,确定驱动程序应具备的功能,如显示数字、字母 或自定义字符等。
(完整word版)实验六使用单片机定时器的数码管动态显示驱动实验
实验六使用单片机定时器的数码管动态显示驱动实验一、实验目的●掌握数码管动态驱动方式的工作原理;●掌握单片机定时器中断服务程序的编写方法;●掌握基于单片机定时器中断调度方式的数码管动态显示驱动程序的编写方法。
二、实验要求●单片机通过P1 端口连接数码管组的字型码(段码)控制端;●单片机通过P0 端口连接数码管组的位置码(位码)控制端;●根据电路连接方式和数码管驱动方式,设计显示0~9,A~F 的字型码;●设置8 个字节的显示缓冲区,通过数码管动态显示驱动的方法,将显示缓冲区内容显示在8 位数码管上。
三、实验设备●硬件:PC 机,nKDE-51 单片机实验教学系统;●软件:Keil C51 集成开发环境,FlashMagic 单片机程序烧写软件。
四、实验原理1. MCS-51 定时器/计数器的结构及功能MCS-51 单片机内部提供两个16 位定时器/计数器,分别是定时器/计数器0(T0)和定时器/计数器1(T1)。
虽然它们被称为定时器/计数器,但本质上它们都计数器。
当选择单片机的机器周期作为计数对象时,由于机器周期出现的频率和晶振频率之间的关系是固定的,对固定频率的信号进行计数实际上就是定时器;当对通过T0 引脚(P3.4)或T1 引脚(P3.5)引入的外部脉冲作为计数对象时,它们是计数器。
图6-1 MCS-51 单片机定时器/计数器0、1 结构框图定时器/计数器的基本结构如图6-1 所示。
它是由6 个特殊功能寄存器组成的。
其中,定时器T0 由TH0 和TL0 两个8 位计数器组成;定时器T1 由TH1 和TL1 两个8 位计数器组成。
当它们用做定时器时,其计数脉冲来源于晶振时钟输出信号的12 分频,即每个机器周期使计数器加1,所以说定时器本质上是针对机器周期的计数器,一旦单片机的晶振频率选定,机器周期也就随之确定,从而使对机器周期的计数转换为对确定时间的计数。
例如,当单片机晶振频率选择为12MHz 时,一个机器周期就是1μs,即计数器对机器周期每计数一次,就是1μs,具体的定时时长可通过简单的换算变换成相应的计数值。
单片机数码管动态显示实验报告
单片机数码管动态显示实验报告单片机数码管动态显示实验报告一、实验目的本实验旨在通过单片机控制数码管的动态显示,掌握单片机的基本操作和数码管显示原理,培养实际动手能力和编程技能。
二、实验原理数码管是一种常用的电子显示器件,通过单片机控制可以实现数字、字母等多种形式的显示。
本实验采用共阴极数码管,通过单片机控制选通哪个LED灯亮,从而在数码管上显示出相应的数字或字母。
三、实验步骤1.硬件搭建首先,将单片机、数码管、电源等硬件连接起来。
注意数码管的引脚与单片机的连接方式,确保正确连接。
2.编程环境设置打开单片机编程软件,如Keil uVision等,配置相应的编译器和调试器选项。
3.编写程序在编程环境中,编写程序以实现数码管的动态显示。
本实验采用C语言进行编程。
程序主要包括初始化、显示函数等。
4.编译程序将编写的程序进行编译,生成可执行文件。
5.调试程序通过调试器对程序进行调试,观察数码管的显示效果是否符合要求。
如有问题,及时修改程序并重新编译和调试。
6.测试结果确保程序运行无误后,对数码管的显示效果进行测试,观察是否达到预期效果。
四、实验结果与分析1.实验结果通过本次实验,我们成功实现了单片机对数码管的动态显示。
在数码管上成功显示了数字和字母,效果良好。
2.结果分析通过本次实验,我们深入了解了单片机的基本操作和数码管显示原理。
同时,我们也学会了如何编写程序、编译和调试程序。
此外,我们还学会了如何解决实验过程中遇到的问题。
这些技能对于后续的电子设计和开发具有重要意义。
五、实验总结与展望1.实验总结本次实验通过单片机控制数码管的动态显示,我们成功掌握了单片机的基本操作和数码管显示原理。
在实验过程中,我们学会了如何编写程序、编译和调试程序。
同时,我们也学会了如何解决实验过程中遇到的问题。
这些技能对于后续的电子设计和开发具有重要意义。
2.实验展望在本次实验的基础上,我们可以进一步探索如何实现更复杂的显示效果,如多位数码管的动态显示、彩色显示等。
数码管动态显示实验实验
数码管动态显示实验实验
一、实验目的
1. 熟悉Keil IDE u Vision集成开发环境软件的使用方法。
2. 熟悉51单片机仿真软件的使用方法。
3. 熟悉单片机程序设计的基本思路和方法。
4. 理解数码管动态显示的工作原理、掌握其编程方法。
二、实验内容
利用数码管动态显示方式,AT89C51外接两个共阳极数码管,P2.6和P2.7分别与三极管基极相连作位选端。
实现间隔0.5s循环流水显示数字0-9,开始显示“1 2”,0.5s后变为“2 3”,再过0.5s后变为“3 4”……
三、实验要求
1. 0.5s延时,可采用定时/计数器查询方式实现,也可采用for循环方式实现。
给定晶振为11.0592MHz。
2. 画出程序流程图,并独立编写C51程序。
3. 做好实验前预习,完成proteus仿真。
四、实验硬件电路
五、实验步骤
1. 在Keil IDE u Vision 集成开发环境下建立工程文件,编辑源文件、编译、链接并生成目标文件,仿真调试验证结果。
2. 分析本次实验的电路图,并结合控制程序,理解控制原理。
3.打开proteus仿真软件,新建工程,放置电路图所需的各类元器件。
更改各类元器件的数值和名称。
将各类元器件进行电气连接。
4. 双击AT89C51单片机,设置单片机的程序文件路径。
5. 运行proteus仿真软件,观察仿真效果。
6. 观察能否实现目标功能,如有问题查找原因,最终实现目标功能。
六、题目分析
七、程序流程图及程序清单。
数码管的动态显示实验报告
数码管的动态显示实验报告一、实验目的1、了解数码管的工作原理和显示方式。
2、掌握数码管动态显示的编程方法和技巧。
3、通过实验,提高对数字电路和单片机编程的综合应用能力。
二、实验原理数码管是一种常用的数字显示器件,分为共阴极和共阳极两种类型。
共阴极数码管的阴极连接在一起并接地,当阳极接高电平时,对应的段点亮;共阳极数码管则是阳极连接在一起并接电源,当阴极接低电平时,对应的段点亮。
动态显示是指依次快速地轮流点亮多个数码管,利用人眼的视觉暂留效应,使人感觉多个数码管同时稳定地显示不同的数字。
在动态显示中,需要通过控制数码管的位选和段选信号来实现数字的显示。
三、实验设备1、单片机开发板2、电脑3、编程软件四、实验步骤1、硬件连接将数码管与单片机的 I/O 口进行连接,确定位选和段选的引脚。
连接好电源和地线,确保电路连接正确无误。
2、软件编程选择合适的编程语言,如 C 语言。
定义数码管的引脚和相关的控制变量。
编写数码管显示的函数,包括位选函数和段选函数。
在主函数中,通过循环调用显示函数,实现数字的动态显示。
3、编译下载使用编程软件对编写的程序进行编译,检查是否有语法错误。
将编译成功的程序下载到单片机开发板中。
五、实验程序```cinclude <reg52h> //包含 52 系列单片机的头文件//数码管段选引脚定义sbit SEG_A = P2^0;sbit SEG_B = P2^1;sbit SEG_C = P2^2;sbit SEG_D = P2^3;sbit SEG_E = P2^4;sbit SEG_F = P2^5;sbit SEG_G = P2^6;sbit SEG_DP = P2^7;//数码管位选引脚定义sbit BIT1 = P1^0;sbit BIT2 = P1^1;sbit BIT3 = P1^2;sbit BIT4 = P1^3;//显示数字 0 9 的段码unsigned char code SEGMENT_CODE ={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//数码管位选函数void SelectBit(unsigned char bit){switch (bit){case 1:BIT1 = 0; BIT2 = 1; BIT3 = 1; BIT4 = 1; break;case 2:BIT1 = 1; BIT2 = 0; BIT3 = 1; BIT4 = 1; break;case 3:BIT1 = 1; BIT2 = 1; BIT3 = 0;BIT4 = 1;break;case 4:BIT1 = 1;BIT2 = 1;BIT3 = 1;BIT4 = 0;break;}}//数码管段选函数void SelectSegment(unsigned char num){SEG_A =(num & 0x01)? 1 : 0; SEG_B =(num & 0x02)? 1 : 0; SEG_C =(num & 0x04)? 1 : 0; SEG_D =(num & 0x08)? 1 : 0; SEG_E =(num & 0x10)? 1 : 0;SEG_F =(num & 0x20)? 1 : 0; SEG_G =(num & 0x40)? 1 : 0; SEG_DP =(num & 0x80)? 1 : 0;}//主函数void main(){unsigned char i, num = 0;while (1){for (i = 1; i <= 4; i++){SelectBit(i);SelectSegment(SEGMENT_CODEnum);num++;if (num == 10)num = 0;delay_ms(5);//适当的延时,以实现稳定显示}}}```六、实验现象与结果在实验中,当程序下载到单片机开发板后,数码管依次快速地显示数字 0 到 9,循环往复。
数码管动态显示实验报告
数码管动态显示实验报告数码管动态显示实验报告一、引言数码管是一种常见的电子显示器件,广泛应用于各种仪器仪表、计时器、计算器等电子设备中。
数码管动态显示实验是电子技术实验中的一项基础实验,通过控制数码管的亮灭状态,可以实现数字的显示。
本实验旨在通过实际操作,加深对数码管工作原理的理解,并掌握数码管的动态显示方法。
二、实验原理数码管是由多个发光二极管(LED)组成的,每个发光二极管代表一个数字或字符。
通过对发光二极管的亮灭状态进行控制,可以显示不同的数字或字符。
数码管一般采用共阳极或共阴极的方式接线,共阳极的数码管的阳极连接在一起,而共阴极的数码管的阴极连接在一起。
在动态显示实验中,采用的是共阳极数码管。
数码管的亮灭状态是通过控制数码管的阳极与地之间的电压差来实现的。
当某个数码管需要亮时,将其对应的阳极与地连接,电流通过发光二极管,使其发光。
当某个数码管需要灭时,将其对应的阳极与电源正极连接,断开与地的连接,发光二极管不通电,不发光。
三、实验步骤1. 准备实验所需材料:共阳极数码管、面包板、电阻、导线等。
2. 将数码管与面包板连接,确保连接正确,数码管的阳极连接到面包板的相应引脚。
3. 连接电路:将电源正极与数码管的共阳极连接,电源负极与面包板的地引脚连接。
4. 编写程序:根据控制数码管显示数字的逻辑,编写相应的程序。
5. 将程序下载到单片机中,通过单片机控制数码管的亮灭状态。
四、实验结果经过实验,我们成功实现了数码管的动态显示。
在程序的控制下,数码管可以显示不同的数字或字符,实现了数字的动态变化。
通过调整程序中的参数,可以实现不同的显示效果,如闪烁、滚动、循环等。
五、实验总结本次实验通过实际操作,加深了对数码管工作原理的理解。
通过编写程序,我们掌握了控制数码管动态显示的方法。
在实验过程中,我们遇到了一些问题,如数码管显示不正常、程序错误等,但通过仔细检查和调试,最终解决了这些问题。
通过这次实验,我们不仅学到了知识,还培养了动手实践和问题解决的能力。
单片机数码管动态显示实验报告
单片机数码管动态显示实验报告实验名称:单片机数码管动态显示实验实验目的:1.了解数码管的动态显示原理;2.掌握单片机控制数码管动态显示的方法;3.培养对数字信号处理的能力。
实验器材:1.STC89C52单片机开发板;2.DC560A数码管模块;3.连接线。
实验原理:数码管是由多个发光二极管组成的,每个数字在数码管上的显示方式是通过快速地轮流点亮数码管的每个段来实现的。
在本实验中,采用时分复用的方法控制数码管动态显示相关数字。
实验步骤:1.连接单片机和数码管模块。
将数码管的共阳或共阴引脚分别连接到单片机的相应IO口上,并接上合适的电阻。
将数码管的A~G引脚连接到单片机的相应IO口上。
2.编写程序代码。
程序主要功能是通过切换数码管的显示段和位,实现数码管动态显示。
4.打开电源,观察行程显示的效果。
实验结果:在实验中,通过编写程序控制单片机,成功实现了数字的动态显示。
数码管能够按顺序显示出所要显示的数字,并且在多个数码管之间进行切换,显示效果非常理想。
实验分析:1.数码管动态显示的原理是通过快速地轮流点亮每个段来实现的。
这个过程发生的速度非常快,人眼无法察觉到。
2.单片机的IO口输出高或低电平,控制数码管的亮灭。
通过逐位切换和循环控制,实现了数字的动态显示。
3.单片机的频率和控制方式对动态显示效果有一定影响。
适当调整程序中的延时时间和控制方式,可以改变数码管的显示效果。
实验总结:本实验通过对单片机数码管动态显示的实现,加深了对数码管原理和单片机控制的认识。
掌握了数字信号动态显示的基本原理和方法。
在今后的学习和工作中,这将有助于对数字信号处理和显示技术的更深入理解和应用。
实验拓展:可以尝试在实验中通过按键按下的方式改变数码管显示的数字,进一步扩展单片机的应用范围和实用性。
此外,还可以尝试改变数码管的显示效果,比如实现数码管的闪烁、呼吸灯等特殊效果。
这将对单片机的编程和数码管的控制提出更高的要求,同时也增加了实验的趣味性和实用性。
《数码管动态显示》实验报告
显示函数:在显示前先对小时和分钟的十位和个位进行判断,小时数除以10,得到的整数为小时的十位,对小时数取余,得到小时的个位,分钟数除以10,得到分钟数的十位,对分钟数取余,得到分钟数的个位,4个数码管轮流进行显示,分别延时10us,达到数码管显示时钟的效果。
《单片机原理与应用》实验报告
姓名:
学 号:
实验名称:
数码管动态显示
班级:
电信二班
一、实验工具、器材
Proteus仿真软件,Keil程序编写软件,四个共阳数码管,AT89C51单片机
二、实验原理
a)四个七段LED数码管,通过与单片机P2接口连接实现显示功能,用延时程序和循环程序产生一秒的定时,达到时、分、秒的计时。
b)动态显示:所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度合适,字符才不闪烁。本实验要求显示的时间为时,分,并且都用两个一位数码管来实现显示,此处调用显示函数计算显示。
三、硬件电路说明
本实验使用共阳型数码管,通常的数码管分为8段,即8个LED显示段, 其中dp代表小数点。数码管显示方法可分为静态显示和动态显示两种,这里采用动态显示方式,用P2.0~P2.7口来控制LED数码管的段控线。四位共阳LED数码管,其标号分别为HourH,HourL,MinL,MinH,低电平选通,且任何时候仅有一位输出低电平,显示时对各显示器进行动态扫描,显示器分时轮流工作。虽然每次只有一个显示器显示,但是由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示。P2.0~P2.7口作为输出口控制8个发光二极管的亮灭,控制数码管的显示。因此,可以实现4个LED在我们看来同时亮,显示时间。
C单片机定时器及数码管控制实验报告
C单片机定时器及数码管控制实验报告一、实验目的:1.理解单片机的定时器的工作原理和使用方法;2.掌握单片机控制数码管显示的方法;3.综合运用单片机定时器和数码管控制来实现对时间的计时功能。
二、实验器材:1.STC89C52单片机开发板;2.4位数码管;3.相关电源电缆;4.相关串口连接线;5.PC机。
三、实验原理:1.定时器的工作原理:定时器是单片机中的一个重要模块,它可以用来产生一定时间间隔的定时中断。
在STC89C52单片机中,有两个可编程定时器,分别是Timer0和Timer1、定时器的工作方式有两种:定时器工作模式和计数器工作模式。
通过设定定时器的工作模式、预分频系数以及计数初值,可以实现定时中断。
2.数码管的控制原理:数码管是一种常见的数码显示器材,一般由多个LED组成,通过对LED的开关控制来实现不同数字的显示。
使用单片机控制数码管可以实现数字的动态显示。
通常使用行扫描和列驱动两种方法来控制数码管的显示。
在本实验中,我们使用列驱动的方法来控制数码管的显示。
3.单片机定时器和数码管控制实验的原理流程:(1)初始化定时器设置,包括设定工作模式、预分频系数和计数初值。
(2)初始化数码管连接引脚,并将引脚置为输出状态。
(3)在定时器中断中,通过改变数码管显示的值来实现时间的动态显示。
四、实验步骤:1.硬件连线将STC89C52单片机开发板上的P0口连接到4位数码管的输入口,共7根线。
其中6根线对应4位数码管的6个段输入,另外1根线连接到4位数码管的控制端,用于控制数码管的选通位。
2.软件编程(1)定义头文件和端口变量#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit DIG1=P0^0; // 数码管第1位sbit DIG2=P0^1; // 数码管第2位sbit DIG3=P0^2; // 数码管第3位sbit DIG4=P0^3; // 数码管第4位sbit DULA=P0^4; // 数码管段选sbit WELA=P0^5; // 数码管位选uchar code ledData[16]={ // 共阳数码管动态显示数值表,共16个字符0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};(2)初始化函数void Init_Timer0(void) // 初始化定时器0TMOD,=0x01;//设定为定时器模式,工作模式1TH0=0xfc; // 给定初值,定时1msTL0=0x18;ET0=1;//打开定时器0中断TR0=1;//启动定时器0void Init_Timer1(void) // 初始化定时器1TMOD,=0x10;//设定为定时器模式,工作模式1TH1=0xf8; // 给定初值,定时10msTL1=0xcc;ET1=1;//打开定时器1中断TR1=1;//启动定时器1(3)定时器中断函数void Timer0Interrupt( interrupt 1 // 计时定时器中断函数static uchar count=0;TH0=0xfc;TL0=0x18;count++;if(count>=1000) // 1秒到count=0;LED_Place=0; // 置位数码管位置Digit_Index++; // 下一个要显示的数字if(Digit_Index>=8)Digit_Index=0;}if(LED_Place==1) // 第2位数码管LEDX=ledData[N%10];DIG2=0;DIG1=1;//第2位数码管显示}else if(LED_Place==2) // 第3位数码管LEDX=ledData[N/10%10];DIG3=0;DIG2=1;//第3位数码管显示}else if(LED_Place==3) // 第4位数码管LEDX=ledData[N/100%10];DIG4=0;DIG3=1;//第4位数码管显示}else // 第1位数码管LEDX=ledData[N/1000%10];DIG1=0;DIG4=1;//第1位数码管显示}}(4)主函数void mainInit_Timer0(; // 初始化定时器0Init_Timer1(; // 初始化定时器1EA=1;//全局中断使能while(1)//主函数其他处理}五、实验效果:经过上述步骤的硬件连接和软件编程,当单片机开始运行后,数码管将开始显示时间。
单片机学习项目 (6)数码管动态显示
单片机学习项目项目6-数码管动态显示一:仿真电路在图4-2-8所示电路,6只共阳数码的段选端并联在一起分别连接P0口的相应端口,P2通过74HC04反相器驱动数码管的阳极,6只共阳数码可以显示时、分、秒信息。
二:程序设计定时器初始化和中断的设定仍利用项目5中的设置,6位数码管动态显示常显示时间的小时、分钟和秒信息。
在程序中药通过秒计数得到分钟和小时信息,参考程序如下:/*预处理*/#include<reg51.h>unsigned char seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char j,k,sec = 30,min = 30,hour = 12; //声明时间变量,设定初始时间unsigned char cp1,cp2,cp3,flash;/*Timer0中断服务函数*/void timer0_isr(void) interrupt 1{TH0 = (65536 - 2000) / 256; //重装初值TL0 = (65536 - 2000) % 256; //重装初值cp1++; //中断1次,变量加1if(i >= 250) //半秒到了{cp1 = 0;cp2++;flash = ~flash; //闪烁变量}if(cp2 >= 2) //1秒到了{cp2 = 0;sec++;}if(sec >= 60){min++;sec = 0;}if(min >= 60){hour++;min = 0;}if(hour >= 24) hour = 0;P0 = 0xff; //Proteus仿真需要消隐switch(cp3){case 0: P0 = seven_seg[sec % 10]; P2 = ~0x01;break; //数码管段选//数码管位选 case 1: P0 = seven_seg[sec / 10]; P2 = ~0x02;break;case 2: P0 = seven_seg[min % 10] & (0x7f | flash); P2 = ~0x04;break;//小数点闪烁 case 3: P0 = seven_seg[min / 10]; P2 = ~0x08;break;case 4: P0 = seven_seg[hour % 10] & (0x7f | flash);P2 = ~0x10;break; //小数点闪烁 case 5: P0 = seven_seg[hour / 10]; P2 = ~0x20;break;}cp3++;if(cp3>= 6)cp3 = 0;}/*********************Timer0初始化函数***********************/void timer0_init(void){TMOD = 0x01; //T0工作方式1TH0 = (65536 - 2000) / 256; //对机器脉冲计数2000个计满溢出引发中断TL0 = (65536 - 2000) % 256;EA = 1; //开总中断ET0 = 1; //开T0中断TR0 = 1; //启动定时器T0}/**************************主函数****************************/void main(void){timer0_init();while(1); //等待中断}。
- 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,具体的定时时长可通过简单的换算变换成相应的计数值。