当前位置:文档之家› 单片机定时器设计报告

单片机定时器设计报告

单片机定时器设计报告
单片机定时器设计报告

第一章绪论

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=方式0

TH0=0x3C;TL0=0xB0; //初值0011 1100 1011 0000 65535-15536=49999 50ms

ET0=1; TR0=1; //开启T0

TMOD |=0x10; //定时器1用于动态扫描T1

TH1=0xFa; //初值65535-64240=1295 0.13ms

TL1=0xF0;

ET1=1; TR1=1; //开启T1

while(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=1S

if(second==60){ second=0;minute++; //分加1

if(minute==60) {minute=0;hour++; //时加1

if(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后,检查电路板的焊接问题和数码管的好坏,接好后发现电路板是好的,首先显示秒表的发光二极管能够一直闪亮;其次就是显示电路通电标志是二极管也能够正常发亮;再就是数码管能够完整的显示,调加减键时,所有的数码管都能够显示正确的数据,这说明数码管是好的,焊接也问题。然后写完程序后,烧入自己的程序,再连接电路,所以的效果都与仿真中的效果相同,能够显示我所需的状态。

但是,就是当用银色发光二极管时,由于亮度太强,自己将其更改为另一种颜色,虽然这是一件比较简单的事,但这说明在焊电路板时,应该注意元件的选择并且明白元件的属性来减少调试中出现的问题。

结束语

对于本次课题----家用定时器的设计已经完成了,达到了自己预想中的效果了。定时器的选择上选择了4个数码管显示当前状态时间,LED显示目前状态,通过3×4的阵列式键盘来设定时间,数字钟、三路定时初始实现显示为0000,然后通过键盘来输入数字钟和定时器的时间,当设定好时间后,当定时器的时间

与数字钟时间第一次一样时,表明一路定时开始了,此时LED7变亮,当定时器时间再次与数字钟时间一样时,表明一路定时结束,同时LED7灯灭。

LED7表示是否处于定时状态。二路、三路与此类似。当定时器开启时,继电器常开变成常闭,成导通状态,动态数码管显示HELP YOU,定时器达到了定时效果,能够控制电风扇,台灯等等家用电器,具有一定的实用功能。

但是,在本设计自己也在软件程序上走了一点路,刚开始编写程序时,没有头绪,在同学帮忙讲解之后,自己编写了一路程序,数字钟,定时时间都是靠加减键来调的,这样觉得太过麻烦,并且在使用中如果一直用某几个键,会导致按键不灵的情况,因此想用其他九个键来实现键值的输入。刚开始时,自己编写程序是在按键处理中用按键的数乘以十再加再次按键的值,然后显示出来。这样,程序不麻烦,但是,遇到的问题就是,必须保证设的初值为零,并且按键中要注意不能多按,否则会导致将按的值直接与之前的值相加了。这是,这样编写程序的弊端。之后,我将程序中的时间的十位、个位分开用数组表示,然后再编写程序,这个程序编写时比较麻烦,因为时间的十位、个位都有一定的限制,需要编写程序来进行判断。并且这样一个时间要分四个部分,虽然麻烦,但是,设初值,与键值相加这两个问题解决,不过,仍旧不足的是,为了保证按的键值与显示的相符,必须使在按键时,按四下来显示,因为键值中没有零,所以应该先按1然后用减键来实现零。然后就是LED发光二极管的显示,我设置为当表示是时钟状态时,LED2亮,当表示是分钟状态时LED3亮,当为一路定时时,LED4亮,当为二路定时时,LED5亮,当为三路定时时,LED6亮。以此反光二极管来表明状态。这就是我在定时器是设计中编写程序的过程。

同时,老师说要我们创新,就是面对自己编写的定时器能够有自己的一点想法。同学们都在想办法写关于年月份,星期什么的。开始我并没什么特别想法,就想说制作一个倒计时的秒表。这个程序很简单,就是将数字钟中的秒钟显示出来,由于我们采用的是四个数码管,没有专门显示秒钟的。于是,就设置一个数组来开辟一个空间存放秒钟时间,然后,再通过刷新、按键处理子程序显示出来。就那样在一接通电源时,数码管上显示的就是倒计时的秒表。再就来就是自己觉得这没有什么,然后,突然看见自己手机上的晴天娃娃就突然想着用这个表示理性的定时器来显示一下自己感性的生活。就用它来表示晴天娃娃,显示今天的心情,由于只有四个数码管,因此我就编写了二个单词,fine—好sad—难过。当我心情好时,我的发光二极管全部亮,当我难过时,发光二极管全部灭来表明心情。这个程序不难,但是当看着灯全亮全灭时自己很开心,还有点激动。一直都特别想用二极管来摆一下特别好看的图形,然后按自己的想法发亮,总觉得那样的图形真实并且特别好看,看到有同学编出来的程序可以控制发光的形式还能放出音乐时,自己特别羡慕,我也想设计出一个属于自己的漂亮的图案。这个程序,显示心情,虽然简单,但是我很开心,因为就觉得这个定时器真的是我的。同时我相信这只是开始,。

通过这次实验,我学习到了我平时没有接触过的东西,特别是这个学习过程,就突然感觉自己终于把书本上的理论用到了生活中至少是与生活跟接近了。把这些知识运用到实际中去,对于做家用定时器硬件的时候有着很大的帮助,同时还培养了我的自学能力和独立思考能力。在调试过程中每当遇到问题的时候,都能通过自己的思考分析,一次又一次的实验最终能够完成。这对我也是一次很大的考验,能有这次锻炼的机会是我不可缺少的经历。

参考文献

[1] 张志建.严复思想研究[M]. 桂林:广西师范大学出版社,1989.

[2] 伍蠡甫.西方文论选[C].上海:上海译文出版社,1979.

[3] 李大伦.经济全球化的重要性[N]. 光明日报,1998-12-27,(3).

[4] 郭英德.元明文学史观散论[J]. 北京师范大学学报(社会科学版),1995(3).

[5] 刘伟.汉字不同视觉识别方式的理论和实证研究[D]. 北京:北京师范大学心理系,1998.

[6] 白秀水,刘敢,任保平. 西安金融、人才、技术三大要素市场培育与发展研究[R]. 西

安:陕西师范大学西北经济发展研究中心,1998.

单片机课程设计 简易计算器的设计

目录 摘要 (1) 绪论 (1) 1.设计要求及功能分析 (1) 1.1 设计要求 (1) 1.2 基本功能 (2) 2.设计方案 (2) 2.1 硬件部分设计方案 (2) 2.1.1 单片机部分 (2) 2.1.2 按键部分 (2) 2.1.3 显示部分 (2) 2.2 软件部分设计方案 (2) 3.系统的硬件总体设计 (4) 3.1 系统的总体硬件设计 (4) 3.2 键盘连接电路 (4) 3.3 显示屏连接电路 (5) 3.4 单片机芯片AT89C51 (6) 3.5 外接电路 (7) 4.系统的软件总体设计 (8) 4.1 键盘识别程序设计 (8) 4.2 显示程序 (11) 4.3 运算程序 (11) 5.元器件清单及程序清单 (12) 5.1 元器件清单 (12) 5.2 程序清单 (12) 6.软件仿真 (18) 6.1 仿真验证 (18) 6.2 性能分析 (20) 6.3 出现故障及其原因 (20) 6.4 解决方法 (20) 结论 (20) 参考文献 (21) 致谢 (21) 附录PCB图 (22)

简易计算器的设计 学生:李飞马鹏超舒宏超 指导老师:王孝俭 摘要:单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可,用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。单片机比专用处理器最适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。 关键词:单片机、计算器、控制电路、仿真。 绪论 设计要求掌握数码管移位动态扫描显示的编程方法,掌握矩阵扫描的编程方法,掌握数据在内部运算的编程方法。设计任务实现最大8位正整数加、减、乘、除,具备清零、等于功能,16个按键功能依次为:数字0、数字1、数字2、数字3、数字4、数字5、数字6、数字7、数字8、数字9、清零、等于、加、减、乘、除。 1.设计要求及功能分析 1.1设计要求: 本次单片微型计算机与接口技术课程设计做的是利用C51单片机为主体的计算器,实现了简单的加、减、乘、除功能。采取的是键盘输入和液晶显示屏的输出结果显示。主要硬件构成部分由四个,一个AT89C51单片机芯片,一个液晶显示屏,一个4*4键盘和一个排阻(10K)做P0口的上拉电阻,可以实现16位的数值操作计算。 1.2基本功能: 首先,计算器可现实8位数字,开机运行时,只有数码管最低位显示为“0”,其他位全部不显示;

单片机课程设计 秒表计时器(DOC)

课程设计名称:单片机原理及接口技术 题目:基于单片机的秒表计时器设计 学期:2014-2015学年第一学期 专业:电气技术 班级: 姓名: 学号: 指导教师:

辽宁工程技术大学 课程设计成绩评定表

课程设计任务书 一、设计题目 秒表计时器 二、设计任务 本课题以单片机为核心,设计和制作一个秒表计时器。 三、设计计划 课程设计一周 第1天:查找资料,方案论证。 第2天:各部分方案设计。 第3天:各部分方案设计。 第4天:撰写设计说明书。 第5天:校订修改,上交说明书。 四、设计要求 1、绘制软件流程图并利用汇编语言编写软件程序; 2、绘制系统硬件原理图; 3、形成设计报告。 指导教师: 教研室主任: 2014年5月26 日

本设计利用89C51单片机设计秒表计时器,通过LED显示秒十位和个位,在设计过程中用一个存储单元作为秒计数单元,当一秒到来时,就让秒计数单元加一,通过控制使单片机秒表计时,暂停,归零。设计任务包括控制系统硬件设计和应用程序设计。 关键词:51单片机;74HC573;LED数码管

综述 (1) 1 程序方案 (2) 1.1方案论证 (2) 1.2总体方案 (2) 2部分设计 (3) 2.1 89C51单片机 (3) 2.2晶体振荡电路 (4) 2.3硬件复位电路 (5) 2.4显示电路 (6) 2.5整体电路图 (7) 3程序设计 (8) 3.1程序流程框图 (8) 3.2显示程序流程图 (9) 3.3汇编源程序 (10) 4调试说明 (13) 4.1概述 (13) 4.2电路原理图 (13) 心得体会 (15) 参考文献 (16)

定时器实验报告

电子信息工程学系实验报告 课程名称:单片机原理及接口应用Array实验项目名称:51定时器实验实验时间: 班级:姓名:学号: 一、实验目的: 熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。 二、实验环境: 软件:KEIL C51单片机仿真调试软件,proteus系列仿真调试软件 三、实验原理: 1、51单片机定时计数器的基本情况 8051型有两个十六位定时/计数器T0、T1,有四种工作方式。MCS-51系列单片机的定时/计数器有几个相关的特殊功能寄存器: 方式控制寄存器TMOD; 加法计数寄存器TH0、TH1 (高八位);TL0、TL1 (低八位); 定时/计数到标志TF0、TF1(中断控制寄存器TCON) 定时/计数器启停控制位TR0、TR1(TCON) 定时/计数器中断允许位ET0、ET1(中断允许寄存IE) 定时/计数器中断优先级控制位PT0、PT1(中断优IP) 2、51单片机的相关寄存器设置 方式控制寄存器TMOD: TMOD的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须整体赋值。TMOD各位的含义如下: 1. 工作方式选择位M1、M0 3、51单片机定时器的工作过程(逻辑)方式一 方式1:当M1M0=01时,定时器工作于方式1。

T1工作于方式1时,由TH1作为高8位,TL1作为低8位,构成一个十六位的计数器。若T1工作于定时方式1,计数初值为a,晶振频率为12MHz,则T1从计数初值计数到溢出的定时时间为t =(216-a)μS。 4、51单片机的编程 使用MCS-51单片机的定时/计数器的步骤是: .设定TMOD,确定: 工作状态(用作定时器/计数器); 工作方式; 控制方式。 如:T1用于定时器、方式1,T0用于计数器、方式2,均用软件控制。则TMOD的值应为:0001 0110,即0x16。 .设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。 计数初值的计算方法如下,设晶振频率为fosc,则定时/计数器计数频率为fosc/12,定时/计数器的计数总次数T_all在方式0、方式1和方式2时分别为213 = 8192、216 = 65536和28 = 256,定时间隔为T,计数初值为a,则有 T = 12×(T_all – a)/fosc a = T_all – T×fosc/12 a = – T×fosc/12 (注意单位) THx = a / 256;TLx = a % 256; .确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断: ET0 = 1;EA = 1; 还需要编写中断服务函数: void T0_srv(void)interrupt 1 using 1 { TL0 = a % 256; TH0 = a / 256; 中断服务程序段} .启动定时器:TR0(TR1)= 1。 四、实验内容过程及结果分析: 利用protues仿真软件设计一个可以显示秒表时间的显示电路。利用实验板上的一位led数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1s。刚开始led数码管显示9,每过一秒数码管显示值减一,当显示到0时返回9,依此反复。然后设计00-59的两位秒表显示程序。 (1)实现个位秒表,9-0

实验4指导书 555定时器电路设计

实验4 555定时器电路设计 预习内容 阅读《电工电子实验教程》第6.5节中555集成定时器应用的内容。 预习实验的内容,自拟实验步骤和数据表格,完成理论设计,画出原理电路,选择所用元件名称、数量,熟悉元件引脚,手写预习报告。 一、实验目的 1.熟悉集成定时器555的工作原理及应用。 2.熟悉时钟信号产生电路的设计方法。 3.掌握使用定时器555设计多谐振荡器的方法。 二、知识要点 时钟信号在电子电路中有着非常重要的作用,而生成周期时钟信号的方法也有多种。比较常用的方法就是使用555定时器构成多谐振荡器。此电路广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。 555定时器是一种模拟和数字功能相结合的中规模集成器件。一般用双极性工艺制作的称为555,用CMOS工艺制作的称为7555。555定时器的电源电压范围宽,可在4.5V~16V 工作,7555可在3~18V工作,输出驱动电流约为200mA,因而其输出可与TTL、CMOS或者模拟电路电平兼容。555定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。 图5-1 555定时器的结构图和引脚分布图 1脚-GND,接地脚; 2脚-Trigger,低电平触发端; 3脚-Output,输出端; 4脚-Reset,复位端,低电平有效; 5脚-Control V oltage,电压控制端; 6脚-Threshold,阈值输入端; 7脚-Discharge,放电端; 8脚-V CC,电源端。 三、实验内容 题目:时钟信号发生电路设计 设计一个电路,能够产生时钟信号,要求信号频率可调,设计范围不小于500Hz~1000Hz,

单片机课程设计计算器

课程设计说明书 课程设计名称:单片机课程设计 课程设计题目:四位数加法计算器的设计学院名称:电气信息学院 专业班级: 学生学号:

学生姓名: 学生成绩: 指导教师: 课程设计时间:至

格式说明(打印版格式,手写版不做要求) (1)任务书三项的内容用小四号宋体,倍行距。 (2)目录(黑体,四号,居中,中间空四格),内容自动生成,宋体小四号。 (3)章的标题用四号黑体加粗(居中排)。 (4)章以下的标题用小四号宋体加粗(顶格排)。 (5)正文用小四号宋体,倍行距;段落两端对齐,每个段落首行缩进两个字。 (6)图和表中文字用五号宋体,图名和表名分别置于图的下方和表的上方,用五号宋体(居中排)。(7)页眉中的文字采用五号宋体,居中排。页眉统一为:武汉工程大学本科课程设计。 (8)页码:封面、扉页不占页码;目录采用希腊字母Ⅰ、Ⅱ、Ⅲ…排列,正文采用阿拉伯数字1、2、3…排列;页码位于页脚,居中位置。 (9)标题编号应统一,如:第一章,1,,……;论文中的表、图和公式按章编号,如:表、表……;图、图……;公式()、公式()。

课程设计任务书 一、课程设计的任务和基本要求 (一)设计任务(从“单片机课程设计题目”汇总文档中任选1题,根 据所选课题的具体设计要求来填写此栏) 1. 系统通过4x4的矩阵键盘输入数字及运算符。 2. 可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E。 3. 可以进行加法以外的计算(乘、除、减)。 4. 创新部分:使用LCD1602液晶显示屏进行显示,有开机欢迎界面,计算数据与结果分两行显示,支持小数运算。 (二)基本要求 1.有硬件结构图、电路图及文字说明; 2.有程序设计的分析、思路说明; 3.有程序流程框图、程序代码及注释说明; 4.完成系统调试(硬件系统可以借助实验装置实现,也可在Proteus 软件中仿真模拟); 5.有程序运行结果的截屏图片。

推荐-单片机课程设计多功能定时器 精品 精品

单片机课程设计 多功能定时器 一、设计目的: 1、在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具 有综合功能的小系统目标板的设计与编程应用; 2、能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识, 在软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高; 3、使学生增进对单片机的感性认识,加深对单片机理论方面的理解。使学生掌 握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、串行口通信等; 4、使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,为以后 设计和实现单片机应用系统打下良好基础。 二、设计功能说明 数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,本设计可实现如下功能: 1、使用实时时钟芯片写入及读取时间 2、用LCD显示,可显示年、月、日、时、分、秒、星期、农历日期、节日 3、选择蜂鸣器电路,实现两个闹钟设置和事件提示功能 4、实现时钟校正功能,12小时/24小时切换功能 5、显示当前时间为上午时间或下午时间 6、整点报时功能 按键功能如下: 1、对显示时间的设置 按键0:进入设置模式,实现秒(S)、分(M)、时(H)、年(Y)、月(m)、日(D)、星期(W)设置的切换,并在LCD右下角显示所设置的项目,当各项目设置完毕后,再按下按键0则返回主界面正常显示时间; 按键1:每按一次按键1,对所设置的时间加1,当设置的时间超过它的最大值时,该项自动为0,例如:当设置秒为59时,秒自动清零; 按键2:每按一次按键:2,对所设置的时间减1,当设置的时间小于0时,该项自动为它的最大值; 按键3:设置完成后的确认键并可按此键中途退出设置,时间按用户设置值正常计时;

单片机实验报告 计算器

单片机原理及其应用实验报告基于51单片机的简易计算器的设计 班级:12电子1班 姓名:金腾达 学号:1200401123 2015年1月6日

摘要 一个学期的51单片机的课程已经随着期末的到来落下了帷幕。“学以致用”不仅仅是一句口号更应该是践行。本设计秉承精简实用的原则,采用AT89C51单片机为控制核心,4X4矩阵键盘作为输入,LCD1602液晶作为输出组成实现了基于51单片机的简易计算器。计算器操作方式尽量模拟现实计算器的操作方式,带有基本的运算功能和连续运算能力。并提供了良好的显示方式,与传统的计算器相比,它能够实时显示当前运算过程和上一次的结果,更加方便用户记忆使用。本系统制作简单,经测试能达到题目要求。 关键词:简易计算器、单片机、AT89C51、LCD1602、矩阵键盘

目录 一、系统模块设计......................................................................................... 错误!未定义书签。 1.1 单片机最小系统 (1) 1.2 LCD1602液晶显示模块 (1) 1.3 矩阵按键模块 (2) 1.4 串口连接模块 (1) 二、C51程序设计 (2) 2.1 程序功能描述及设计思路 (2) 2.1.1按键服务函数 (2) 2.1.2 LCD驱动函数 (2) 2.1.3 结果显示函数 (2) 2.1.4状态机控制函数 (2) 2.1.5串口服务函数 (2) 2.2 程序流程图 (3) 2.2.1系统总框图 (3) 2.2.2计算器状态机流程转换图 (3) 三、测试方案与测试结果 (4) 3.1测试方案 (4) 3.3 测试结果及分析 (7) 4.3.1测试结果(仿真截图) (7) 4.3.2测试分析与结论 (7) 四、总结心得 (7) 五、思考题 (8) 附录1:整体电路原理图 (9) 附录2:部分程序源代码 (10)

实验三++555定时器的应用仿真实验

电子技术仿真实验报告实验题目: 3 555定时器的应用仿真实验 班级: 姓名: 学号: 实验日期: 实验成绩:

实验三 555定时器的应用仿真实验 一、实验目的: 1、熟悉555定时器的工作原理。 2、掌握555定时器的典型应用。 3、掌握基于multisim 10.0的555定时器应用仿真。 二、实验原理: 555定时器是一种常见的集数字与模拟功能于一体的集成电路。通常只要外接少量的外围元件就可以很方便地构成施密特触发器、单稳态触发器和多谐振荡器等多种电路。其中: (1) 构成施密特触发器,用于TTL 系统的接口,整形电路或脉冲鉴幅等; (2)构成多谐振荡器,组成信号产生电路; (3)构成单稳态触发器,用于定时延时整形及一些定时开关中。 555应用电路采用这3种方式中的1种或多种组合起来可以组成各种实用的电子电路。 U1 LM555CM GND 1DIS 7OUT 3 RST 4VCC 8THR 6CON 5 TRI 2 GND ——1脚,接地;TRI ——2脚,触发输入;OUT ——3脚,输出;RES ——4脚,复 位(低电平有效);CON ——5脚,控制电压(不用时一般通过一个0.01F 的电容接地);THR ——6脚,阈值输入;DIS ——7脚,放电端;VCC ——8脚,+电源

1、 由555定时器构成多谐振荡器 (1) 接通电源时,设电容的初始电压0=c V ,此时TR V \TH V 均小于1/3Vcc ,放电截止, 输出端电压为高电平,Vcc 通过1R 和2R 对C 充电,Vc 按照指数规律逐步上升。 (2) 当Vc 上升到2/3Vcc 时,放电管导通,输出端电压为低电平,电容C 通过2R 放电,Vc 按照指数规律逐步下降。 (3) 当Vc 下降到1/3Vcc 时,放电管截止,输出端电压由低电平翻转为高电平,电容C 又开始充电。当电容C 充到Vc=2/3Vcc 时,又开始放电,如此周而复始,在输出端即可产生矩形波信号。 矩形波信号的周期取决于电容器充、放电回路的时间常数,输出矩形脉冲信号的周期 C R R T )2(7.021+≈ 2、 施密特触发器是脉冲波形整形和变换电路中经常使用的一种电路。其具有两个稳定 状态,两个稳定状态的维持和相互转换取决于输入电压的高低和,属于电平触发,具有两个不同的触发电平,存在回差电压。由555定时器构成的施密特触发器将555定时器的THR 和TRI 两个输入端连在一起作为信号输入端即可得到施密特触发器。 (1) 当Vi<1/3Vcc 时,输出Vo 为高电平。随着Vi 的上升,只要Vi<2/3Vcc ,输出 信号将维持原状态不变,设此状态为第一稳定状态。 (2) 当Vi 上升到Vi ≥2/3Vcc 时,输出Vo 为低电平。电路由第一稳定状态翻转为第 二稳定状态,电路的正向阈值电压为+T V =2/3Vcc 。随着Vi 上升后又下降的情况,只要Vi 〉1/3Vcc ,电路将维持在第二稳定状态不变。 (3) 当Vi 下降到Vi ≤1/3Vcc 时,电路又翻转到第一稳态,电路的负向阈值电压为 -T V =1/3Vcc 。 三、实验内容: 1、555定时器构成多谐振荡器仿真实验

AT89C51单片机C实现简易计算器

AT89C51单片机简易计算器的设计 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图:

二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

(二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。 图 2 矩阵键盘布局图 矩阵键盘内部电路图如图3所示:

单片机课程设计定时器控制4只LED滚动闪烁系统解析

目录

1设计目的 1.1设计目的 1、通过单片机课程设计,熟练掌握单片机C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。 2、通过定时器控制两个LED显示器显示10秒秒表系统的设计,掌握定时/计数器和LED显示器的使用方法,同时掌握简单程序的编写,最终提高我们的逻辑抽象能力。 1.2设计内容和要求 内容:设计一个能够控制两个LED显示器显示10秒秒表的模拟系统。 要求:利用单片机的定时器定时,控制LED显示器显示。 1.3 设计思路 1.先熟悉实验原理,了解4只LED滚动闪烁系统灯的工作过程,组成滚动闪烁系统需要的组件。 2.了解各个硬件的工作原理, 3.绘制电路原理图,编写程序,并进行仿真,基本实现LED滚动闪烁系统灯的功能。

2设计原理分析 2.1十秒秒表的系统设计 通过编写程序,实现对发光二极管的控制,来4只LED 滚动闪烁灯的管理。每延时一段时间,灯的显示情况都会按LED 灯的显示规律进行状态转换。采用单片机内部的I/O 口上的P0口中的4个引脚即可来控制4个LED 灯。 2.2十秒秒表的功能要求 本设计能模拟基本的LED 滚动闪烁系统,是用中断的方式定时控制LED 定的闪烁及滚动。 2.2.1计时显示 定时/计数器工作方式寄存器,定时器采用T0定时器0工作于模式2 位数:8位计数范围:0-255 具有自动加载功能 2.2.2中断设置 每累计若干次定时器中断才执行一次闪烁。 2.3定时器控制4只LED 滚动闪烁制系统的基本构成及原理 单片机设LED 灯闪烁系统,可用单片机直接控制信号灯的状态变化可以广泛的应用到商业和工业的流程控制测电路当中。 图2.1 系统的总体框图 据此,本设计系统以单片机为控制核心,连接成最小系统。系统的总体框图如上所示。因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。当定时器1被用作波特率发生器时,波特率工作于方式1和方式3是由定时器1 的溢出率和SMOD 的值(PCON.7------双倍速波特率)决定:

数字电路实验报告555定时器及应用

姓名:xxxxxxxxxxxxxxx学号:xxxxxxxxxx . 学院:计算机与电子信息学院专业:计算机类. 班级:xxxxxxxxxxxxxxxxxx时间:2019年10月18 日. 指导教师:xxxxxxxx . 实验名称:555定时器及应用. 一、实验目的 1、熟悉掌握555定时器的基本工作原理及功能; 2、掌握555定时器构成多谐震荡器的工作原理和使用方法; 3、熟悉数字系统的分析和应用。 二、实验原理 1、555定时器原理简介 555定时器是共仪器、仪表、自动化装置、各种民用电器的定时器、时间延时器等电子控制电路用的时间功能电路,也可以做自激多谐振荡器、脉冲调制电路、脉冲相位调谐电路、脉冲丢失指示器、报警器以及单稳态、双稳态等各种电路,应用范围十分广泛。 (1)555定时器的特点 ①外部连接几个阻容元件,可以方便的构成施密特触发器、多谐振荡器和单稳态 触发器等脉冲产生与整形回路。 ②具有一定的输出功率,因此可直接驱动微电机、指示灯和扬声器等。该器件有 双极型和COMS型两类产品,双极型产品型号最后三位为555,COMS型产品 型号最后四位为7555,它们的功能及外部引线排列完全相同。 ③电源电压范围宽(3~18V),双极型的电源电压为5~15V,COMS型的电源电 压为3~18V,能够提供与TTL及COMS型的数字电路兼容的逻辑电平。 (2)555定时器的电路结构及功能 图6-1是555定时器的电路结构图和管脚排列图,它的八个引脚的名称及作用如下: 1脚:芯片的地端2脚:芯片的触发输入端TR’(也叫低触发端)3脚:芯片的输出端4脚:芯片的复位端RD’ 5脚:芯片的控制电压输入Vco 6脚:芯片的阈值输入端TH(也叫高触发端)7脚:芯片的放电端DISC 8脚:芯片的电源Vcc

单片机课程设计——基于C51简易计算器

单片机双字节十六进制减法实验设计 摘要 本设计是基于51系列的单片机进行的双字节十六进制减法设计,可以完成计 算器的键盘输入,进行加、减、3位无符号数字的简单运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用5个键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus 仿真。 引言 十六进制减法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阴极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单.................................. 一、设计任务和要求

单片机的课程设计_30秒定时器

目录 一、篮球计时器作用 (1) 二、设计的具体实现 (1) 1.系统概述 (1) 1.1总体设计思路及方案 (1) 1.2流程图 (3) 1.3计数原理 (3) 1.4定时器工作方式 (4) 2.单元电路设计 (6) 2.1 8051单片机 (6) 2.2两个基本电路 (8) 2.3八段数码管的驱动方式.......................错误!未定义书签。 3.软件程序设计 (9)

单片机的定时器设计 一、篮球计时器的作用 在篮球比赛中,规定了球员的持球时间不能超过24秒,否则就视为犯规。本课程设计的“篮球竞赛24秒定时器”,可用于篮球比赛中对球员持球时间作24秒时间限制。一旦球员的持球时间超过了24秒,它自动报警,从而判定此球员犯规。 二、设计的具体实现 1.系统概述 1.1总体设计思路及方案 图1.1.1 总设计图

流程图:

最小系统,就是最简单的输出/输入构成,并且能实现最基本的运行条件,如应有供电、时钟附属电路等。单片机的最小系统包括晶振电路复位电路和电源,这时最小系统基本组成当然还可以添加矩阵键盘数码管等。 此实验的原理是,利用单片机的最小系统,通过锁存器74HC573控制数码管,来实现30秒定时器的功能。 图1.1.2最小系统 1.2计数原理 80C51单片机部设有两个16位的可编程定时器/计数器。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。 1.2.1定时器/计数器的结构 16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过部总线和控制逻辑电路

C51单片机定时器及数码管控制实验报告

理工大学信息工程与自动化学院学生实验报告 (201 — 201学年第1 学期) 课程名称:单片机技术

一、实验目的 1.掌握定时器T0、T1 的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 2.掌握LED 数码管动态显示程序设计方法。 二、实验原理 1.89C51 单片机有五个中断源(89C52 有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0 溢出中断请求、定时器/计数器0 溢出中断请求及串行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器TCON 和SCON 中。当中断源请求中断时,相应标志分别由TCON 和SCON 的相应位来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。在

同一优先级别中,靠部的查询逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。 中断的控制用四个特殊功能寄存器IE、IP、TCON (用六位)和SCON(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。中断程序由中断控制程序(主程序)和中断服务程序两部分组成:1)中断控制程序用于实现对中断的控制; 2)中断服务程序用于完成中断源所要求的中断处理的各种操作。 C51 的中断函数必须通过interrupt m 进行修饰。在C51 程序设计中,当函数定义时用了interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m 的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 89C51 单片机设置了两个可编程的16 位定时器T0 和T1,通过编程,可以设定为定时器和外部计数方式。T1 还可以作为其串行口的波特率发生器。

555定时器多谐波电路Multisim仿真

数字电子技术仿真实验报告 实验名称:555定时器 学生姓名:刘佳璇学号:20152523 指导教师:金丹 院系:电气工程学院班级:201502D 2017 年11 月29 日

555定时器 一、实验目的 1、学会使用 MULTISIM 软件进行数字电子实验仿真。 2、学习了解555定时器的工作原理。 二、实验内容 多谐振荡器 三、实验原理 555定时器的内部电路图及引脚排列见下图,功能表见下表。

555定时器的功能主要由两个比较器决定。两个比较器的输出电压控制RS 触发器和放电管的状态。在电源与地之间加上电压,当5脚悬空时,则电压比较器C1的同相输入端的电压为3/2CC V ,C2的反相输入端的电压为VCC 若触发输入端TR 的电压小于3/CC V ,则比较器C2的输出0,可使RS 触发器置1,使输出端OUT=1。如果阈值输入端TH 的电压大于3/2CC V ,同时TR 端的电压大于3/CC V ,则C1的输出为0,C2的输出为1,可将RS 触发器置0,使输出为0电平。

多谐振荡器又称为无稳态触发器,它没有稳定的输出状态,只有两个暂稳态。在电路处于某一暂稳态后,经过一段时间可以自行触发翻转到另一暂稳态。 两个暂稳态自行相互转换而输出一系列矩形波。多谐振荡器可用作方波发生器。电路如图。 四、 实验设计与仿真 构建仿真电路如图所示,其中Ω=k R 21,Ω=k R 12,F C μ1.0=。接通V 5电源,用示波器观察c u 和o u 的波形。

波形如下图: 仿真结果与实验结果一致。 五、实验小结

这次的仿真实验是 555 定时器(多谐振荡器)电路,实验连线较简单,但是原理并不简单,通过实验我更加深刻的理解了555定时器的工作原理。

单片机课程设计——基于C51简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

单片机课程设计音乐闹钟定时器

目录: 0、任务书 (2) 1、系统总体设计方案规划与选定 (2) 2、硬件设计 (5) 3、软件设计 (6) 4、调试 (8) 5、新增功能及实现方法 (8) 6、小结与体会 (9) 7、参考文献 (9) 8、附录 (10)

0.任务书 基于51单片机设计一个电子数字钟,显示时、分、秒,且具有闹钟功能。用8255接口实现4*8键盘及8位LED显示。 32个键:0~9共10个键,调时(设置当前时间)键;设定闹钟(定时)键;走时键;光标左右移动各一个键。 要求键复位后,应该最后面的LED上显示H(待命状态)。 1. 系统总体设计方案规划与选定 1.1主控制芯片选择 方案一:采用ARM微处理,做主控芯片,计算速度快,缺点;成本高,控制较复杂,不容易焊接。 方案二:采用80C51单片机做主控制器,由单片机来完成采集和信号处理等底层的核心计算,做主控芯片,成本低,易控制,易实现。 经过以上两个方案比较,在此题方案二明显优于方案一,故采用80C51单片机做主控制器。 1.2定时模块选择 方案一:采用时钟芯片DS1302。 DS1302 可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录,且较单片机计时简单节约硬件资源,但存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。 方案二:采用单片机内部的定时系统,外接晶振进行分频脉冲计数。

此系统采用12MHz晶振。 由于方案二使用简单,比方案一更适用该系统设计,所以选择方案二。 1.3 LED显示及计时模块选择 方案一:74LS192计数器——74LS47七点显示译码器 74LS192芯片是一块可预置数可逆计数芯片,功能强大。将74LS192芯片CPU引脚接高电平可实现减法计数,以倒计时显示。可通过74LS47与LED共阳极数字显示器配合使用。 方案二:使用移位寄存器74HC595与译码器相连 74HC595具有8位移位寄存器和一个存储器,使用时可直接与数字显示器相连。 方案三:使用8255扩展LED显示计时模块 8255是一个可编程并行接口芯片,有一个控制口和三个8位数据口,外设通过数据口与单片机进行数据通信,各数据口的工作方式和数据传送方向是通过用户对控制口写控制字控制的。我们用到了A与B口分别进行对数码显示管的片选和段选,且B口同时作为键盘扫描模块的输入口,与数码显示模块分时复用。故采用方案三 1.4蜂鸣器的选择 方案一:电磁式蜂鸣器 电磁式蜂鸣器主要是利用通电导体会产生磁场的特性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。电磁式由于音色好,所以多用于语音、音乐等设备。对于不同提示音且考虑实际,此种较好。 方案二: 压电式蜂鸣器

单片机定时器实验报告

( 2009 —2010 学年第二学期) 课程名称:单片机开课实验室: 2010年 5月14日 一.实验目的: 掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 二.实验原理: MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。 定时器T0由特殊功能寄存器TL0和TH0构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器T0的中断入口地址为000BH,T1的中断入口地址为001BH。 定时器的编程包括: 1)置工作方式。 2)置计数初值。 3)中断设置。 4)启动定时器。 定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。 在编写中断服务程序时,应该清楚中断响应过程:CPU执行中断服务程序之前,自动

将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容),然后将对应的中断矢量装入程序计数器PC使程序转向该中断矢量地址单元中以执行中断服务程序。定时器T0和T1对应的中断矢量地址分别为000BH 和001BH。 中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。 因此,我们在编写中断服务程序时注意。 1.在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活地安排在64K 字节程序存储器的任何空间。 2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器的信息。 3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU中断,或禁止某中断源中断,在返回前再开放中断。 三.实验内容: 编写并调试一个程序,用AT89C51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。实验电路原理如图1所示。 计算初值公式 定时模式1 th0=(216-定时时间) /256 tl0=(216-定时时间) mod 256

相关主题
文本预览
相关文档 最新文档