基于51单片机的多功能定时器

基于51单片机的多功能定时器
基于51单片机的多功能定时器

摘要

本设计要求以单片机为核心主体,完成最小系统板的设计与制作(通过Protel 软件,对电路进行设计,调试。生成PCB板,再对元器件进行排布,焊接。)之后要进行初调试,证实电路板无误后才能进行下面的内容。电路板完成后,在总程序基础上通过编程设计家用多路定时控制器。本课程设计目标:具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。但重要的是要有一定的创新,因为此系统还有很多值得开发的功能,单纯的三路定时只是设计内容的基本要求。

关键词:Protel,单片机,MCS-51

目录

摘要........................................................................................................ - 1 - 引言........................................................................................................ - 2 - 1 绪论.................................................................................................... - 2 -

1.1系统背景 (1)

1.1.1单片机技术及其发展特点 (1)

1.1.2单片机在电子技术中的应用 (3)

1.1.3课程设计的内容与任务 (4)

2 系统电路设计 (5)

2.1 系统总体设计框架结构 (5)

2.2 系统硬件单元电路设计 (6)

2.2.1 时钟电路设计 (6)

2.2.2 复位电路设计 (6)

2. 2.3 按键电路设计 (7)

2.3数码管电路设计 (8)

2.3.1、数码管的分类 (8)

2.3.2、数码管的驱动方式 (8)

2.3 系统硬件总电路 (14)

3 系统软件设计 (10)

3.1 系统软件流程图 (10)

4 实验结果和分析 (11)

4.1 实验使用的仪器设备 (11)

4.2 测试结果分析 (11)

结论 (12)

参考文献 (13)

附录 (13)

系统程序设计 (15)

Abstract (25)

致谢 (25)

引言

我们在日常生活中,经常碰到一些需要定时的事情,例如:印相或放大照片,需要定在零点几秒的时间,洗衣机洗涤衣物需要定在几分钟到几十分钟的时间,电风扇需要定在数十分钟的时间。完成这种定时的定时器有多种多样,在家用电器中采用机械定时器就是根据一般上弦钟表原理设计的,这种定时器虽然结构简单,成本低,维修也比较方便,但是它的触头频繁接触和断开,大大的缩减了它的使用寿命,也不利于进一步全自动化。在电子技术突飞猛进的今天,电子定时器一定会逐步取而代之,这是不言而喻的。

本文是基于51系列单片机设计的一种用于控制家用电器的设计方案。

1 绪论

1.1系统背景

1.1.1单片机技术及其发展特点

早期的单片机(Single Chip Microcomputer单片微计算机)只是将CPU及计算机外围功能单元(如I/O口、定时/计时器、UART、RAM、ROM等)集成在一块芯片上。随着单片机技术的发展以及微处理器(MPU)技术及超大规模集成电路技术的发展,单片机集成了更多的用于控制目的的功能单元(如高速I/O 口、ADC、PWM、WA TCHDOG、I2CBus - Inter IC Bus、CAN Bus – Controller Area Network Bus等),从而成为严格意义上的单片微控制器(Single Chip Microcontroller)。图1-1所示的为MCS—51单片机片内总体结构框图。

单片机系统以单片机为核心部件,可分为单机应用和多机应用。单机应用是指一个应用系统中只使用一个单片机,这是目前应用最多的方式;多机应用是单片机在高科技领域应用的主要模式。单片机的高可靠性、高控制功能及高运行速度的―三高‖特点必然使得未来的高科技工程系统将采用da单片机多机系统作为主要的发展方向。

图1-2所示的为典型的单片机系统原理框图。

图1-1 MCS—51单片机片内总体结构框图

单片机的生存周期相对于普通CPU而言非常之长,如MCS8051已超过15年。以某类单片机(如8051/52)为核心,集成不同I/O功能模块的新单片机系列层出不穷;而某些单片机更是突出了以功能分类的特点(如Microchip 公司的PIC单片机)。8位、16位、32位单片机共同发展也是当前单片机技术发展的另一特点。

单片机运算速度越来越快,为提高单片机抗干扰能力和降低噪声,尽量不采用提高时钟频率单一措施,而是通过调整单片机的内部时序、使用琐相环技术或内部倍频技术等技术,在不提高时钟频率的条件下,使运算速度提高了很多。

图1-2 典型单片机系统原理框图

低电压与低功耗是单片机技术的发展的另一个特点。采用最新的集成电路制造技术,全静态设计使时钟频率从直流到数十兆任选,使功耗不断下降。PIC 单片机、Motorola的某些单片机等在这方面具有很强的优势。

为提高单片机系统的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片机商家尽量采用低噪声与高可靠性技术,在单片机内部电路中采取了一些新的技术措施,如增加了抗EMI电路、增强了WATCHDOG的性能等。

为降低单片机产品的成本,广泛采用掩膜(Mask ROM)、一次编程(OTP-One Time Programmable)和多次编程(MTP-Multi Time Programmable)单片机。过去成熟的单片机产品一般采用掩膜型单片机,由于掩膜需要一定的生产周期,而一次编程型单片机价格不断下降,使得近年来直接使用一次编程完成最终产品制造更为流行。近年来,一次编程型单片机需量大幅度上扬,为适应这种需求许多单片机都采用了在片编程技术(In System Programming)。未编程的一次编程芯片先焊在印刷板上,然后再其进行编程,解决了批量写一次编程芯片时容易出现的芯片与写入器接触不好的问题。编程线与I/O线共用,不增加单片机的额外引脚。而多次编程向一次编程提出了挑战,一些单片机厂商采用FLASH存储器作为程序存储器(如ATMEL 公司的单片机),可多次编程。

1.1.2单片机在电子技术中的应用

单片机的应用领域

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:

1.在智能仪器仪表上的应用

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。

2.在工业控制中的应用

用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。

3.在家用电器中的应用

可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。

4.在计算机网络和通信领域中的应用

现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。

1.1.3课程设计的内容与任务

本课程设计是基于ATMEL公司生产的AT89CS51单片机为主而设计的,

本课程设计主要内容和任务是完成单片机最小系统板设计与制作,在此基础上通过编程设计家用多路定时控制器。使其具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。当然,该定时器依然可以通过编程设计出多种功能,例如:电子日历,交通指示灯等等。

2 系统电路设计

2.1 系统总体设计框架结构

图2-1系统总体设计框架结构

复位电路:通过复位电路使所有的状态都恢复原始状态。 时钟电路:通过该电路产生单片机工作所需要的时钟信号。 按键电路:通过该电路改变单片机控制的功能。

复位电路

控制中心 单片机

按键电路

数码管显示

时钟电路

单元

单片机:控制整个电路。

数码管: 显示时间或者其它。

2.2 系统硬件单元电路设计

2.2.1 时钟电路设计

图2-2 时钟电路设计

该时钟电路是由晶体振荡器和两个微调电容组成的。在单片机芯片内部有一个高增益反相放大器,其输入端为引脚XTAL1,其输出端为引脚XTAL2。只需要在片外通过XTAL1和XTAL2引脚跨接晶体振荡器或在引脚与地之间加接微调电容,形成反馈电路,振荡器即可工作。由于该晶振使用的是12MHZ的晶体,因此它的时钟周期是0.167us,机器周期为1us。

2.2.2 复位电路设计

图2-3 复位电路设计

2. 2.3 按键电路设计

RST键:复位键,按下后灯管均亮。

1 键:其功能是当该键按下时,进入时间调整功能。

2 键:其功能是对被调整位加一。

3 键:其功能是对被调整位减一。

4 键:其功能是对定时进行设置。

5 键:其功能是对被定时位加一。

6 键:其功能是对被定时位减一。

7 键:其功能是切换定时状态和时钟状态。

8 键:其功能是切换星期、秒和时钟状态。

图2-4按键电路设计

2.3数码管电路设计

数码管是一种半导体发光器件,其基本单元是发光二极管。

2.3.1、数码管的分类

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个―8‖可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

2.3.2、数码管的驱动方式

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字。

动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM

端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

3 系统软件设计

3.1 系统软件流程图

主程序流程图:

图2-5 主程序流程图

说明:程序开始执行,启动定时器0和定时器1,然后执行while 语句,但条件一直成立,因此while 语句中的子函数一直在执行。If 语句也一直在判断有没有shift 键有没有按下,是否进入了调时调分的阶段,一段进入,通过键盘扫描和键值判断,使得按键处理子程序进入新的状态,从而数码管显示新的内容。

定时器0启动 定时器1启动

1>0 ?

比较函数

红绿灯子程序

开 始

执行子函数

刷新缓冲区子程序 LED 显示子

程序

键盘扫描

4 实验结果和分析

4.1 实验使用的仪器设备

本实验主要用到了电源,电脑,烧程器,电烙铁,元器件若干。

4.2 测试结果分析

通过按shift键来改变电路状态

第一次按下shift键,进入调时状态。

第二次按下shift键,进入调分状态。

第三次按下shift键,进入第一路定时的调时状态。

第四次按下shift键,进入第一路定时的调分状态。

第五次按下shift键,回归时钟状态。

第六次按下shift键,进入第二路定时的调时状态。

第七次按下shift键,进入第二路定时的调分状态。

第八次按下shift键,回归时钟状态。

然后按下1键,进入交通灯提示状态。

按下2键,正式进入交通灯状态。

按下shift键,回归原始时钟状态。

结论

本次试验终于接近尾声了,通过对家用多功能定时器进行设计与制作,我了解了设计电路的程序,也让我了解了定时器的基本原理和设计理念。本次实验主要内容是完成单片机最小系统的设计与制作,再在其基础上通过编程设计多功能定时控制器。本课程设计最大的难点在于编程的创新,即在已有的基本程序上对程序进行扩充,尽可能多的实现定时的多种功能。由于本课程设计采用的是C 语言编写,更是增加了编写难度,只得重新看一些关于Case、Switch等相关的语句、后来发现,其实只要了解了相关语句和想要实现的效果,编程其实并不难,虽然没有什么特别的创新,但第一次系统的进行这方面的训练无疑是为以后的深入打下基础。还有就是一些关于一些问题的处理,如:(1)软件程序的调试应该分模块进行,使每个模块趋于完整,正确,最后将各个模块整合起来进行统调。(2)充分利用电路板上其他空余硬件资源来协助调试程序,即:用指示灯来指示有没有调用键盘扫描子程序,有没有扫描到键值,有没有指示中断,定时器0和定时器有没有工作等。接近两个星期的坚持,累,但却快乐着。。。

我的创新:〔1〕时钟的设置和定时的设置分别采用独立键控制,即:键1和键4。键2、3和键5、6为辅助调节按钮。

〔2〕单独的键7用于显示定时的开启和关闭状态。即:当按下7键,相应的定时开启状态会出现,再按一下,定时关闭状态出现。

〔3〕单独的键8用于显示星期和秒的走动情况。即:当按下八键,数码管此时显示的为星期和秒的走动情况,秒的走动显示与仿真显示一致。

参考文献

[1]张俊谟.单片机中级教程.北京:北京航空航天大学出版社,2006.10

[2]谭浩强.C程序设计教程.北京:清华大学出版社,2007.7

[3]康华光,陈大钦.电子技术基础.北京:高等教育出版社,1999.6

[4]沈卫红.单片机应用系统实例与分析.北京:北京航空航天大学出版社,2002

[5] Tyson Chandler. Protel 99 SE multi-function timer schematic and PCB design 5] Tyson Chandler. Protel 99 SE multi-function timer schematic and PCB design Board .Compilation of microcomputer and interface techniques,2005

附录

系统硬件总电路

VCC

VCC

VCC

VCC

Y0Y1Y2Y3Y0Y1Y2F3

VCC Vi VCC

RST RST

P1.0P1.0

P1.1

P1.1P1.2P1.2VCC VCC VCC

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7XTAL2XTAL1

O1O2O3O4O5O6O7P0.7

ALE /PSEN P2.0

P2.1P2.2P2.3P2.4P2.5P2.6P2.7P1.3P1.4P1.5P1.6P1.7P3.1P3.2P3.3P3.4P3.5P3.6P3.7XTAL1XTAL2P3.0ALE /PSEN P2.7P2.6P2.5P2.4P2.3P2.1P2.0

P2.2P2.1P2.0O1O2O3O4O5O6O7

Y 0

Y 1

Y 2

Y 3

Y 4

Y 5

F0F1F2

Y3VCC

O1O2O3O4O5O6

O7

O1O2O3O4O5O6O7

O1O2O3O4O5O6

O7

O1

O2O3O4O5O6

O7

F1F3F0F2P3.3P2.1

P2.0

VCC VCC 1234567891011121314151617181920J3CON201234567891011121314151617181920J4CON20

A11B12

Y13A24B25

Y26

GND 7

Y38

B39A310Y411B412A413VCC 14JP1

74LS00

A 1

B 2

C 3/G2A 4/G2B 5G16Y77GN

D 8

Y69Y510Y411Y312Y213Y114Y015VCC 16JP474LM138

P1.01P0.138P1.12P0.237P1.23P0.336P1.34P0.435P1.45P0.534P1.56P0.633P1.67P0.732P1.78/EA 31RST 9ALE 30P3.010/PSEN 29P3.111P2.728P3.212P2.627P3.313P0.039P3.414P2.526P3.515VCC 40

P3.616P2.425P3.717P2.324XTAL218P2.223XTAL119P2.122VSS 20

P2.021

JP2

89S51

12J5

CON2

C1

20pf

C220pf

C30.uf

C40.1uf

C60.1uf C70.1uf

C80.1uf

C910uf

C1010uf RST SW-PB

S1SW-PB

S2SW-PB S3SW-PB S4SW-PB S5SW-PB S6SW-PB

S7SW-PB

S8SW-PB S9SW-PB S10SW-PB S11SW-PB S12SW-PB

R210K R32k

R42k

R12k

Q19013

Q29013

Q39013

Y112M K1

RELAY-SPDT

12345678

J10.33K a b f c

g d e DPY

1234567

e d com c dp b a 8

com

dp f

9g

10DS1

DPY_7-SEG_DP a b f c

g d e DPY

1234567e d com c dp b a 8com dp f 9g 10DS3

DPY_7-SEG_DP

a

b

f c

g d e DPY 1234567

e d com c dp b a 8

com dp f 9g 10DS4

DPY_7-SEG_DP

a b f c g d e DPY 1234567

e d com c dp b a 8

com

dp f

9g 10DS2DPY_7-SEG_DP A11Y12A23Y24A35Y36GND 7

Y48A49Y510A511Y612A613VCC 14JP574LS07

123

J6

CON3R50.33k

VCC

Y4Y5

D1LED

R62k

R72k

R82k

R92k

R102k

D2

LED

D3LED

D4

LED

D5

LED

D6

LED

D7

LED

D8

LED

12345678J71k

Q49013

Q59013

Q69013

Q79013

Q89013

P1.3

P1.4P1.5

P1.6

P1.7

L1

L2

L3

L4

L5

L6

L 7

L1L2L3L4L5L6L7VCC

V i n

1

GND

2

V o u t

3U17805

Vi P0.7P0.7D9DIODE

图3-1系统硬件总电路

系统程序设计

#include

#define uchar unsigned char

#define uint unsigned int

/******************定义管脚**********************/

sbit RELAY=P1^0;

sbit LED1=P1^1;

sbit LED2=P1^2;

sbit LED3=P1^3;

sbit LED4=P1^4;

sbit LED5=P1^5;

sbit LED6=P1^6;

sbit LED7=P1^7;

sbit Line1=P2^1;

sbit Line2=P2^0;

/******************定义缓冲区及初始化********************/

uchar data TimeTab[6]={0x06,0x5b,0x4f,0x66};

uchar data Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar data TimeTab1[4],TimeTab2[4];

/*****************定义参数及初始化********************/

char hour=12,minute=34,second=0,h=0,m=0,h1=0,m1=0;char second1;

char flag=0,flag1=0,flag2=0;

uchar Keyno=0;

uchar num=0,count=0;

uchar STATE=0;

/************************************************

延时子函数

*************************************************/

void Delay( uint x) //自定义延时约0.1ms

{

uint t;

while(--x)

for(t=0;t<120;t++)

;

}

/**************************************************************** **/

/* 刷新缓冲区子程序*/

/**************************************************************** **/

void RefreshTab(void)

{ if(flag==0)

{TimeTab[0]=Tab[hour/10];

TimeTab[1]=Tab[hour%10];

TimeTab[2]=Tab[minute/10];

TimeTab[3]=Tab[minute%10];}

if(flag==1)

{TimeTab1[0]=Tab[h/10];

TimeTab1[1]=Tab[h%10];

TimeTab1[2]=Tab[m/10];

TimeTab1[3]=Tab[m%10];

}

if(flag==2)

{TimeTab2[0]=Tab[h1/10];

TimeTab2[1]=Tab[h1%10];

TimeTab2[2]=Tab[m1/10];

TimeTab2[3]=Tab[m1%10];

}

if(flag==4)

{TimeTab[0]=0x00;

TimeTab[1]=0x00;

TimeTab[2]=Tab[(50-second1)/10];

TimeTab[3]=Tab[(50-second1)%10];}

}

/**************************************************************** **/

/* 按键处理子程序*/

/**************************************************************** **/

void Key_Process(void)

{

switch(STATE)

{

case 0: if(Keyno==1){STATE=1;}

break;

case 1: if(Keyno==2){hour++;if(hour==24)hour=0;}

if(Keyno==3){hour--;if(hour==-1)hour=23;}

if(Keyno==1){STATE=2;}

break;

case 2: if(Keyno==2){minute++;if(minute==60)minute=0;}

if(Keyno==3){minute--;if(minute==-1)minute=59;}

if(Keyno==1){STATE=3;flag=1;}

break;

case 3: if(Keyno==2){h++;if(h==24)h=0;}

if(Keyno==3){h--;if(h==-1)h=23;}

if(Keyno==1){STATE=4;}

break;

case 4: if(Keyno==2){m++;if(m==60)m=0;}

if(Keyno==3){m--;if(m==-1)m=59;}

if(Keyno==1){STATE=5;flag=0;}

break;

case 5: if(Keyno==1){STATE=6;flag=2;}

break;

case 6: if(Keyno==2){h1++;if(h1==24)h1=0;}

if(Keyno==3){h1--;if(h1==-1)h1=23;}

if(Keyno==1){STATE=7;}

break;

case 7: if(Keyno==2){m1++;if(m1==60)m1=0;}

if(Keyno==3){m1--;if(m1==-1)m1=59;}

if(Keyno==1){STATE=8;flag=0;}

break;

case 8: if(Keyno==4){STATE=9;flag=3;}

break;

case 9: if(Keyno==5){STATE=10;second1=20;flag=4;}

if(Keyno==1){STATE=0;flag=0;}

break;

case 10:if(Keyno==1){STATE=0;flag=0;}

break;

case 11:if(Keyno==1){STATE=0;flag=0;}

break;

case 12:if(Keyno==1){STATE=0;flag=0;}

break;

default:break;

}

}

/**************************************************************** **/

/* 数码管显示子程序*/

/**************************************************************** **/

void SEG_Display(void)

{ if(flag==0)

P0=TimeTab[num];

if(flag==1)

{

P0=TimeTab1[num];}

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 还可以作为其串行口的波特率发生器。

基于51单片机的简易计算器制作

基于51单片机的简易计算器制作专业:电气信息班级:11级电类一班 姓名:王康胡松勇 时间:2012年7月12日 一:设计任务 本系统选用AT89C52单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下: (1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LED 显示数据和结果。 (2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LED上提示八个0;当除数为0时,计算器会在LED上会提示八个负号。 设计要求:分别对键盘输入检测模块;LED显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真 分析其设计结果。 二.硬件设计 单片机最小系统 CPU:A T89C52 显示模块:两个4位7段共阴极数码管 输入模块:4*4矩阵键盘 1.电路图

电路图说明 本电路图采用AT89C52作为中处理器,以4*4矩阵键盘扫描输入,用两个74HC573(锁存器)控制分别控制数码管的位于段,并以动态显示的方式显示键盘输入结果及运算结果。为编程方便,以一个一位共阴极数码管显示负号。 三,程序设计 #include #define Lint long int #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; //锁存器段选sbit wela=P2^7; sbit display_g=P2^0; //负号段选 sbit display_w=P2^1; //负号位选uchar code table[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3

51单片机定时器的使用

1 51单片机定时器/计时器的使用 步骤: 1、 打开中断允许位: 对IE 寄存器进行控制,IE 寄存器各位的信息如下图所示: EA : 为0时关所有中断;为1时开所有中断 ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES : 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开 2、 选择定时器/计时器的工作方式: 定时器TMOD 格式 CPU 在每个机器周期内对T0/T1 检测一次,但只有在前一次检测为1和后一次检测为0时才会使计数器加1。因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。通常,T0或T1输入线上的计数脉冲频率总小于100kHz 。 方式0:定时器/计时器按13位加1计数,这13位由TH 中的高8位和TL 中的低5位组成,其中TL 中的高3位弃之不用(与MCS-48兼容)。 13位计数器按加1计数器计数,计满为0时能自动向CPU 发出溢出中断请求,但要它再次计数,CPU 必须在其中断服务程序中为它重装初值。 方式1:16位加1计数器,由TH 和TL 组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。

2 方式2:计数器被拆成一个8位寄存器TH 和一个8位计数器TL ,CPU 对它们初始化时必须送相同的定时初值。当计数器启动后,TL 按8位加1计数,当它计满回零时,一方面向CPU 发送溢出中断请求,另一方面从TH 中重新获得初值并启动计数。 方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。 在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。因此,T1就没有控制位可以用了,故TL1在计满回零时不会产生溢出中断请求的。 显然,T0和T1设定为方式3实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个由软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生。由于TL1工作于无中断请求状态,故用它来作为串口可变波特 3、 为计数器赋值 计数器初值计算 TC =M ?C TC :计数器初值,M :计数器模值(2k ),C :把计数器计满的计数值 定时器初值计算 T =(M ?TC )T 计数 或 TC =M ?T/T 计数 M :模值,T 计数:单片机时钟周期T CLK (ΦCLK 的倒数)的12倍;TC 为定时器的定时初值,T 为欲定时的时间。 TC =M ?T ×ΦCLK /12 M :模值,ΦCLK :单片机时钟周期ΦCLK ;TC 为定时器的定时初值,T 为欲定时的时间。 例如:单片机主脉冲频率ΦCLK 为12MHz ,最大定时时间为: 方式0时 T MAX = 213×1us = 8.192ms 方式1时 T MAX = 216×1us = 65.536ms 方式2和方式3 T MAX = 28×1us = 0.256ms 4TR0:为0时,停T0计数;为1时,启T0计数

基于51单片机的计算器设计

目录 第一章引言 (3) 1.1 简述简易计算器 (3) 1.2 本设计主要任务 (3) 1.3 系统主要功能 (4) 第二章系统主要硬件电路设计 (4) 2.1 系统的硬件构成及功能 (4) 2.2 键盘电路设计 (5) 2.3 显示电路设计 (6) 第三章系统软件设计 (7) 3.1 计算器的软件规划 (7) 3.2 键盘扫描的程序设计 (7) 3.3 显示模块的程序设计 (8) 3.4 主程序的设计 (9) 3.5 软件的可靠性设计 (9) 第四章调试 (9) 第五章结束语 (10) 参考文献 (11) 附录源程序 (11)

第一章引言 1.1 简述简易计算器 近几年单片机技术的发展很快,其中电子产品的更新速度迅猛。计算器是日常生活中比较的常见的电子产品之一。如何才能使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器呢? 本设计是以AT89S52单片机为核心的计算器模拟系统设计,输入采用4×6矩阵键盘,可以进行加、减、乘、除9位带符号数字运算,并在LCD1602上显示操作过程。 科技的进步告别了以前复杂的模拟电路,一块几厘米平方的单片机可以省去很多繁琐的电路。现在应用较广泛的是科学计算器,与我们日常所用的简单计算器有较大差别,除了能进行加减乘除,科学计算器还可以进行正数的四则运算和乘方、开方运算,具有指数、对数、三角函数、反三角函数及存储等计算功能。计算器的未来是小型化和轻便化,现在市面上出现的使用太阳能电池的计算器, 使用ASIC设计的计算器,如使用纯软件实现的计算器等,未来的智能化计算器将是我们的发展方向,更希望成为应用广泛的计算工具。 1.2 本设计主要任务 以下是初步设定的矩阵键盘简易计算器的功能: 1.扩展4*6键盘,其中10个数字,5个功能键,1个清零 2.强化对于电路的焊接 3.使用五位数码管接口电路 4. 完成十进制的四则运算(加、减、乘、除); 5. 实现结果低于五位的连续运算; 6. 使用keil 软件编写程序,使用汇编语言; 7. 最后用ptoteus模拟仿真; 8.学会对电路的调试

基于51单片机的多功能定时器

摘要 本设计要求以单片机为核心主体,完成最小系统板的设计与制作(通过Protel 软件,对电路进行设计,调试。生成PCB板,再对元器件进行排布,焊接。)之后要进行初调试,证实电路板无误后才能进行下面的内容。电路板完成后,在总程序基础上通过编程设计家用多路定时控制器。本课程设计目标:具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。但重要的是要有一定的创新,因为此系统还有很多值得开发的功能,单纯的三路定时只是设计内容的基本要求。 关键词:Protel,单片机,MCS-51

目录 摘要........................................................................................................ - 1 - 引言........................................................................................................ - 2 - 1 绪论.................................................................................................... - 2 - 1.1系统背景 (1) 1.1.1单片机技术及其发展特点 (1) 1.1.2单片机在电子技术中的应用 (3) 1.1.3课程设计的内容与任务 (4) 2 系统电路设计 (5) 2.1 系统总体设计框架结构 (5) 2.2 系统硬件单元电路设计 (6) 2.2.1 时钟电路设计 (6) 2.2.2 复位电路设计 (6) 2. 2.3 按键电路设计 (7) 2.3数码管电路设计 (8) 2.3.1、数码管的分类 (8) 2.3.2、数码管的驱动方式 (8) 2.3 系统硬件总电路 (14) 3 系统软件设计 (10) 3.1 系统软件流程图 (10) 4 实验结果和分析 (11) 4.1 实验使用的仪器设备 (11) 4.2 测试结果分析 (11) 结论 (12) 参考文献 (13) 附录 (13) 系统程序设计 (15) Abstract (25) 致谢 (25)

MCS-51单片机计数器定时器

80C51单片机内部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。 : 从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成。其访问地址依次为8AH-8DH。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1 (P3.5)输入。 定时计数器的原理: 16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。 当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz,则计数周期为: T=1/(12×106)Hz×1/12=1μs 这是最短的定时周期。若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长 度(如8位、13位、16位等)。 当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平。若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由1至0的跳变需要两个机器周期,故外部事年的最高计数频率为振荡频率的1/24。例如,如果选用12MHz 晶振,则最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。

基于51单片机的计算器设计程序代码汇编

DBUF EQU 30H TEMP EQU 40H YJ EQU 50H ;结果存放 YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放 ORG 00H START: MOV R3,#0 ;初始化显示为空MOV GONG,#0 MOV 30H,#10H MOV 31H,#10H MOV 32H,#10H MOV 33H,#10H MOV 34H,#10H MLOOP: CALL DISP ;PAN调显示子程序WAIT: CALL TESTKEY ; 判断有无按键JZ WAIT CALL GETKEY ;读键 INC R3 ;按键个数 CJNE A,#0,NEXT1 ; 判断就是否数字键 LJMP E1 ; 转数字键处理NEXT1: CJNE A,#1,NEXT2 LJMP E1 NEXT2: CJNE A,#2,NEXT3 LJMP E1 NEXT3: CJNE A,#3,NEXT4 LJMP E1 NEXT4: CJNE A,#4,NEXT5 LJMP E1 NEXT5: CJNE A,#5,NEXT6 LJMP E1 NEXT6: CJNE A,#6,NEXT7 LJMP E1 NEXT7: CJNE A,#7,NEXT8 LJMP E1 NEXT8: CJNE A,#8,NEXT9 LJMP E1 NEXT9: CJNE A,#9,NEXT10 LJMP E1 NEXT10: CJNE A,#10,NEXT11 ;判断就是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12 LJMP E2 NEXT12: CJNE A,#12, NEXT13 LJMP E2

基于51单片机的数字计算器的设计

《单片机技术及其应用》课程设计报告 专业:通信工程 班级:09312班 姓名:某某某 学号:09031069 指导教师: 二0一二年六月十八日

目录 1设计目的 (1) 2 设计题目描述与要求 (1) 3 设计过程 (2) 4硬件总体方案及说明 (6) 5 软件总体方案及设计流程 (9) 6 调试与仿真 (13) 7 心得体会 (14) 8 指导老师意见 (15) 9 参考文献 (16) 附录一 (16) 附录二 (21)

基于51单片机的数字计算器的设计 1设计目的 简易计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用和单片机完整程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。单片机课程设计既巩固了课本学到的理论,还学到了单片机硬件电路和程序设计,简易计算器课程设计通过自己动手用计算机电路设计软件,编写和调试,最后仿真,来加深对单片机的认识,充分发挥我们的个人创新和动手能力,并提高我们对单片机的兴趣,同时学习查阅资料、参考资料的方法。 本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED 上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件选择AT89C51单片机和74ls164,输入用4×4矩阵键盘。显示用5位7段共阴极LED静态显示。软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。选用编译效率最高的Keil软件进行编程,并用proteus仿真。 2 设计题目描述与要求 基于AT89C51数字计算器设计的基本要求与基本思路: (1)扩展4*4键盘,其中10个数字,5个功能键,1个清零 (2)使用五位数码管接口电路

基于单片机实现的定时器设计

第一章单片机的简介 一个8位的80c51微处理器,片内256字节数据存储器RAM/SFR,用以存放可以读写的数据,如运算的中间结果,最终结果以及欲显示的数据;片内4kb程序存储器Flash ROM,用以存放程序,一些原始数据和表格;4个8位并行I/O 口P0~P3,每个端口既可用作输入,也可用作输出;两个16位的定时器/计数器,每个定时器/计数器都可设置成计数方式,用以对外部事件进行计数,也可设置成定时方式,并可以根据计数或者定时的结果实现计算机控制;具有5个中断源,两个中断优先级的中断控制系统;一个全双工UART(通用异步接受发送器)的串行I/O口,用于实现单片机之间或者单片机与PC机之间的串行通信;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接,最高允许震荡频率为24MHz;89c51与80c51相比具有节电工作方式,即休闲方式及掉电方式。 1.1中央处理器(CPU): CPU是单片机内部的核心部件,是一个8位二进制数的中央处理单元,主要由运算器、控制器和寄存器阵列构成。 1.1.1 运算器: 运算器用来完成算术运算和逻辑运算功能,它是 89C51内部处理各种信息的主要部件。运算器主要由算术逻辑单元(ALU)、累加器(ACC)、暂存寄存器(TMP1、TMP2)和状态寄存器(PSW)组成。算术逻辑单元(ALU): 89C51中的ALU由加法器和一个布尔处理器组成。

累加器(ACC):用来存放参与算术运算和逻辑运算的一个操作数或运算的结果。暂存寄存器(TMP1、TMP2):用来存放参与算术运算和逻辑运算的另一个操作数,它对用户不开放。 状态寄存器(PSW):PSW是一个8位标志寄存器,用来存放ALU操作结果的有关状态。 1.1.2控制器: 控制器是单片机内部按一定时序协调工作的控制核心,是分析和执行指令的部件。控制器主要由程序计数器PC、指令寄存器IR、指令译码器ID和定时控制逻辑电路等构成。程序计数器PC是专门用于存放现行指令的16位地址的。CPU 就是根据PC中的地址到ROM中去读取程序指令码和数据,并送给指令寄存器IR 进行分析。指令寄存器IR用于存放CPU根据PC地址从ROM中读出的指令操作码。指令译码器ID是用于分析指令操作的部件,指令操作码经译码后产生相应于某一特定操作的信号。定时控制逻辑中定时部件用来产生脉冲序列和多种节拍脉冲。1.1.3寄存器阵列: 寄存器阵列是单片机内部的临时存储单元或固定用途单元,包括通用寄存器组和专用寄存器组。通用寄存器组用来存放过渡性的数据和地址,提高CPU的运行速度。 专用寄存器组主要用来指示当前要执行指令的内存地址,存放特定的操作数,指示指令运行的状态等。 1.1.4存储器: 89C51单片机内部有256个字节的RAM数据存储器和4KB的闪存程序存储器

基于51单片机的简易计算器设计

河南##############学校 毕业设计(论文) 基于51单片机的简易计算器 系部: 自动控制系 专业: 电气自动化 班级: 自083 姓名: 崔 # # 学号: 091415302 指导老师: 许 # 二零一二年五月八日

基于51单片机的简易计算器 摘要 工程实践教学环节是为了学生能够更好地巩固和实践所学专业知识而设置的,在本次工程实践中,我以《智能化测量控制仪表原理与设计》、《MCS-51系列单片微型计算机及其应用》课程中所学知识为基础,设计了简易计算器。本系统以MCS-51系列中的8051单片机为核心,能够实现多位数的四则运算。该系统通过检测矩阵键盘扫描,判断是否按键,经数据转换把数值送入数码管动态显示。本系统的设计说明重点介绍了如下几方面的内容:基于单片机简易计算器的基本功能,同时对矩阵键盘及数码管动态显示原理进行了简单的阐述;介绍了系统的总体设计、给出了系统的整体流程框图,并对其进行了功能模块划分及所采用的元器件进行了详细说明;对系统各功能模块的软、硬件实现进行了详细的设计说明。 关键词:MCS-51;8051单片机;计算器;加减乘除

Based on the simple calculator 51 SCM Abstract The engineering practice teaching is to students better to consolidate and practice have set up by the professional knowledge, in this engineering practice, I to the intelligent measurement control instrument principle and design ", "the MCS-51 series single chip computer and its application" course knowledge as the foundation, the design the simple calculator. This system to MCS-51 of the 8051 series single chip microcomputer as the core, can realize the connection arithmetic. The system through the test matrix keyboard scan, judge whether key, the data transfer the numerical into digital tube dynamic display. This system mainly introduced the design that the following aspects of content: based on single chip microcomputer simple calculator basic functions, and the matrix keyboard and a digital tube dynamic display of the principle of a simple expatiated; introduced the design of the whole system, the whole process of the system are discussed, and its function module partition and the components for a detailed explanation; the functional modules of the system hardware and software of the implementation of the detailed design instructions. Key words: MCS-51;8051 single chip microcomputer;Calculator;Add, subtract, multiply and divide:

51单片机定时器初值的计算

51单片机定时器初值的计算 一。10MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。 65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。 65536-9216=56320(dc00) TH0=0xdc,TL0=0x00 二。50MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。 65536-50000=15536(3cb0) TH0=0x3c,TL0=0xb0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 65536-46080=19456(4c00) 三。使用说明 以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出 最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。 对12MHz 1个机器周期 1us 12/fosc = 1us 方式0 13位定时器最大时间间隔 = 2^13 = 8.192ms 方式1 16位定时器最大时间间隔 = 2^16 = 65.536ms 方式2 8位定时器最大时间间隔 = 2^8 = 0.256ms =256 us 定时5ms, 计算计时器初值 M = 2^K-X*Fosc/12 12MHz 方式0 : K=13,X=5ms,Fosc=12MHz 则 M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78 THx = 0CH,TLx = 78H, 方式1: K=16,X=5ms,Fosc=12MHz 则 M = 2^16 - 5*10^(-3)*12*10^6/12= 60536 = 0xEC78

基于单片机的简易计算器设计

2013 - 2014 学年_一_学期 山东科技大学电工电子实验教学中心 创新性实验研究报告 实验项目名称__基于51单片机的简易计算器设计_ 2013 年12 月27 日

四、实验内容

2、实验内容 (一)、总体硬件设计 本设计选用AT89C52单片机为主控单元。显示部分:采用六位LED动态数码管显示。按键部分:采用2*8键盘;利用2*8的键盘扫描子程序,读取输入的键值。 (二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用两条I/O 线作为行线,八条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为2×8个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口和另一个P口的两个管脚实现16个按键功能,这种形式在单片机系统中也最常用。 矩阵键盘布局图: 矩阵键盘内部电路图如下图所示:

(三)、LED显示模块 本设计采用LED数码显示来显示输出数据。通过D0-D7引脚向LED写指令字或写数据以使LED实现不同的功能或显示相应数据。 (四)运算模块(单片机控制) MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。 单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。

基于51单片机内部定时器的简易闹钟课程设计论文

基于51单片机内部定时器的简易闹钟 摘要 现代社会电子闹钟已广泛用于各种私人和公众场合,成为我们生活、工作和学习中不可缺少的好帮手,因此研究实用性更强的电子闹钟具有十分重要的意义。本设计是基于单片机的电子钟设计,不仅具有时分秒的显示功能,还具有双闹铃和倒计时的功能,实用性非常强。电子钟的计时部分采用AT89S52单片机内部定时器实现,而显示功能是采用液晶模块LCD1602来实现,该电子闹钟可以让使用者通过按键来轻松选择的功能菜单和调节时间,具有非常良好地人机界面。 关键词:电子闹钟;倒计时;AT89S52;液晶LCD1602;按键 Abstract In modern society, the electronic alarm clock has been widely used in various occasions and become indispensable to life.It is a good helper to our work and learning. So,there is very important significance to research more practical electronic alarm clock.This design is based on single chip microcomputer,It has display function of hours,minutes and seconds,dual alarm and countdown.The internal timer of AT89S52 achieve the part of time.The liquid crystal LCD1602 achieve the part of display.The users can use the push-buttons to choice the menu of functions and adjust the time.The man-machine interface is very good. Key words: electronic alarm; countdown; AT89S52; liquid crystal LCD1602; button

基于51单片机的简易计算器

目录 摘要....................................................................................... 第一章绪论......................................................................... 1.1课题简介.................................................................... 1.2设计目的.................................................................... 1.3简易计算器系统简介....................................................第二章总体电路设计..........................................................第三章主要模块介绍.......................................................... 3.1AT89C51....................................................................... 3.2LED数码管的结构及工作原理......................................... 3.3 矩阵按键.................................................................. 3.4 蜂鸣器模块...............................................................第四章计算器系统设计..................................................... 4.1计算器硬件............................................................... 4.2 系统框图.................................................................. 4.3 程序设计..................................................................结语.....................................................................................参考文献..............................................................................

51单片机实现数码管99秒倒计时

51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。 目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。 定时器定时时间计算公式:初值X=M(最大计时)-计数值。 初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。 M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S 计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。 下面为实现99秒倒计时C语言源程序 /*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/ /*数码管,12M晶振*/ #include #define uchar unsigned char sbit p11=P1^1; //连的是继电器。。 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shiwei; uchar gewei; void delay(unsigned int cnt) { while(--cnt); } void main() { TMOD|=0x01; /*定时器0 16位定时器X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms */ TH0=0xd8; TL0=0xf0; IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时

单片机定时器实验

实验三单片机内部定时器应用 实验目的 1、理解单片机内部定时器的工作原理及使用方法 2、了解单片机定时中断程序的编写和调试方法 3、掌握定时器的基本使用方法 实验仪器 单片机开发板、万利仿真机、稳压电源、计算机 实验原理 1、单片机定时器的工原理 MCS-51 单片机内部有两个16 位可编程的定时器/计数器T0 和T1。它们即可用作定时器方式,又可用作计数器方式。其中T0 由TH0 和TL0 计数器构成;T1 由TH1 和TL1 计数器构成。 工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。故系统晶振频率直接影响定时时间。如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×12=1us 加1。 工作于计数器方式时,对或管脚的负跳变(1→0)计数。它在每个机器周期的S5P2 时采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。 特殊功能寄存器TMOD 用于定时器/计数器的方式控制。高4 位用于设置T1,低4 位用于设置T0。如图4-7所示。 图4-7 定时器模式控制字格式

TCON 寄存器用于定时器的计数控制和中断标志。如图4-8所示。 图4-8 定时控制寄存器数据格式 编写程序控制这两个寄存器就可以控制定时器的运行方式。 单片机内部定时器/计数器的使用,简而概之:(1)如需用中断,则将EA 和相关中断控制位置1;(2)根据需要设置工作方式,即对TMOD 设置;(3)然后启动计数,即对TR0或TR1置1。(4)如使用中断,则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。 2、 用定时器编写一个秒计时器 假设系统使用的晶振频率为12MH Z ,即每个机器周期为1us 。如使用方式1,则定时时间最长是216 ×1us=65536us=,小于1s 。故必须设置一个软件计数单元,即假设定时器定时中断时间为50ms ,则必须定时中断20次才达到1s 并对秒计时单元加1,20即为软件计数次数。最后再把秒计时单元的值转成显示数码送显示缓冲区。 图4-9 定时器应用程序流程图

51单片机定时器使用

51单片机定时器使用——小灯闪烁一、定时器工作方式设置TMOD=0x01 GATE =0 由TR=1控制开始计时; C/ T=0 作为定时时器使用; M1=0\M0=1 用作16位定时器 二、计数寄存器TH0\TL0初始值计算如定时0.02秒 普通51单片机12T模式: (一)手工计算例如晶振为10.6850MHZ 定时20毫秒 X/10.6850*1000000*12=20毫秒 X=17808 原始值T0=Y Y+17808=65536 Y=47728 利用科学计算器进行16进制转换为0Xb800 TH0=0x80 TL0=0x00 (二)单片机公式计算 TL0=T1MS;//初始化定时的计数初值(第8位),高8位丢失 (三)启动定时器(TR0=1),判断是否溢出(If(TF0==1){//}),时间到。 (四)闪烁的小灯代码 #include //P1 0脚接LED小灯 sbit led=P1^0;

//定义延时函数,循环cs次,时间长为20*cs毫秒 void delay20(unsigned int cs) { unsigned int shuL=0; TMOD=0x01; //初始值根据单片机时钟频率计算 TH0=0xB8; TL0=0x00; //启动定时器 TR0=1; while(shuL<=cs) { if(TF0==1) //查询是否溢出,溢出后复位溢出标志,赋初始值,循环计数加。{TF0=0; TH0=0xBA; TL0=0x70; shuL=shuL+1; } } } void main()

{ delay20(500); //小灯取反,亮500*20毫秒,即10秒; led=~led; delay20(500); }

基于51单片机的简易计算器设计

基于单片机的简易计算器设计 摘要 (2) 关键字:80C51 LCD1602 4*4矩阵键盘计算器 (2) 第一章绪论 (3) 1、1系统开发背景 (3) 1、2系统开发意义 (3) 1、3设计目的 (3) 1、4设计任务 (3) 第二章单片机发展现状 (4) 2、1目前单片机的发展状况 (4) 2、1、1单片机的应用场合 (4) 2、2计算器系统现状 (5) 2、3简易计算器系统介绍 (5) 第三章系统硬件设计及说明 (6) 3、1系统组成及总体框图 (7) 3、2AT89S52单片机介绍 (7) 3、3其它器件介绍及说明 (10) 3、3、1 LCD1602液晶显示 (10) 3、3、2 4*4矩阵扫描按键 (13) 第四章 PROTEUS模拟仿真 (14) 第五章系统硬件设计及说明 (16) 第六章软件设计 (17) 6、1汇编语言与C语言的特点及选择 (17) 6、2源程序代码 (17)

摘要 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测与自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识就是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。 计算机在人们的日常生活中就是比较常见的电子产品之一。可就是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计主要以80C51单片机为控制芯片,用C语言进行编程实现,通过4*4矩阵键盘控制,输出用液晶屏LCD1602显示,该计算器可以实现一般的加减乘除四则混合运算。 关键字:80C51 LCD1602 4*4矩阵键盘计算器

相关文档
最新文档