单片机定时器设计报告
单片机定时器设计
![单片机定时器设计](https://img.taocdn.com/s3/m/f02305987e192279168884868762caaedd33ba2b.png)
单片机定时器设计
一、设计原理
单片机定时器是通过计时寄存器来实现定时功能的。
一般来说,计时寄存器是一个16位的寄存器,存放的值从0x0000到0xFFFF之间。
定时器通过不断地递增计时寄存器的值,来实现定时的功能。
当计时寄存器达到预设的值时,会产生一个定时器中断信号,可以通过该中断信号来触发其他相关操作。
定时器工作的基本原理是通过外部晶振提供一个基准时钟,利用该时钟周期性地对计时寄存器进行递增。
根据外部晶振的频率,定时器的精度也会不同。
定时器的工作模式主要分为两种:定时工作模式和计数工作模式。
定时工作模式是指定时器在达到预设的值后产生中断,并重新开始计时。
计数工作模式是指定时器不断地计数,直到外部触发一个事件,产生中断并清零计时寄存器。
二、设计实例分析
1.设计一个1秒的定时器
2.设计一个毫秒级的定时器
3.设计一个按键消抖定时器
在按键输入中,为了避免按键的抖动,常常需要使用定时器来进行按键的消抖处理。
假设按键抖动时间为10ms,我们可以设置一个10ms的定时器,在定时器中断时检测按键状态,若按键状态稳定一致,则认定按键有效。
结语
单片机定时器是一种非常实用的功能模块,可以实现各种定时、测定、控制等功能。
本文通过给出了几个常见的定时器设计实例,并提供了相应
的计算公式,希望对读者有所帮助。
通过进一步学习和实践,读者可以更
加深入地理解和应用单片机定时器。
单片机定时器实验报告
![单片机定时器实验报告](https://img.taocdn.com/s3/m/855af51a68eae009581b6bd97f1922791688bee5.png)
一、实验目的1. 理解单片机定时器的工作原理和功能。
2. 掌握单片机定时器的编程方法,包括初始化、设置定时时间、启动定时器等。
3. 学会使用定时器实现定时功能,并通过实验验证其效果。
二、实验器材1. 单片机实验板2. 连接线3. 51单片机4. 计时器5. 示波器6. 电脑7. Keil软件三、实验原理定时器是单片机的一种重要外设,用于实现定时功能。
51单片机内部有两个定时器,分别为定时器0和定时器1。
定时器的工作原理是通过定时器计数器对机器周期进行计数,当计数器达到设定值时,定时器溢出,并产生中断请求。
定时器0和定时器1都具有四种工作模式,分别为:1. 模式0:13位定时器/计数器2. 模式1:16位定时器/计数器3. 模式2:8位自动重装模式4. 模式3:两个8位计数器本实验采用定时器0工作在模式1,实现50ms的定时功能。
四、实验步骤1. 将单片机实验板连接到电脑,并启动Keil软件。
2. 创建一个新的项目,并添加51单片机头文件(reg51.h)。
3. 编写定时器初始化函数,设置定时器0工作在模式1,并设置定时时间为50ms。
4. 编写定时器中断服务函数,用于处理定时器溢出事件。
5. 编写主函数,设置定时器中断,并启动定时器。
6. 编译并下载程序到单片机实验板。
7. 使用示波器观察定时器0的溢出信号。
五、实验代码```c#include <reg51.h>#define TIMER0_MODE1 0x01// 定时器0初始化函数void Timer0_Init() {TMOD &= 0xF0; // 清除定时器0模式位TMOD |= TIMER0_MODE1; // 设置定时器0工作在模式1TH0 = 0xFC; // 设置定时器0高8位初值TL0 = 0x18; // 设置定时器0低8位初值ET0 = 1; // 开启定时器0中断EA = 1; // 开启总中断TR0 = 1; // 启动定时器0}// 定时器0中断服务函数void Timer0_ISR() interrupt 1 {TH0 = 0xFC; // 重新加载定时器0高8位初值TL0 = 0x18; // 重新加载定时器0低8位初值// ... (其他处理)}void main() {Timer0_Init(); // 初始化定时器0while(1) {// ... (其他处理)}}```六、实验结果与分析1. 编译并下载程序到单片机实验板,使用示波器观察定时器0的溢出信号,可以看到定时器0每隔50ms产生一个溢出信号。
单片机定时器实验报告
![单片机定时器实验报告](https://img.taocdn.com/s3/m/02de7f1e0622192e453610661ed9ad51f11d5453.png)
单片机定时器实验报告
单片机定时器实验报告
简介
•实验名称:单片机定时器实验
•实验目的:掌握单片机中定时器的工作原理及使用方法•实验设备:单片机开发板、电源等
实验内容
1.单片机定时器的基本概念和原理
2.单片机定时器的分类和特点
3.实验步骤和流程
–步骤1:搭建实验电路
–步骤2:编写单片机程序
–步骤3:下载程序到单片机
–步骤4:观察定时器的工作情况
4.实验结果和分析
实验结果
•在实验过程中,我们成功搭建了单片机定时器实验电路,并编写了相应的程序。
通过下载程序到单片机,观察到定时器按照预设
的时间间隔产生中断,并执行相应的任务。
•实验结果表明,我们掌握了单片机定时器的使用方法,可以实现定时功能。
实验分析
•单片机定时器是一种重要的计时和控制设备,广泛应用于各种电子设备中。
•通过本次实验,我们深入了解了单片机定时器的工作原理和使用方法,对于日后的电子设计和开发有着重要的意义。
实验总结
•通过本次实验,我们学习了单片机定时器的基本知识,掌握了单片机定时器的使用方法,并成功实现了定时功能。
•在实验过程中,我们发现了一些问题,并通过调试和修改程序进行了解决。
这对我们提高了动手实践和问题解决能力有很大帮助。
•通过本次实验,我们对于单片机定时器有了更深入的了解,为今后的学习和应用打下了坚实的基础。
参考资料
•《单片机原理与应用》
•单片机实验教材及课件。
单片机实验报告定时器
![单片机实验报告定时器](https://img.taocdn.com/s3/m/fe71b524178884868762caaedd3383c4bb4cb497.png)
一、实验目的1. 理解单片机定时器的原理及工作方式。
2. 掌握单片机定时器的编程方法,实现定时功能。
3. 学习使用定时器中断,处理定时器事件。
二、实验环境1. 硬件设备:MCS-51单片机实验板、示波器、电源等。
2. 软件环境:Keil C51、Proteus仿真软件。
三、实验原理1. 定时器概述定时器是单片机的一个重要组成部分,用于产生定时信号或测量时间。
MCS-51单片机内部有两个定时器,即定时器0和定时器1。
2. 定时器工作原理定时器通过内部计数器进行计数,当计数达到设定值时,产生一个定时中断,执行中断服务程序。
定时器的工作方式分为四种:方式0、方式1、方式2和方式3。
3. 定时器编程定时器编程主要包括以下几个步骤:(1)设置定时器工作模式:通过向定时器模式寄存器(TMOD)写入相应的值来设置定时器工作模式。
(2)设置定时器初值:通过向定时器寄存器(THx、TLx)写入相应的值来设置定时器初值。
(3)启动定时器:通过设置定时器控制寄存器(TCON)的相应位来启动定时器。
(4)编写定时器中断服务程序:当定时器溢出时,执行中断服务程序,实现相应的功能。
四、实验内容1. 实验一:定时器0定时50ms(1)硬件连接:将P1.0口连接到蜂鸣器。
(2)软件设计:- 设置定时器0工作在方式1,定时50ms。
- 开启定时器0中断。
- 编写定时器0中断服务程序,使蜂鸣器响50ms。
2. 实验二:定时器1计数脉冲(1)硬件连接:将P3.4口连接到信号发生器。
(2)软件设计:- 设置定时器1工作在方式2,计数P3.4口的脉冲信号。
- 开启定时器1中断。
- 编写定时器1中断服务程序,记录计数器计数值,并通过数码管显示。
3. 实验三:定时器0定时1s(1)硬件连接:将P1.0口连接到蜂鸣器。
(2)软件设计:- 设置定时器0工作在方式1,定时1s。
- 开启定时器0中断。
- 编写定时器0中断服务程序,使蜂鸣器响1s。
五、实验步骤1. 编写实验一程序,并使用Proteus进行仿真测试,验证程序功能。
单片机实习报告定时器
![单片机实习报告定时器](https://img.taocdn.com/s3/m/6fc44b70492fb4daa58da0116c175f0e7cd119a3.png)
单片机实习报告——定时器一、实习目的通过本次单片机实习,使我对单片机的工作原理和应用有更深入的了解,特别是定时器的工作原理和编程方法。
同时,培养我动手实践能力和团队协作能力,提高我在实际工程中的应用能力。
二、实习内容本次实习主要分为两个部分:定时器的原理学习和定时器的应用实践。
在原理学习部分,我通过阅读相关资料和教材,对定时器的工作原理、工作模式和编程方法有了深入的了解。
在应用实践部分,我参与了团队的项目,通过实际操作,对定时器的应用有了更直观的认识。
三、实习过程1. 定时器原理学习在定时器原理学习部分,我首先了解了定时器的基本概念,定时器是一种能够根据设定的时间间隔产生中断的硬件设备。
然后,我学习了定时器的工作原理,包括定时器的工作模式、计数器、控制寄存器等。
最后,我掌握了定时器的编程方法,通过编写程序实现定时器的定时功能。
2. 定时器应用实践在定时器应用实践部分,我参与了团队的项目。
我们选择了一个简单的应用场景,利用定时器实现一个周期性的信号输出。
我负责编写定时器的程序,设置定时器的工作模式和计数器值,实现定时器的定时功能。
同时,我还参与了团队的讨论,提出了改进意见和解决方案。
四、实习收获通过本次实习,我对定时器的工作原理和编程方法有了更深入的了解,掌握了定时器的应用方法。
同时,我在实际操作中培养了动手实践能力,提高了团队协作能力。
此外,我还学会了如何查阅相关资料和教材,提高了自己的自学能力。
五、实习总结本次实习让我对单片机的定时器功能有了更深入的了解,通过实际操作,使我对定时器的应用有了更直观的认识。
同时,本次实习培养了我的团队协作能力和动手实践能力,提高了我在实际工程中的应用能力。
在今后的学习和工作中,我将继续努力,不断提高自己的技能水平,为我国的电子科技事业做出贡献。
51单片机定时器实验报告
![51单片机定时器实验报告](https://img.taocdn.com/s3/m/cc542738f8c75fbfc67db21a.png)
51单片机定时器实验实验内容:实验内容:(1)编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。
C语言程序#include<reg52.h>#define uint unsigned int#define ucahr unsigned charsbit FM=P0^0;void main(){TMOD=0x01;TH0=(65535-50000)/256;TH0=(65535-50000)%256;EA=1; //开总中断ET0=1; //开定时器0中断TR0=1;while(1);}void T0_time()interrupt 1 {TH0=(65535-50000)/256; TH0=(65535-50000)%256; FM=~FM;}汇编程序ORG 0000HJAMP MAINORG 000BHLJMP INT0_INTORG 0100HMIAN: SETB EASETB ET0AJMP $INT0_INT:MOV R2,#0FAHMOV R3,#0C8HDJNZ R3,$DJNZ R2,INT0_INTRETI(2)编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。
#include<reg52.h>#define uint unsigned int#define ucahr unsigned charuint num,num1;sbit FM=P0^7;int shi,ge,a;void delay(uint);void shumaguan();unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表void main(){TMOD=0x01;TH0=(65535-50000)/256; TH0=(65535-50000)%256; EA=1; //开总中断ET0=1; //开定时器0中断TR0=1;while(1){shumaguan();}}void T0_time()interrupt 1 {TH0=(65535-50000)/256; TH0=(65535-50000)%256;num1++;if(num1==10) {num1=0;num++;shi=num/10;ge=num%10;if(num==100) {num=0;}}}void shumaguan() {P3=0x01;P2=table[shi];delay(5);P3=0x02;P2=table[ge]; delay(5);void zuoyi(){a=~P3;a=a<<1;P3=~a;if(P3==0xfb){P3=0xfe;}}void delay(uint x) {int i,j;for(i=0;i<x;i++)for(j=0;j<110;j++);}(3)编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms 使两位数码管从00、01、02……98、99每间隔500ms加1显示。
单片机定时器实验报告doc
![单片机定时器实验报告doc](https://img.taocdn.com/s3/m/75fb352e168884868662d63c.png)
单片机定时器实验报告篇一:单片机实验报告——定时器实验四定时器实验自动化121班 36 张礼一.实验目的掌握定时器的工作原理及四种工作方式,掌握定时器计数初始值的计算,掌握如何对定时器进行初始化,以及程序中如何使用定时器进行定时。
二.实验仪器单片机开发板一套,计算机一台。
三.实验任务编写程序,使用单片机开发板上8位共阴极数码管的其中一位来显示0~9这九个字符,先从“0”开始显示,数字依次递增,当显示完“9”这个字符后,又从“0”开始显示,循环往复,每1秒钟变换一个字符,1秒钟的定时时间必须由定时器T0(或T1)提供。
开发板上的8位共阴极数码管与单片机的输入输出端口P1的硬件接线如图4-1所示,单片机P1口的8条数据线通过J3端子同时连接到 2片74HC573D锁存器的输入端,数码管的各个同名端分别连接后再与锁存器U2的8个输出端相连,每一位数码管的位选端分别与锁存器U3的8个输出端相连。
两片锁存器的输出使能端OE都恒接地,使得锁存器的内部数据保持器输出端与锁存器的输出端保持接通。
而U2的锁存使能端LE由P2.1控制,所以P2.1是段锁存;U3的锁存使能端LE由P2.0控制,所以P2.0是位锁存。
当锁存使能端为“1”时,则锁存器输入端的数据传送到输出端;当锁存使能端为“0”时,锁存器输入端的数据则不能传送到输出端;因此段码和位码通过锁存器分时输出。
汇编语言程序流程如图4-2:四.实验步骤:1.数码管的0~9的字型码表如下:2.参考图4-2所给的程序流程图编写实验程序。
(注:以下程序为两位60秒计数程序)#include sbit wei=P2^0; sbit duan=P2^1;char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};int i,j,k,num,shi,ge; void delay(int a) {for(i=0;i void display(int shi,int ge){wei=1;P1=0xfe;wei=0;duan=1;P1=table[shi];duan=0;wei=1; delay(5);P1=0xfd;wei=0; duan=1;P1=table[ge];duan=0; }void main() {TMOD=0x01;TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1; num=0; while(1) {delay(5);display(shi,ge); } }void T0_time() interrupt 1 {TH0=(65536-45872)/256; TL0=(65536-45872)%256; k++; if(k==20) { k=0; num++;if(num==60)num=0; shi=num/10; ge=num%10; } }3.实验接线,如图4-1。
单片机定时器及外部中断实验报告
![单片机定时器及外部中断实验报告](https://img.taocdn.com/s3/m/e8c8bf5f32687e21af45b307e87101f69e31fbce.png)
单片机实验报告(二)实验名称:定时器及外部中断*名:**学号:*********班级:通信2班时间:2013.11南京理工大学紫金学院电光系一、实验目的1、学习定时/计数器的应用;2、学习外部中断技术的基本使用方法;3、学习中断处理程序的编程方法。
二、实验原理(1)以P1口作为输出口,定时器实现1s定时,实现显示数的1s加1,外部中断0键盘外接BUTTON,实现对显示数快速加1的控制。
(2)系统板上硬件连线把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。
把“单片机系统”A2区的INT0端口用导线连接到D1区的KEY1端口上;三、实验内容利用定时器中断控制1s的输出,使用外部中断0使得显示的数加1. 程序如下:#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(){uint x,y;for(x=100;x>0;x--)for(y=110;y>0;y--);}uchar m,flag;void main(){uchar a,b;TMOD=0x01;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EX0=1; EX1=1; PX1=1; ET0=1; EA=1; 中断开启TR0=1;m=0; P1=0;while(1){while(flag==0); flag=0;if(m==100) m=0;m++;a=m/10;b=m+a*6;P1=b;}}void timer0() interrupt 1 using 0{uchar t;TH1=(65536-50000)/256;TL1=(65536-50000)%256;if(t<20) t++;else { flag=1; t=0; }}void exter0() interrupt 0 using 1{if(INT0==0) delay();if(INT0==0) flag=1;}void exter1() interrupt 2 using 2{if(INT1==0) delay();if(INT1==0) m=0;}将编译好的程序下载到仿真电路中四、小结与体会通过本次定时器中断实验,我对定时器的工作原理有了更加深入的理解,这也是建立在向同学请教的基础上。
单片机定时器实验报告
![单片机定时器实验报告](https://img.taocdn.com/s3/m/9778f32b0722192e4536f679.png)
定时器实验报告㈠实验目的1.掌握单片机内部计数器的使用和编程方法;2.掌握中断处理程序的编程方法。
㈡实验器材1.G6W仿真器一台2.MCS—51实验板一台3.PC机一台4.电源一台5.示波器一台㈢实验内容及要求1.在使用12MHz晶振的条件下,由8051内部定时器1按方式1工作,即作为16位定时器使用,每0.05秒钟T1溢出中断一次。
P1口的P1.0~P1.7分别接发光二极管的L1~L8。
(用连线连接J2、J3)。
要求:编写程序模拟一循环彩灯。
彩灯变化花样为:①L1、L2、 (8)次点亮;②L1、L2、…L8依次熄灭;③L1、L2、…L8全亮、全灭。
各时序间隔为0.5秒。
让发光二极管按以上规律循环显示下去。
2.编写一个救护车警笛声程序,要求:高低两种音调交替出现,交替周期1~1.5S。
㈣ 实验框图循环彩灯代码ORG 0000H LJMP MAINORG 000BH ;T0的中断入口地址MAIN:MOV SP,#60HMOV TMOD,#01H ;设置T1工作于方式一MOV 20H,#0AH ;装入中断次数MOV TL0,#0B0H ;装入计数值低8位MOV TH0,#3CH ;装入计数值高8位SETB TR1 ;启动定时器T1SETB ET1 ;允许T1中断SETB EA ;允许CPU中断SJMP $ ;等待中断CAIDENG:PUSH PSWPUSH ACC ;保护现场MOV TL0,#0B0H ;装入计数值低8位MOV TH0,#3CH ;装入计数值高8位JUDGE:DJNZ 20H,RETUNT ;0.5秒未到,返回MOV 20H,#0AH ;重置中断次数HUAY ANG1: ;花样一MOV R0,#08H ;设置花样一循环次数MOV P1,#00HMOV A,#01HLOOP:MOV P1,ALCALL DELAYLCALL DELAYLCALL DELAYRL ADJNZ R0,LOOPNEXT1:MOV TL0,#0B0H ;装入计数值低8位MOV TH0,#3CH ;装入计数值高8位JUDGE1:DJNZ 20H,NEXT1 ;0.5秒未到,返回MOV 20H,0AHHUAY ANG2: ;花样二MOV R0,#08H ;设置花样二循环次数MOV P1,#0FFHMOV A,#0FEHLOOP1:MOV P1,ALCALL DELAYLCALL DELAYLCALL DELAYRL ADJNZ R0,LOOP1NEXT2:MOV TL0,#0B0H ;装入计数值低8位MOV TH0,#3CH ;装入计数值高8位JUDGE2:DJNZ 20H,NEXT2 ;0.5秒未到,返回MOV 20H,0AHHUAY ANG3:MOV P1,#00HLCALL DELAYLCALL DELAYLCALL DELAYMOV P1,#0FFHLCALL DELAYLCALL DELAYLCALL DELAYNEXT3:MOV TL0,#0B0H ;装入计数值低8位MOV TH0,#3CH ;装入计数值高8位JUDGE3:DJNZ 20H,NEXT3 ;0.5秒未到,返回MOV 20H,0AHJMP RETUNTDELAY: ;延时子程序MOV R2,#0FFHDELAY1:MOV R1,#0FFHDJNZ R1,$DJNZ R2,DELAY1RETRETUNT:POP ACCPOP PSWRETI ;中断返回END救护车警笛声程序ORG 0000HAJMP MAINORG 001BH ;T0的中断入口地址AJMP S1ORG 0040HMAIN:MOV SP,#70HMOV R1,#100MOV R2,#10MOV R3,#20MOV TMOD,#10H ;设置T1为定时器,工作方式1MOV TH1,#0FCH ;装入计数值高8位MOV TL1,#18H ;装入计数值低8位SETB TR1 ;启动定时器T1SETB ET1 ;允许T1中断SETB EA ;允许CPU中断SJMP $ ;等待中断S1:JB F0,S2 ;高音部分MOV TH1,#0FCHMOV TL1,#18HCPL P1.0 ;取反DJNZ R1,ENDSMOV R1,#100DJNZ R2,ENDSMOV R2,#10SETB F0 ;F0赋值SJMP ENDSS2:MOV TH1,#0FEH ;低音部分MOV TL1,#0CHCPL P1.0DJNZ R1,ENDSMOV R1,#100DJNZ R3,ENDSMOV R3,#20CLR F0ENDS:RETI本次实验主要考察定时器和计数器还有中断的使用,由于课本上例题详细,所以初始化赋值之类的基础性问题并没有遇到什么困难,再加上第一次实验P1口输出和音乐实验的铺垫,基本上没有遇到什么太大的问题。
单片机定时器实训报告
![单片机定时器实训报告](https://img.taocdn.com/s3/m/c45d5d5ce97101f69e3143323968011ca300f725.png)
一、实训背景随着电子技术的不断发展,单片机作为嵌入式系统中的核心部件,得到了广泛应用。
定时器作为单片机的重要功能模块,能够实现定时、计数等功能,是单片机应用系统设计的关键技术之一。
为了提高学生的单片机应用能力,本次实训选取了基于51单片机的定时器应用作为实训内容。
二、实训目的1. 掌握51单片机定时器的基本原理和工作方式;2. 学会使用定时器实现定时、计数等功能;3. 培养学生动手实践能力和解决实际问题的能力;4. 提高学生对单片机应用系统的设计水平。
三、实训内容本次实训主要涉及以下内容:1. 51单片机定时器原理及工作方式;2. 定时器初始化编程;3. 定时器中断编程;4. 定时器应用实例:LED流水灯控制。
四、实训步骤1. 学习51单片机定时器原理及工作方式,掌握定时器的工作模式、定时器计数范围等参数;2. 编写定时器初始化程序,包括定时器模式选择、计数初值设置等;3. 编写定时器中断服务程序,实现定时功能;4. 编写LED流水灯控制程序,实现定时器中断触发LED流水灯效果;5. 将程序烧录到单片机中,进行实验验证。
五、实训结果与分析1. 定时器初始化编程:根据实训要求,设置了定时器模式、计数初值等参数,实现了定时器定时功能;2. 定时器中断编程:编写了定时器中断服务程序,实现了定时器中断触发功能;3. LED流水灯控制:通过定时器中断触发,实现了LED流水灯效果,验证了定时器应用实例的正确性。
在实训过程中,遇到以下问题及解决方法:1. 定时器计数初值设置错误:通过查阅资料,了解了定时器计数初值的计算方法,正确设置了计数初值;2. 定时器中断服务程序编写错误:通过分析程序,发现中断服务程序中存在逻辑错误,修改后程序运行正常。
六、实训心得通过本次实训,我深刻认识到以下内容:1. 定时器在单片机应用系统中的重要作用,掌握了定时器的基本原理和工作方式;2. 编程过程中,要注重代码的可读性和可维护性,提高编程效率;3. 在遇到问题时,要善于查阅资料,分析问题原因,并采取有效措施解决问题;4. 实训过程中,要注重理论与实践相结合,提高动手实践能力。
单片机定时器实验报告
![单片机定时器实验报告](https://img.taocdn.com/s3/m/64b30a6a905f804d2b160b4e767f5acfa1c783e5.png)
单片机定时器实验报告单片机定时器实验报告概述:单片机是一种集成电路,具有微处理器核心,用于控制和执行各种任务。
在嵌入式系统中,单片机的定时器是一个重要的组件,用于生成精确的时间延迟和周期性的信号。
本实验旨在通过使用单片机的定时器模块,学习和掌握定时器的基本原理和应用。
实验目的:1. 理解单片机定时器的工作原理;2. 掌握定时器的基本配置和使用方法;3. 实现定时器产生精确的时间延迟和周期性的信号。
实验器材:1. 单片机开发板;2. USB数据线;3. 电脑。
实验步骤:1. 连接单片机开发板和电脑,确保开发板与电脑正常通信;2. 打开开发板的开发环境软件,创建一个新的工程;3. 在工程中选择定时器模块,并进行基本配置,如选择定时器模式、预分频系数等;4. 编写程序代码,实现定时器功能。
可以选择定时产生一个精确的时间延迟,或者产生一个周期性的信号;5. 将程序代码下载到单片机开发板中,并运行程序;6. 观察实验结果,验证定时器的工作是否符合预期。
实验结果:经过实验,我们成功实现了单片机定时器的功能。
通过设置定时器的工作模式和预分频系数,我们可以生成精确的时间延迟和周期性的信号。
实验结果与预期一致,证明了定时器的可靠性和准确性。
实验总结:通过本次实验,我们深入了解了单片机定时器的原理和应用。
定时器作为嵌入式系统中的重要组件,具有广泛的应用前景。
掌握定时器的基本配置和使用方法,对于开发嵌入式系统和实现各种功能非常重要。
通过实验,我们不仅学到了理论知识,还掌握了实际操作的技巧和经验。
然而,单片机定时器的应用不仅仅局限于时间延迟和周期性信号的生成。
在实际工程中,定时器还可以用于测量脉冲宽度、频率计数、PWM波形生成等。
因此,我们在以后的学习和工作中,应该进一步探索和应用定时器的其他功能,以满足不同场景下的需求。
总之,单片机定时器是嵌入式系统中不可或缺的组件之一。
通过本次实验,我们对定时器的原理和应用有了更深入的了解。
单片机定时器设计报告
![单片机定时器设计报告](https://img.taocdn.com/s3/m/79c4199648d7c1c709a14595.png)
第一章绪论丄1.1系统背景♦ 1.1.1单片机的介绍单片微型计算机简称单片机,是典型的嵌入式微控制器,常用英文字母的缩写MCU 表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
IVTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬锻。
单片机乂称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理及结构的最佳选择。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。
一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!♦ 1.1.2单片机的应用U前单片机渗透到我们生活的各个领域,儿乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,汁算机的网络通讯及数据传输,丄业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。
因此,单片机的学习、开发及应用将造就一批计算机应用及智能化控制的科学家、工程师。
基于单片机的定时器设计
![基于单片机的定时器设计](https://img.taocdn.com/s3/m/2c618ad5dc88d0d233d4b14e852458fb770b389d.png)
基于单片机的定时器设计1.引言定时器是一种非常常见的电子设备,用于测量和控制时间。
在嵌入式系统中,定时器通常由单片机来实现。
单片机是一种高度集成的微型计算机,拥有处理器、存储器和输入输出设备。
本文将介绍基于单片机的定时器设计,并进行详细探讨。
2.单片机定时器的概念单片机定时器是单片机内部的一个功能模块,用于生成定时的脉冲信号。
通过控制定时器的设置,可以实现各种不同的定时功能,如时间测量、延时控制、周期性信号生成等。
在控制系统中,定时器的应用广泛,对于实时控制和时间精度要求较高的场景尤为重要。
3.单片机定时器的工作原理单片机定时器通常由计数器和预分频器组成。
计数器用于计数,每计数到一个特定的值,就会产生一个中断或输出脉冲。
预分频器用于控制计数器的计数速度,通过调整预分频器的设置,可以实现不同的计数速度和定时周期。
4.单片机定时器的应用单片机定时器广泛应用于各种场景中,如通信设备、工业自动化、仪器仪表等。
在通信设备中,定时器用于生成各种调制解调信号、时钟信号等。
在工业自动化中,定时器用于周期性的控制任务,如定时采样、定时测量等。
在仪器仪表中,定时器用于测量和显示时间,并和其他功能模块进行协调。
5.单片机定时器的设计要点在进行单片机定时器设计时,需要注意以下几个要点:5.1确定定时器的应用需求根据实际的应用需求,选择适当的定时器类型和工作模式。
不同类型的单片机定时器提供了不同的功能和参数设置,需要根据具体的应用场景进行选择。
5.2设置定时器的计数值和预分频器根据应用的时间精度要求和计数周期,设置合适的计数值和预分频器。
计数值和预分频器之间存在一定的数学关系,需要进行计算和调整。
5.3配置定时器的工作模式和中断根据应用的实际需要,选择合适的定时器工作模式和中断方式。
定时器可以工作在单次触发模式和周期性触发模式,可以选择中断方式或输出脉冲方式。
5.4编写相应的程序控制定时器通过单片机的编程,用相应的指令和函数来控制定时器的工作。
基于单片机实现的定时器设计
![基于单片机实现的定时器设计](https://img.taocdn.com/s3/m/1d69485178563c1ec5da50e2524de518974bd37f.png)
基于单片机实现的定时器设计一、定时器的基本原理定时器的核心思想是通过对时钟信号进行计数来实现定时功能。
在单片机中,通常使用内部的计数器来完成这一任务。
计数器会在每个时钟周期内递增或递减,当计数值达到预设值时,就会产生定时中断或触发相应的输出。
为了实现准确的定时,需要考虑时钟源的精度和稳定性。
单片机的时钟源可以是内部振荡器,也可以是外部晶振。
外部晶振通常能够提供更高的精度和稳定性,但会增加硬件成本和设计复杂度。
二、单片机的选择在选择用于实现定时器的单片机时,需要考虑多个因素。
首先是单片机的性能,包括处理速度、存储容量和接口资源等。
其次是成本和开发难度,对于一些简单的定时应用,可以选择成本较低、开发容易的单片机;而对于复杂的系统,则可能需要性能更强的单片机。
常见的单片机系列如 51 单片机、STM32 单片机等都具备实现定时器的能力。
51 单片机是经典的 8 位单片机,具有简单易用的特点;STM32 单片机则是 32 位单片机,功能更为强大,适用于更复杂的应用场景。
三、硬件设计硬件设计主要包括单片机最小系统的搭建和定时器相关的外围电路。
单片机最小系统通常包括电源电路、复位电路和时钟电路。
电源电路为单片机提供稳定的工作电压,复位电路用于在系统启动时将单片机初始化到一个已知状态,时钟电路则为单片机提供时钟信号。
对于定时器的外围电路,如果需要输出定时信号来控制外部设备,可以添加驱动电路和接口电路。
例如,如果要控制一个电机的转动时间,可以使用继电器或晶体管来驱动电机,并通过单片机的 GPIO 口与驱动电路连接。
四、软件设计软件设计是实现定时器功能的关键部分。
首先需要对单片机进行初始化,包括设置时钟源、配置定时器的工作模式和预分频系数等。
定时器的工作模式通常有多种选择,如定时模式、计数模式等。
在定时模式下,可以设置定时器的定时周期;在计数模式下,可以通过外部脉冲来控制计数值。
预分频系数用于对时钟信号进行分频,以实现不同精度的定时。
单片机定时器-计数器实验总结
![单片机定时器-计数器实验总结](https://img.taocdn.com/s3/m/a93e3c98a1116c175f0e7cd184254b35eefd1aa8.png)
单片机定时器-计数器实验总结单片机定时器/计数器实验总结篇一:单片机实验之定时器计数器应用实验一一、实验目的1、掌握定时器/计数器定时功能的使用方法。
2、掌握定时器/计数器的中断、查询使用方法。
3、掌握Prteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。
二、设计要求1、用Prteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,在P1.0口线上产生周期为200μS的连续方波,在P1.0口线上接示波器观察波形。
2、用Prteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,在P1.1口线上产生周期为240μS的连续方波,在P1.1口线上接示波器观察波形。
三、电路原理图六、实验总结通过这次实验,对定时器/计数器的查询工作方式有了比较深刻的理解,并能熟练运用。
掌握定时器/计数器的中断、查询使用方法。
对于思考题能够运用三种不同思路进行编程。
七、思考题1、在P1.0口线上产生周期为500微秒,占空比为2:5的连续矩形波。
答:程序见程序清单。
四、实验程序流程框图和程序清单1、以查询方式工作,在P1.0 RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #02H MV TH0, #9CH MV TL0, #9CH SETB TR0 LP: JNB TF0, LP CLR TF0 CPL P1.0 AJMP LP END2、以中断方式工作,在P1.1 RG 0000H START: LJMP MAIN RG 000BH LJMP TTC0 RG 0100H MAIN: MV TMD, #02H MV TH0, #88H MV TL0, #88H SETB EA SETB ET0 SETB TR0 HERE: LJMP HERE RG 0200H TTC0: CPL P1.1 RETI END3、在P1.0口线上产生周期为500微秒,占空比为2:5的连续矩形波 RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #20H MV TH1, #38H MV TL1, #38H MV TH0, #0F6H MV TL0, #14H LP1: SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CLR TR1 CPL P1.0 SETB TR0 LP3: JNB TF0, LP3 MV TH0, #0F6H MV TL0, #14H CLR TF0 CLR TR0 CPL P1.0 LJMP LP1 END RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #20H MV TH1, #38H MV TL1, #38H MV TH0, #0F0H MV TL0, #0CH SETB TR0 LP1: SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CLR TR1 CPL P1.0 SETB TR0 LP3: JNB TF0, LP3 CLR TF0 MV TH0, #0F0H MV TL0, #0CH CPL P1.0 LJMP LP1 END RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #00H LP1: MV TH1, #0F9H MV TL1, #18H SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CPL P1.0 MV TH1, #0F6H MV TL1, #14H LP3: JNB TF1, LP3 CLR TF1 CPL P1.0 LJMP LP1 END五、实验结果(波形图)篇二:单片机实验-定时器计数器应用实验一定时器/计数器应用实验一一、实验目的和要求1、掌握定时器/计数器定时功能的使用方法。
单片机实验三 定时器实验
![单片机实验三 定时器实验](https://img.taocdn.com/s3/m/860fc442e45c3b3567ec8b6d.png)
实验三:定时器实验一、实验要求实验目的:了解MCS-51单片机中定时器/计数器的基本结构、工作原理和工作方式,掌握工作在定时器模式下的编程方法。
实验内容:设单片机的晶振频率f=12Mhz,使用T0定时100ms,在p1.2引脚产生周期为200ms的方波信号,并通过示波器观察P1.2的输出波形。
二、实验原理定时器和外部计数方式选择位C/TC/T=0为定时器方式,采用晶振频率的1/12作为计数器的计数脉冲,几对及其周期进行计数。
若选择12MHz晶振,则定时器的计数频率为1MHz。
C/T=1为计数方式,采用外部引脚的输入脉冲作为计数脉冲。
当T0或T1输入发生由高到低的负跳变时,计数器加1,其最高计数频率为晶振频率的1/24。
工作方式2当TMOD的M1、M0未为10是,计时器/计数器工作在工作方式2.当方式0、方式1用于循环重复定时计数时,计数器全部为0,下一次计数还得重新装入计数初值,这样编程麻烦,而且影响定时时间的精度。
方式2是能自动重新装入计数初值的8位计数器,可以解决这个问题。
方式2把16位计数器分成两个8为的计数器,低8为作为计数器使用,高8位用以保存计数初值,当低8位计数产生溢出是,将TF0或TF1置1,同时又将保存在高8位的计数初值重新自动装入低8位计数器汇总,又继续计数,循环重复。
计数初值X=2^8-t*f osc/12;其中t为定时时间。
初试化编程是,TH0和TL0(或TH1和TL1)都装入次X值。
方式2适用于作较为精确的脉冲信号发生器,尤其适用于串口波特率发生器。
三、程序设计1、程序流程图图 1 定时器实验流程图2、程序代码ORG 0100HMAIN: MOV A, 0HMOV TMOD, #61H ;外部引脚脉冲计数,工作方式2MOV TL1, #0FFHMOV TH1, #0FFH ;计数1次,以CP1.0为脉冲连接计数器CPL P1.0SETB TR1;LP1: CPL P1.2LP2: MOV TL0, #0B0HMOV TH0, #3CH ;一次计数50ms,P1.0的脉冲周期为100msSETB TR0LP3: JBC TF0, LP4SJMP LP3LP4: CPL P1.0JBC TF1, LP1SJMP LP2END四、程序验证1、在Proteus中连接电路图如下:图 2 定时器实验电路图2、将程序导入A T89C523、按键观察电路中示波器波形:图 3 示波器上显示的周期为200ms的方波示波器1格为50ms,故产生的波形周期为200ms。
C单片机定时器及数码管控制实验报告
![C单片机定时器及数码管控制实验报告](https://img.taocdn.com/s3/m/53ca142549d7c1c708a1284ac850ad02de8007a0.png)
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)//主函数其他处理}五、实验效果:经过上述步骤的硬件连接和软件编程,当单片机开始运行后,数码管将开始显示时间。
使用定时器延时单片机课程设计报告
![使用定时器延时单片机课程设计报告](https://img.taocdn.com/s3/m/0a145fb869dc5022aaea00f3.png)
目录1. 总体设计方案 (2)1.1. 设计思路 (2)1.1.1.设计目的 (2)1.1.2.设计任务和内容 (2)1.1.3.芯片简介 (2)1.2. 设计方框图 (4)2. 设计原理分析 (6)2.1. 定时器工作方式0分析与计算 (6)2.2. 电路模块 (7)2.2.1.LED灯显示模块 (7)2.2.1.复位电路 (7)2.2.2.晶振电路 (8)3. 系统调试 (8)4. 课程设计总结 (8)附录 (8)附录1:程序清单 (9)附录2:电路设计总图 (11)参考文献 ................................................................. 错误!未定义书签。
1.总体设计方案1.1.设计思路1.1.1.设计目的(1)加深对单片机原理、数字电路、模拟电路等课程的理解。
(2)考察近几年来所学的软硬件实际操作能力。
(3)应聘工作时可以当做代表作进行展示。
(4)当作实际制作的作品展示。
1.1.2.设计任务和内容设计任务单片机采用AT89C51芯片,使用8个发光二极管,开始时接在单片机P1端口的P1.7亮,用定时器延时100ms后P1.6亮,如此向右移动,移到最右端P1.0亮后,又回到最左端重新开始向右移动,不断循环。
设计内容系统的硬件和软件设计,在Protues软件上仿真1.1.3.芯片简介AT89C 51单片机简介AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章绪论1.1系统背景◆ 1.1.1单片机的介绍单片微型计算机简称单片机,是典型的嵌入式微控制器,常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。
一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!◆ 1.1.2单片机的应用目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域1.2多功能家用定时器◆ 1.2.1多功能家用定时器的概述人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。
1876年,英国外科医生索加取得一项定时装置的专利,用来控制煤气街灯的开关。
它利用机械钟带动开关来控制煤气阀门。
定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多,家用电器都安装了定时器来控制开关或工作时间。
◆ 1.2.2多功能家用定时器的功能与实现步骤1.能够调整数字钟、定时开启、关闭时间的显示当时间分别显示小时、分钟状态时,按11键,实现将当前显示的小时或分钟减1;按12键时,实现将当前显示的小时或分钟加1。
2.能过实现三路定时通过按10键来选择显示的时间。
从而实现三路定时的开启与关闭,实现三路定时功能。
3.既能够实现按键输值,也可用加减键来对其调时当在小时状态时,不管是在数字钟还是定时状态,都可以通过按键来对其调时,同时此时如果觉得时间按错还可以通过加减键进行调整时间。
4.能够时间倒计时的秒表功能当一开始接通是,显示的是60秒倒计时功能,这一功能有助于对准确时间更好的把握。
5.能够显示今天心情当在时钟状态时,按加减键,可显示出今天心情。
如果按减号键时,显示sad,并且LED灯全灭;如果按加号键时,显示fine,并且灯全亮。
第二章系统电路设计2.1 系统总体设计框架结构总体结构图如下:图2.1总体结构图按键输入电路:对定时器输入定时时间、时钟时间,并对其调整。
时钟电路:给单片机一个时钟信号,让其工作。
复位电路:使单片机为初始状态,并从初态开始工作。
LED显示电路:表明定时器的工作状态。
数码管显示电路:显示数字钟时间或定时时间或心情。
继电器电路:是用较小的电流去控制较大电流的一种“自动开关”。
2.2 系统硬件单元电路设计2.2.1 时钟电路设计时钟电路对单片机是不可缺的,单片机的每个功能都要以时钟电路为基础工作。
单片机内部自带一个时钟电路,外部接入定时控制元件即可构成一个稳定的自激振荡器。
其中机器周期共有12个振荡脉冲周期,因此,机器周期是时钟周期的12倍。
本实验中时钟电路中使用的晶体是12MHz,则时钟周期为(1/12)us,机器周期为1us。
实验图如下:时钟电路图:图2.2时钟电路图◆ 2.2.2 复位电路设计复位操作有上电自动复位、按键电平复位和外部脉冲复位三钟方式,本次实验用的是按键电平复位,利用电容的充放电公式来选择所需的电容、电阻,能保证复位信号高电平持续时间大于2个机器周期。
电路图如下:复位电路图:图2.2按键电平复位◆ 2.2.3按键电路设计本课题要用数码管显示数字钟、定时时间。
这就需要键盘来设定,键盘可以分为独立连接式和矩阵式。
本实验用的是矩阵式。
为了减少所以的I/O口,利用三——八译码器来实现12个键盘的连接。
对于这种矩阵式的键盘连接,扫描时依次将行线置为低电平,即在置某根行线为低电平时,其它都线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
注意在按键时一定要调延时子程序来消除抖动。
矩阵式键盘如下所示:按键电路图:图2.3按键电路◆ 2.2.4 LED 显示电路设计本次实验中要用发光二极管显示状态。
由下图知发光二极管阴极以经接地,当其阳极为高电平时,二极管就发光显示所处状态。
LED 显示电路图:图2.4 LED 显示电路图◆ 2.2.5 数码管显示电路设计实验中所用的数码管为共阴极数码管,当给其引脚加入高电平时,数码管中对应的那一段就亮。
图2.6为外部显示图,其内部结构如下:图2.5共阴极数码管内部结构图2.6共阴极数码管显示2.2.6 继电器电路设计继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。
故在电路中起着自动调节、安全保护、转换电路等作用。
图2.7继电器电路2.3系统硬件总电路总电路图由时钟电路、复位电路、继电器电路、键盘电路、LED 显示电路、数码管显示电路组成来实现定时功能。
其中四个数码管为共阴极的数码管。
74LS138为3—8译码器,74LS07为输出缓冲器,74LS00为与非门,7805为三端稳压器,电容的作用基本都是滤波来减少噪声对实验的影响。
电路图如下:图2.8总电路图第三章 系统软件设计3.1 系统软件流程图3.1.1主程序流程图主程序在执行时,通过单片机内部中断对程序不断的扫描判断、刷新显示,当有键按下时,将数字钟中的时间与定时时间相比较,然后根据比较程序显示状态,并且还要延时消除抖动,之后进行按键处理,从而显示不同的状态,如此周期循环。
3.1.2子程序流程图1.延时子程序流程图此延时子程序在实验中被主程序调用,当有按键按下时,调用此程序可以达到消除振动的作用,避免发光二极管一直闪烁,此程序延时时间不能太短,要不然不能很好的起到消振作用,也不能够太长,避免按键很长时间后才反应。
并且因为此程序用C语言编程,延时时间没有汇编语言精准。
2.比较子程序流程图此程序通过将定时时间不断与数字钟时间相比较来表明定时器是否开启。
当LED7亮的时候表明定时开启;当LED7灭的时候表明定时关闭。
3.刷新缓冲子程序流程图此程序为刷新缓冲区流程图,其中F为状态量,当F为不同的值时,数码管显示不同的状态,同时此程序不断的刷新来显示此状态下的数码管显示的值。
4.按键处理子程序流程图此为按键处理子程序流程图,主程序在不停的扫描中,每当有按键按下时,就会根据状态量STATE的值跳转到此程序进行处理,此程序中还包含显示时所需的状态量的定义和加减键及键值的输入,按不同的键实现不同的功能。
5.LED显示子程序流程图此为LED显示子程序流程图,显示当STATE这个状态量为不同的值时,表明不同的状态,而这种状态通过不同的的发光二极管显示出来。
这对于判断实验的正确性提供了不可缺少的帮助。
6.数码管显示子程序流程图此为数码管显示的流程图,此程序与刷新缓冲区流程图相似,都与状态量F 相关。
不同的的F值显示不同的状态所对应的数值。
3.1.3中断程序流程图1.T0中断程序流程图此图为T0中断程序流程图,用于计数器的计时,一直执行中。
当60秒到时,分加1,秒单元清零,当60分到时,时家1,分单元清零。
24时到时,时单元清零。
2. T1中断程序流程图此为T1中断流程图,用于键值判断和中断扫描,它一直保持着扫描按键判断是否有键按下,然后让按键处理子程序能准确的进行执行。
3.2 系统程序设计3.2.1系统主程序void main(void){P1=0x00;EA=1; //CPU允许中断TMOD |=0x01;//定时器0计时50ms in 12M crystal 定时器T0选择方式0工作其前七位没影响,开始是什么还是什么,最后一位变成0=方式0TH0=0x3C;TL0=0xB0; //初值0011 1100 1011 0000 65535-15536=49999 50msET0=1; TR0=1; //开启T0TMOD |=0x10; //定时器1用于动态扫描T1TH1=0xFa; //初值65535-64240=1295 0.13msTL1=0xF0;ET1=1; TR1=1; //开启T1while(1){ RefreshTab();LED_Display();if(!L1||!L0){ compare();Delay(200);Key_Process();} //只要有键按下,就} 比较时间,延时后进行按键处理。
}◆ 3.2.2定时中断子程序/* 定时器0用于数字钟的计时*/ void Timer0(void) interrupt 1{TH0=0x3C; TL0=0xB0; count++;//重新赋值50ms溢出if(count==10) LED1=~LED1; //LED1半秒亮if (count==20) { count=0;second++; //秒加1 20*50=1Sif(second==60){ second=0;minute++; //分加1if(minute==60) {minute=0;hour++; //时加1if(hour==24){ hour=0; } //小时到24时,清零}}}}/* 定时器1中断扫描显示+键值判断*/void Timer1(void) interrupt 3{TH1=0xFa; TL1=0xF0; 定时2ms显示下一个数码管switch(num){ case 0: P2=0x0f; if(!L1)Keyno=1; if(!L0)Keyno=10; SEG_Display();break;//当num为0时,选择Y0,当按下L1时,键值时1;当按下L0时,键值是10,显示case 1: P2=0x1f; if(!L1)Keyno=4;if(!L0)Keyno=7; SEG_Display();break;//当num为0时,选择Y1,当按下L1时,键值时4;当按下L0时,键值是7,显示case 2: P2=0x2f;if(!L1)Keyno=3;if(!L0)Keyno=12;SEG_Display();break;//当num为0时,选择Y2,当按下L1时,键值时3;当按下L0时,键值是12,显示case 3: P2=0x3f;if(!L1)Keyno=5;if(!L0)Keyno=8;SEG_Display();break;//当num为0时,选择Y3,当按下L1时,键值时5;当按下L0时,键值是8,显示case 4: P2=0x4f;if(!L1)Keyno=2;if(!L0)Keyno=11;SEG_Display();break;//当num为0时,选择Y4,当按下L1时,键值时2;当按下L0时,键值是11,显示case 5: P2=0x5f;if(!L1)Keyno=6;if(!L0)Keyno=9;SEG_Display();break;//当num为0时,选择Y5,当按下L1时,键值时6;当按下L0时,键值是9,显示default: break;}num++;if(num==6)num=0;//当num为6时清零}◆ 3.2.3时间比较子程序void compare(void){if(sg[0]==sg[4]&&sg[1]==sg[5]&&sg[2]==sg[6]&&sg[3]==sg[7]&&flog==1) LED7=1;//当数字钟时间与一路定时的开启时间相同时,LED7亮if(sg[0]==sg[8]&&sg[1]==sg[9]&&sg[2]==sg[10]&&sg[3]==sg[11]&&flog==1) LED7=0;//当数字钟时间与一路定时的关闭时间相同时,LED7灭if(sg[0]==sg[12]&&sg[1]==sg[13]&&sg[2]==sg[14]&&sg[3]==sg[15]&&flog==1) LED7=1;//当数字钟时间与二路定时的开启时间相同时,LED7亮if(sg[0]==sg[16]&&sg[1]==sg[17]&&sg[2]==sg[18]&&sg[3]==sg[19]&&flog==1) LED7=0;//当数字钟时间与二路定时的关闭时间相同时,LED7灭if(sg[0]==sg[20]&&sg[1]==sg[21]&&sg[2]==sg[22]&&sg[3]==sg[23]&&flog==1) LED7=1;//当数字钟时间与三路定时的开启时间相同时,LED7亮if(sg[0]==sg[24]&&sg[1]==sg[25]&&sg[2]==sg[26]&&sg[3]==sg[27]&&flog==1) LED7=0;//当数字钟时间与三路定时的关闭时间相同时,LED7灭}◆ 3.2.4延时子程序void Delay( uint x) //自定义延时约0.1ms ,大约为120*x{uint t;while(--x)for(t=0;t<120;t++);}◆ 3.2.5刷新缓冲区子程序void RefreshTab(void){ if(F==-2) {XQ[0]=Tab[kx[0]]; XQ[1]=Tab[kx[1]]; XQ[2]=Tab[kx[2]]; XQ[3]=Tab[kx[3]];}//当F=-2时,数码管刷新显示今天心情if(F==-1) {MB[0]=Tab[second/10]; MB[1]=Tab[second%10];}//当F=-1时,数码管刷新显示倒计时的秒表if(F==0) {TimeTab[0]=Tab[sg[0]];TimeTab[1]=Tab[sg[1]];TimeTab[2]=Tab[sg[2]]; TimeTab[3]=Tab[sg[3]];}//当F=0时,数码管刷新显示数字钟时间if(F==1) {STab[0]=Tab[sg[4]]; STab[1]=Tab[sg[5]];STab[2]=Tab[sg[6]];STab[3]=Tab[sg[7]];} //当F=1时,数码管刷新显示一路定时开启时间if(F==2) {FTab[0]=Tab[sg[8]]; FTab[1]=Tab[sg[9]];FTab[2]=Tab[sg[10]];FTab[3]=Tab[sg[11]];} //当F=2时,数码管刷新显示一路定时关闭时间if(F==3){STab1[0]=Tab[sg[12]];STab1[1]=Tab[sg[13]];STab1[2]=Tab[sg[14]];STab1[3]=Tab[sg[15]];}//当F=3时,数码管刷新显示二路定时开启时间if(F==4) {FTab1[0]=Tab[sg[16]]; FTab1[1]=Tab[sg[17]];FTab1[2]=Tab[sg[18]];FTab1[3]=Tab[sg[19]];}//当F=4时,数码管刷新显示二路定时关闭时间if(F==5) {STab2[0]=Tab[sg[20]]; STab2[1]=Tab[sg[21]];STab2[2]=Tab[sg[22]];STab2[3]=Tab[sg[23]];}//当F=5时,数码管刷新显示三路定时开启时间if(F==6) {FTab2[0]=Tab[sg[24]]; FTab2[1]=Tab[sg[25]];FTab2[2]=Tab[sg[26]];FTab2[3]=Tab[sg[27]];}//当F=6时,数码管刷新显示三路定时关闭时间}3.2.6按键处理子程序void Key_Process(void)//根据不同状态量STA TE的值,在不同的状态按不同的键实现不同的功能,能够按键输值时刻别忘时间显示的范围{ switch(STATE){case 0:if(Keyno==11){kx[0]=5;kx[1]=10;kx[2]=11;kx[3]=15;h=0;}if(Keyno==12){kx[0]=12;kx[1]=1;kx[2]=13;kx[3]=14;h=1;} //心情状态if(Keyno==10){STATE=2;F=0;} break;case 2: if(Keyno<10){sg[n]=Keyno;n++;if(sg[0]>2||(sg[0]==2&&sg[1]>4))sg[0]=sg[1]=0;if(sg[2]>5)sg[2]=sg[3]=0;if(n>3)n=4;} //用可以改变按键计数器初值if(Keyno==11){sg[1]=sg[1]+1;if(sg[0]==2&&sg[1]==4)sg[0]=sg[1]=0;}//加1键if(Keyno==12){sg[1]=sg[1]-1;if(sg[0]!=0&&sg[1]==-1){sg[0]=sg[0]-1;sg[1]=9;}if(sg[0]==0&&sg[1]==-1){sg[0]=2;sg[1]=3;}}//减1键,时间设定范围if(Keyno==10){STATE=3;} break; //case3:if(Keyno==11){sg[3]=sg[3]+1;if(sg[3]>9){sg[2]=sg[2]+1;sg[3]=0;}if(sg[2]==6) sg[2]=sg[3]0;} //加1键if(Keyno==12){sg[3]=sg[3]-1;if(sg[2]!=0&&sg[3]==-1){sg[2]=sg[2]-1;sg[3]=9;}if(sg[2]==0&&sg[3]==-1){sg[2]=5;sg[3]=9;}} //减1键if(Keyno==10){STA TE=4;F=1;} break;case 4: if(Keyno<10){sg[n]=Keyno;n++; if((sg[4]==2&&sg[5]>4))sg[4]=sg[5]=0;if(sg[6]>5)sg[6]=sg[7]=0;if(n>7)n=8;}if(Keyno==11){sg[5]=sg[5]+1;if(sg[5]==6)sg[4]=sg[5]=0;}if(Keyno==12){sg[5]=sg[5]-1;if(sg[4]!=0&&sg[5]==-1){sg[4]=sg[4]-1;sg[5]=9;}if(sg[4]==0&&sg[5]==-1){sg[4]=2;sg[5]=3;}}if(Keyno==10){STA TE=5;} flog=0; break;case5:if(Keyno==11){sg[7]=sg[7]+1;if(sg[7]>9){sg[6]=sg[6]+1;sg[7]=0;}if(sg[6]==6)sg[6]=sg[7]=0;}if(Keyno==12){sg[7]=sg[7]-1;if(sg[6]!=0&&sg[7]==-1){sg[6]=sg[6]-1;sg[7]=9;}if(sg[6]==0&&sg[7]==-1){sg[6]=5;sg[7]=9;}}if(Keyno==10){flog=1;STATE=6;F=2;} break; //case 6: if(Keyno==10){STA TE=7;}if(Keyno<10){sg[n]=Keyno;n++; if((sg[8]==2&&sg[8]>4))sg[8]=sg[9]=0;if(sg[10]>5)sg[10]=sg[11]=0;if(n>11)n=12;}if(Keyno==11){sg[9]=sg[9]+1;if(sg[5]==6)sg[8]=sg[9]=0;}if(Keyno==12){sg[9]=sg[9]-1;if(sg[8]!=0&&sg[9]==-1){sg[8]=sg[8]-1;sg[9]=9;}if(sg[8]==0&&sg[8]==-1){sg[8]=2;sg[9]=3;}} flog=0; break;case7:if(Keyno==11){sg[11]=sg[11]+1;if(sg[11]>9){sg[10]=sg[10]+1;sg[11]=0;}if(sg[10]==6) sg[10]=sg[11]=0;}if(Keyno==12){sg[11]=sg[11]-1; if(sg[10]!=0&&sg[11]==-1){sg[10]=sg[10]-1;sg[11]=9;} if(sg[10]==0&&sg[11]==-1){sg[10]=5;sg[11]=9;}}if(Keyno==10){flog=1;STATE=8;F=3;} break;case 8: if(Keyno<10){sg[n]=Keyno;n++;if(sg[12]>2||(sg[12]==2&&sg[13]>4))sg[12]=sg[13]=0;if(sg[14]>5)sg[14]=sg[15]=0;if(n>15)n=16;} //用可以改变按键计数器初if(Keyno==11){sg[13]=sg[13]+1;if(sg[12]==2&&sg[13]==4)sg[12]=sg[13]=0;}if(Keyno==12){sg[13]=sg[13]-1;if(sg[12]!=0&&sg[13]==-1){sg[12]=sg[12]-1;sg[13]=9;}if(sg[12]==0&&sg[12]==-1){sg[12]=2;sg[13]=3;}} if(Keyno==10){STATE=9;} flog=0; break; //case9: if(Keyno==11){sg[15]=sg[15]+1;if(sg[15]>9){sg[14]=sg[14]+1;sg[15]=0;}if(sg[14]==6)sg[14]=sg[15]=0;}if(Keyno==12){sg[15]=sg[15]-1; if(sg[14]!=0&&sg[15]==-1){sg[14]=sg[14]-1;sg[15]=9;} if(sg[14]==0&&sg[15]==-1){sg[14]=5;sg[15]=9;}}if(Keyno==10){flog=1;STATE=10;F=4;} break;case 10: if(Keyno<10){sg[n]=Keyno;n++;if(sg[16]>2||(sg[16]==2&&sg[17]>4))sg[16]=sg[17]=0;if(sg[18]>5)sg[18]=sg[19]=0;if(n>19)n=20;} //用可以改变按键计数if(Keyno==11){sg[17]=sg[17]+1;if(sg[16]==2&&sg[17]==4)sg[16]=sg[17]=0;}.if(Keyno==12) {sg[17]=sg[17]-1;if(sg[16]!=0&&sg[17]==-1){sg[16]=sg[16]-1;sg[17]=9;} if(sg[16]==0&&sg[17]==-1){sg[16]=2;sg[17]=3;}} if(Keyno==10){STATE=11;} flog=0; break;//case11:if(Keyno==11){sg[19]=sg[19]+1;if(sg[19]>9){sg[18]=sg[18]+1;sg[19]=0;}if(sg[18]==6)sg[18]=sg[19]=0;}if(Keyno==12){sg[19]=sg[19]-1;if(sg[18]!=0&&sg[18]==-1){sg[18]=sg[18]-1;sg[19]=9;}if(sg[18]==0&&sg[19]==-1){sg[18]=5;sg[19]=9;}}if(Keyno==10){flog=1;STATE=12;F=5;} break;case 12:if(Keyno<10){sg[n]=Keyno;n++;if(sg[20]>2||(sg[10]==2&&sg[21]>4))sg[20]=sg[21]=0; if(sg[22]>5)sg[22]=sg[23]=0;if(n>23)n=24;}if(Keyno==11){sg[21]=sg[21]+1;if(sg[20]==2&&sg[21]==4)sg[20]=sg[21]=0;} if(Keyno==12){sg[21]=sg[21]-1;if(sg[20]!=0&&sg[21]==-1){sg[20]=sg[20]-1;sg[21]=9;} if(sg[20]==0&&sg[21]==-1){sg[20]=2;sg[21]=3;}} if(Keyno==10){STATE=13;} flog=0; break;//case13:if(Keyno==11){sg[23]=sg[23]+1;if(sg[23]>9){sg[22]=sg[22]+1;sg[23]=0;}if(sg[22]==6)sg[22]=sg[23]=0;}if(Keyno==12){sg[23]=sg[23]-1;if(sg[22]==0&&sg[23]==-1){sg[22]=5;sg[23]=9;}if(sg[23]!=0&&sg[24]==-1){sg[23]=sg[23]-1;sg[24]=9;}} if(Keyno==10){flog=1;STATE=14;F=6;} break;case 14: if(Keyno<10){sg[n]=Keyno;n++; if((sg[24]==2&&sg[25]>4))sg[24]=sg[25]=0;if(sg[26]>5)sg[26]=sg[27]=0;if(n>27)n=0;}if(Keyno==11){sg[25]=sg[25]+1;if(sg[25]==6)sg[24]=sg[25]=0;}if(Keyno==12){sg[25]=sg[25]-1;if(sg[24]!=0&&sg[25]==-1){sg[24]=sg[24]-1;sg[25]=9;} if(sg[24]==0&&sg[25]==-1){sg[24]=2;sg[25]=3;}} if(Keyno==10){STATE=15;} flog=0; break;case15:if(Keyno==11){sg[27]=sg[27]+1;if(sg[27]>9){sg[27]=sg[27]+1;sg[28]=0;}if(sg[26]==6)sg[26]=sg[27]=0;}if(Keyno==12){sg[27]=sg[27]-1;if(sg[26]==0&&sg[27]==-1){sg[26]=5;sg[27]=9;}if(sg[26]!=0&&sg[27]==-1){sg[26]=sg[26]-1;sg[27]=9;}} if(Keyno==10){flog=1;STATE=2;F=0;} break; //default: break;}}◆ 3.2.7数码管显示子程序void SEG_Display(void)//根据不同的F值,数码管来显示不同是时间{ if(F==-2) P0=XQ[num];if(F==-1) P0=MB[num];if(F==0) P0=TimeTab[num];//分别显示的是心情、秒表、数字钟if(F==1) P0=STab[num]; if(F==2) P0=FTab[num]; if(F==3) P0=STab1[num];//分别显示的是一路定时开启、关闭,二路定时开启时间if(F==4) P0=FTab1[num];if(F==5) P0=STab2[num];if(F==6) P0=FTab2[num];//分别显示的是二路关闭,三路开启、关闭时间}◆ 3.2.8 LED显示子程序void LED_Display(void){ switch(STATE){ case 0:if(h==0){LED3=0;LED6=0;LED7=0;}//心情不好时,灯全灭if(h==1) {LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;} break;//心情好时灯全部亮case 2:LED2=1;LED3=0;LED4=0;LED5=0;LED6=0;LED7=0;break;//数字钟的时钟状态case 3:LED2=0;LED3=1;break; case 4:LED2=1;LED3=0;LED4=1;break;//数字钟的分钟状态、一路定时开启的的时钟状态case 5:LED2=0;LED3=1;break; case 6:LED2=1;LED3=0;break;//一路定时开启的的分钟状态、一路定时关闭的时钟状态case 7:LED2=0;LED3=1;break; case 8:LED2=1;LED3=0;LED4=0;LED5=1;break;//二路路定时关闭的的分钟状态、二路定时开启的时钟状态case 9:LED2=0;LED3=1;break; case 10:LED2=1;LED3=0;LED4=0;break;//二路定时开启的的分钟状态、二路定时关闭的时钟状态case 11:LED2=0;LED3=1;break; case 12:LED2=1;LED3=0;LED5=0;LED6=1;break;//二路定时关闭的的分钟状态、三路路定时开启的时钟状态case 13:LED2=0;LED3=1;break; case 14:LED2=1;LED3=0;LED5=0;break;//三路定时开启的的分钟状态、三路定时关闭的时钟状态case 15:LED2=0;LED3=1;break; default: break;//三路定时关闭的的分钟状态}}第四章实验结果和分析4.1实验使用的仪器设备与元件◆ 4.1.1实验使用的仪器设备焊烙铁、能够给单片机烧入程序的电脑、电源4.1.2实验使用的元件如图所示4.2测试结果分析这次实验中,在自己没编写程序前,用同学给的基本程序,输入+5V后,检查电路板的焊接问题和数码管的好坏,接好后发现电路板是好的,首先显示秒表的发光二极管能够一直闪亮;其次就是显示电路通电标志是二极管也能够正常发亮;再就是数码管能够完整的显示,调加减键时,所有的数码管都能够显示正确的数据,这说明数码管是好的,焊接也问题。