电子时钟计时器的设计(c语言版_调试完美通过_可直接使用)(附原理图源程序以及完整的文档)..
- 格式:doc
- 大小:820.54 KB
- 文档页数:39
C语言Lcd1602万年历闹钟Proteus仿真单片机毕业课程电子设计
C语言Lcd1602万年历闹钟Proteus仿真单片机设计
AT89C51+Lcd1602+DS1302+独立按键+蜂鸣器
Lcd1602万年历闹钟。
时间信息来自DS1302,显示采用
Lcd1602,蜂鸣器提供闹音和按键提示音。
液晶上面显示年月日时分秒星期以及闹钟时间。
有时间调节和闹钟调节,可以调节年月日时分秒星期信息以及闹钟时间。
具体介绍如下。
1.做好的仿真图,如下图所示。
2.启动仿真后,先在液晶屏显示系统信息,然后在第二屏显示需要的万年历闹钟信息。
如下图所示!
3.通过单片机右侧的三个按键,即可设置闹钟。
如下图所示。
4.通过单片机左侧的四个按键,来设置年月日时分秒星期的值。
设置时,参数闪烁,同时会有按键提示音。
5.本设计默认套餐1,具体套餐详情请看下面的发货清单。
如需要其它套餐,请联系客服询问。
详情请:点击此处。
制作一个电子时钟C语言版平常我们常见的电子时钟,能够显示当下的时分秒信息,并且能够随时变化递增,记录着时间的流逝。
今天,我要用c语言来制作这样一款电子时钟,看时间这把杀猪刀如何“一刀一刀”溜掉。
我会一步一步引导大家了解制作过程。
首先,我们可以想到,需要获取系统的时间函数,并且显示在cmd控制台中。
time.h是c/c++日期和时间头文件,用于获取系统日期和时间等要求。
首先给出提取显示当前时间的1.0版本电子时钟。
#include<stdio.h>#include<time.h>#include<string.h>int main(){char str[50];//定义字符串用于存储时间time_t t;struct tm *nt;//tm是time.h中定义的一个结构体t=time(NULL);nt=localtime(&t);//获取当前时间strftime(str,50,"%Y-% m-%d %H:%M:%S ",nt);//strftime是根据当前计算机区域设置格式化本地时间日期printf("现在时刻:%s\n",str);//打印现在时刻getch();return 0;}运行的结果如下:可以看出,的确做到了显示当前时间,但是很明显这不是电子时钟,电子时钟要不断运行变换时间,而不是让时间凝滞。
那么,我们怎么实现真正的电子时钟呢?我们一起思考:如果要实现时间变化,需要不断重新获取当前时间,并且将之前的显示清除掉,然后再打印显示当前时间,这样循环往复。
所以,需要增加一个while(1)死循环,同时要增加一个清屏函数,清除原来的显示。
清屏函数常用的就是system("cls")。
下面是改进后的2.0版代码。
#include<stdio.h>#include<time.h>#include<string.h>int main(){char str[50];time_t t;struct tm *nt;while(1){system("cls");//清屏函数t=time(NULL);nt=localtime(&t);strftime(str,50,"%Y-%m-%d %H:%M:%S “,nt);printf("现在时刻:%s\n",str);}getch();return 0;}然后运行程序,就可以实现电子时钟了,时间不断刷新,秒数递增,时间随之递增。
51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)效果图:程序如下://51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*///此表为LED 的字模,共阴数码管0-9 -uchar code dispcode[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制/*定义并初始化变量*/uchar seconde=0;//秒uchar minite=0;//分uchar hour=12; //时uchar shi=0;//闹铃功能uchar fen=0;uchar bjcs;//报警次数sbit P1_0=P1^0; //second 调整定义sbit P1_1=P1^1; //minite调整定义sbit P1_2=P1^2; //hour调整定义sbit P1_5=P1^5; //整点报时sbit P1_3=P1^3; //闹铃功能,调整时间sbit P1_6=P1^6; //调整时sbit P1_7=P1^7; //调整分sbit P1_4=P1^4; //关闭闹铃/*函数声明*/void delay(uint k ); //延时子程序void time_pro( ); //时间处理子程序void display( ); //显示子程序void keyscan( ); //键盘扫描子程序/*xx子程序*/void delay (uint k){uchar j;while((k--)!=0){for(j=0;j<125;j++){;}}}/*时间处理子程序*/void time_pro(void){if(seconde==60){seconde=0;minite++;if(minite==60){minite=0;hour++;if(hour==24){hour=0;}}}}/*显示子程序*/void display(void){if(P1_3==1){P2=0XFE; P0=dispcode[seconde%10];//秒个位delay(1);P2=0XFD;P0=dispcode[seconde/10];//秒十位delay(1);P2=0XFB;P0=dispcode[10];//间隔符-delay(1);P2=0XF7;P0=dispcode[minite%10];//分个位delay(1);P2=0XEF;P0=dispcode[minite/10];//分十位delay(1);P2=0XDF;P0=dispcode[10];//间隔符-delay(1);P2=0XBF;P0=dispcode[hour%10];//时个位delay(1);P2=0X7F;P0=dispcode[hour/10];//时十位delay(1);}}/*键盘扫描子程序*/void keyscan(void){if(P1_0==0)//秒位的调整{delay (30);if(P1_0==0){seconde++;if(seconde==60){seconde=0;}}delay(250);}if(P1_1==0)//分位的调整{delay(30);if(P1_1==0){minite++;if(minite==60){minite=0;}}delay(250);}if(P1_2==0)//时位的调整{delay(30);if(P1_2==0){hour++;if(hour==24){hour=0;}}delay(250);}}/*整点报警*/void zhengdian (void){if((seconde==0)&(minite==0))//整点报时{P1_5=0;delay(1000);P1_5=1;}}/*定时闹钟*/void dingshi(void){if(P1_3==0)//按住P1_3BU不松,显示闹铃设置界面,分别按P1_6、P1_7设置闹铃时间。
电子时钟设计及程序电子时钟是一种数字时钟,它通过利用电子元件和计算机程序来显示时间。
设计和制作一个电子时钟需要一定的电子知识和编程能力。
下面将介绍电子时钟的设计及程序。
首先,电子时钟的设计需要以下主要元件:1. 微控制器:选择适合的微控制器,如Arduino、Raspberry Pi等。
它能够控制显示模块和计时功能,还可以通过编程实现其他功能,如闹钟、定时器等。
2.显示模块:可以选择LED数码管、LCD显示屏等,用于显示小时、分钟和秒数。
可以根据需要选择不同的尺寸和颜色。
3.时钟电路:为了使时钟具备准确的时间显示功能,需要使用一个时钟电路。
可以选择实时时钟模块,如DS1302/DS3231等,这些模块可以提供准确的时间信号。
同时,还需要一个电池来保存时间设置,以防断电时时间丢失。
4.按钮:可以选择不同的按钮来实现设置时间、调整亮度等功能。
按钮可以设定为增加、减少和选择不同的模式,比如调整分钟、小时、日期等。
5.电源:需要选择适合的电源供电模块,以提供电子元件稳定的工作电压。
其次,需要制定一个程序来控制电子时钟的功能。
以下是一个用Arduino编写的简单示例程序:```#include <Wire.h>#include <RTClib.h>RTC_DS1307 rtc;void setupWire.begin(;rtc.begin(;// 设置rtc时间为编译时间rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//设置亮度、默认显示模式等//...void loopDateTime now = rtc.now(;//显示小时、分钟和秒数displayTime(now.hour(, now.minute(, now.second(); //按钮控制//...void displayTime(int hour, int minute, int second) //数码管显示//...```以上为电子时钟的基本设计及程序示例。
电子钟设计c语言设计电子钟是一种使用数字或者模拟显示时间的时钟。
它通常使用数字显示屏或者液晶屏来显示时间。
电子钟的优势在于与传统机械钟相比,它更加准确、可靠、精准和方便。
通过使用c语言来设计电子钟可以使它更加智能化和强大。
我们知道,c语言是一种通用的高级编程语言,它非常适合用于系统编程和应用程序开发。
电子钟的设计需要运用c语言的数据结构、算法、指针和其他通用编程技术。
设计一个可靠的电子钟需要考虑到准确显示时间、时区调整、闹钟功能、定时器和更多的功能。
在设计电子钟时,我们首先需要考虑到选择合适的开发平台和硬件选型。
例如,我们可以使用Arduino或者Raspberry Pi 等开发板来设计电子钟。
这些开发板既能提供强大的计算能力,又可以提供足够的GPIO引脚和通信接口。
同时,我们还需要选择合适的时钟模块,例如DS1307、DS3231和DS1302等。
接下来,我们可以考虑设计程序框架。
设计程序框架需要考虑到用户需求,从而使程序有条不紊地进行。
我们可以设计菜单选项来满足用户需求,例如时钟显示、日期显示、温度显示等等。
此外,还可以考虑添加一些有趣的功能,例如给予经度和纬度计算日出日落时间以及天气预报等。
电子钟的时间显示通常使用RTC模块与单片机进行通信。
RTC模块可以提供秒、分、时、日、月、年等时间数据。
我们需要从RTC模块读取这些数据,并将它们转换成格式化的字符串进行显示。
我们还需要考虑到时区的调整,以便在不同时区下准确显示时间。
闹钟功能是电子钟的一个重要特性。
我们可以设计界面来设置闹钟时间和日期。
当闹钟响起时,电子钟可以触发警报并发出声音或声音和振动提醒。
我们还可以增加关闭闹钟的选项,以便用户可以在闹钟响起时快速关闭它。
另一个特色功能是定时器,它可以用来进行倒计时或计时操作。
我们可以使用按钮或者旋转编码器来设置定时器时间。
定时器可以在倒计时或计时完成时发出警报来通知用户,以便执行相应的操作。
最后,我们需要考虑到电子钟的可扩展性和灵活性。
基于51的电⼦闹钟设计报告(附原理图、PCB图、程序)成都信息⼯程学院第五届嵌⼊式创新技术⼤赛基于MCS51的智能电⼦闹钟设计报告姓名学院班级实物图⽬录1.电⼦时钟的设计原理和⽅法 (1)1.1设计原理 (1)1.2 硬件电路的设计 (1)1.2.1 STC89C51RC简介 (1)1.2.2 键盘电路的设计 (2)1.2.3蜂鸣器驱动电路 (3)1.2.4 数码管驱动电路 (3)1.2.5 电源电路 (4)1.3软件部分的设计 (4)1.3.1主程序部分的设计 (4)1.3.2中断计时器及时间进位 (5)1.3.3 闹钟⼦函数 (7)1.3.4 按键扫描 (8)1.3.5 时钟闹钟设置 (9)1.3.6 显⽰数字函数 (10)1.3.7 显⽰界⾯函数 (10)1.3.8 闹钟记录及读取 (11)2.硬件调试 (13)附录A:电路原理图 (15)附录B:电路PCB图 (16)附录C:源程序 (17)1.电⼦时钟的设计原理和⽅法1.1设计原理系统框图1.2硬件电路的设计1.2.1 STC89C51RC简介STC89C52R CSTC89C51RC是⼀种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory )的低电压、⾼性能CMOS8位微型处理器,即单⽚机芯⽚。
单⽚机的可擦除只读存储器可以反复擦除1000次,内部FLASH 擦写次数为100000次以上。
该芯⽚使⽤⾼密度⾮易失存储制造技术,与⼯业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU 和闪烁存储器集成在单个芯⽚中,使得STC89C51RC 成为了⼀种性价⽐极⾼的微型处理器芯⽚,在许多电路设计中都得到了应⽤。
STC89C51RC 单⽚机特点:⼯作电压:5.5V-3.4V ⼯作频率:0-40MHz ⽤户应⽤程序空间:8K ⽚上集成128*8RAMISP (在系统可编程)/IAP (在应⽤可编程),⽆需专⽤编程器/仿真器可通过串⼝(P3.0/P3.1)直接下载⽤户程序EEPROM 功能共3个16位定时器/计数器,其中定时0还可以当成2个8位定时器使⽤外部中断4路通⽤异步串⾏⼝(UART ),还可⽤定时器软件实现多个UART ⼯作温度范围:0-75℃引脚说明:VCC:供电电压 GND :接地P0:P0是⼀个8位漏级开路双向I/O ⼝,低8位地址复⽤总线端⼝。
电子时钟工具的程序设计及代码示例为满足现代生活的需求,电子时钟成为人们生活中的常见工具。
除了具备实时显示时间的功能外,电子时钟还可以根据用户需求进行各种定制,如显示日期、倒计时、闹钟等功能。
本文将探讨电子时钟的程序设计方法,并提供一个简单的代码示例。
一、程序设计方法在进行电子时钟的程序设计前,我们需要确定以下几个关键因素:1. 使用的编程语言:根据实际情况选择合适的编程语言,如C++、Java、Python等。
2. GUI框架:确定使用什么图形界面框架,如Qt、Tkinter等。
3. 实时更新:确定时间的实时更新方式,可以利用计时器、循环等方式进行时间更新。
4. 用户交互:考虑用户是否需要与电子时钟进行交互,如设置闹钟、选择日期等。
二、代码示例以下是一个基于Python和Tkinter的电子时钟代码示例,代码注释中详细说明了每个函数的功能和实现方法:```pythonimport tkinter as tkfrom datetime import datetimedef update_time():# 获取当前时间current_time = datetime.now().strftime("%H:%M:%S")# 更新时间标签time_label.config(text=current_time)# 每隔1秒更新一次时间time_label.after(1000, update_time)# 创建窗口window = ()window.title("电子时钟")# 创建时间标签time_label = bel(window, font=("Arial", 100), bg="white") time_label.pack(pady=50)# 更新时间update_time()# 运行窗口主循环window.mainloop()```以上代码创建了一个简单的窗口,使用标签实时显示当前时间。
51 单片机 c 语言电子钟(已加入调时、闹铃、整点报时功能)效果图:程序如下://51 单片机c 语言电子钟(已加入调时、闹铃、整点报时功能)#include<reg51.h>#include<absacc.h>#define uchar unsigned char #define uint unsigned int /* 七段共阴管显示定义*/ // 此表为LED 的字模,共阴数码管0-9 - uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; // 段码控制/* 定义并初始化变量*/ uchar seconde=0;// 秒uchar minite=0;// 分uchar hour=12; // 时uchar shi=0;// 闹铃功能uchar fen=0;uchar bjcs;// 报警次数sbit P1_0=P1A0; //second 调整定义sbit P1_仁P1A1;//minite 调整定义sbit P1_2二PM2; //hour 调整定义sbitP1_5=P1A5; //整点报时sbit P1_3=P1A3; //闹铃功能,调整时间sbit P1_6=P1A6; //调整时sbit P1_7=P1A7; //调整分sbit P1_4=P1A4; //关闭闹铃/* 函数声明*/void delay(uint k ); // 延时子程序void time_pro( ); // 时间处理子程序void display( ); // 显示子程序void keyscan( ); // 键盘扫描子程序/*xx 子程序*/void delay (uint k){uchar j;while((k--)!=0){for(j=0;j<125;j++){;}}}/* 时间处理子程序*/void time_pro(void){if(seconde==60){seconde=0; minite++;if(minite==60){minite=0;hour++;if(hour==24){hour=0;}}}}/* 显示子程序*/void display(void){if(P1_3==1){P2=0XFE;PO=dispcode[seco nde%10];/秒个位delay(1);P2=0XFD;P0=dispcode[seco nde/10];〃秒十位delay(1);P2=0XFB;P0=dispcode[10];// 间隔符-delay(1);P2=0XF7;P0=dispcode[mi nite%10];〃分个位delay(1);P2=0XEF;P0=dispcode[minite/10];// 分十位delay(1);P2=0XDF;P0二dispcode[10];〃间隔符-delay(1);P2=0XBF;P0=dispcode[hour%10];〃时个位delay(1);P2=0X7F;P0=dispcode[hour/10];// 时十位delay(1);}}/* 键盘扫描子程序*/void keyscan(void){if(P1_0==0)//秒位的调整{delay (30);if(P1_0==0){seconde++;if(seconde==60){seconde=0;}}delay(250);}if(P1_仁=0)//分位的调整{delay(30);if(P1_1==0){minite++;if(minite==60){minite=0;}}delay(250);}if(P1_2==0)// 时位的调整{delay(30);if(P1_2==0){hour++;if(hour==24){hour=0;}}delay(250);}}/* 整点报警*/void zhengdian (void){if((seconde==0)&(minite==0))〃整点报时{P1_5=0;delay(1000);P1_5=1;}}/* 定时闹钟*/void dingshi(void){if(P1_3==0)〃按住P1_3BU不松,显示闹铃设置界面,分别按P1_6、P1_7设置闹铃时间。
一、功能要求整体上要考虑:结构简单大方、布局美观合理、操作方便易懂、尽量避免各元器件之间的相互影响。
1、以AT89C51单片机进行实现秒分时上的正常显示和进位,其中显示功能由单片机控制共阴极数码管来实现,数码管进行动态显示。
2、具有校时功能,按键控制电路其中时键、分键、秒键三个键分别控制时分秒时间的调整。
按秒键秒加1;按分键分加1;按时键时加1.二、硬件设计1、整体设计框图2、管脚功能描述(1) XTAL1(19 脚)和XTAL2(18 脚):振荡器输入输出端口,外接晶振电路。
(2)RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。
(3)P0口8个端口依次和LED显示器的A、B、C、D、E、F、G和Dp端口对应连接,实现对显示器的片选功能。
(4)P2.0~P2.5依次与LED显示器的1、2、3、4、5、6一一连接,实现对显示器的为选功能。
(5)P3.0~P3.2依次与按键电路的秒、分、时三个按键相连接。
通过按键实现对时间的调试功能。
3、整体原理设计其计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。
整个设计图由晶振电路、复位电路、AT89C51单片机、键盘控制电路组成。
显示电路将“时”、“分”、“秒”通过七段显示器显示出来,6个数码管的段选接到单片机的P0口,位选接到单片机的P2口。
数码管按照数码管动态显示的工作原理工作。
把定时器定时时间设为50ms,则计数溢出20次即得时钟计时最小单位秒,而20次计数可用软件方法实现,每累计60秒进1分,每累计60分钟,进1小时。
时采用24进制计时器,可实现对一天24小时的累计。
校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整,时分秒三个控制键分别接单片机的p3.2、p3.1、p3.0进行控制。
按一下秒键秒单元就加1 ,按一下分键分就加1,按一下时键时就加1。
4、晶振电路单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。
C单片机实现电子闹钟 Company number【1089WT-1898YT-1W8CB-9UUT-92108】课程名称:单片机原理与接口技术实践设计课题:基于MCS 51单片机实现电子闹钟功能的设计学院:电子与信息工程学院专业:通信工程小组成员:电子闹钟在科学技术高度发展的今天,千家万户都少不了它,所以很多家庭个人都需要有一个电子闹钟,为人们提供报时方便,但普通电子闹钟不够方便实用。
本文给出了一种基于MCS51单片机实现电子闹钟功能的设计方法,从而给人们带来更为方便的工作与生活。
一.电子闹钟简介我们设计的电子闹钟是以MCS 51单片机中的计时器作为时钟,用8位数码管显示当前时间,并且可以设置闹钟时间,并在设置的时间点发出闹铃。
简易闹钟具有以下功能:1.时钟能准确地走时,并可以通过数码管进行显示2.复位后可以进行当前时间的设置3.可以随意设置闹钟时间,闹钟会在设置时间响铃整个系统的任务要求:1)输入数字按键的功能。
保证数字的输入。
2)复位电路的功能。
所有时间回到初始化状态,用于启动设定时间参数(调时或设定闹钟时间);3)显示电路的功能。
当输入数字时显示24小时时间功能。
4)闹铃功能设置闹铃的时间后.能按设置好的时间准时闹铃。
二.系统方案的设计要求根据以上各模块并结合显示屏的功能及元器件材料的情况,决定采用AT89C51为内核显示设计方案。
先进行系统的整体规划确定整个系统的功能,然后按照每个功能的具体要求,进行各个模块的实物设计并逐个调试,待全部通过后,进行整个系统的联调,最终实现一个完整的系统。
整个系统的设计步骤如下:在单片机最小系统的基础上,完成按键电路和复位电路的设计。
完成显示电路、数字按键、单片机时钟电路。
Ⅰ硬件设计系统硬件的设计可以根据系统的各个功能,把整个系统划分成若干个模块,分别对这些模块来进行设计,然后在通过单片机程序来实现对各个硬件模块功能的调度。
本系统涉及到的硬件模块有:按键电路、数码管显示电路、单片机时钟电路、蜂鸣器电路。
湖南人文科技学院课程设计报告课程名称:单片机原理及应用课程设计设计题目:电子时钟的设计系别:通信与控制工程系专业:通信工程班级:09级通信二班学生姓名: 袁琦黄文付学号: 09416230 09416227起止日期:2011年12月20日~2011年12月30日指导教师:王善伟姚毅谢四莲教研室主任:刘建闽摘要时钟是人类日常生活必不可少的工具,本设计从日常生活中常见的事物入手,通过对电子时钟的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们对未知科学领域的探索。
本文利用单片机实现数字时钟计时功能的主要内容。
它体积小,成本低、功能强、使用方便、可靠性高等一系列优点,广泛应用于智能产业和工业自动化上。
本次设计采用独立式按键进行时间调整,其中STC89C52是核心元件,同时采用数码管LED动态显示“时”,“分”,“秒”的现代计时装置。
与传统机械表相比,它具有走时精确,显示直观等特点。
它的计时周期为24小时,显满刻度为“23时59分59秒”,另外利用DS1302具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。
该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。
关键词:STC89C52 ;LED数码管;8255芯片;DS1302芯片;目录设计要求 (1)1.方案论证与对比 (1)1.1方案一 (1)1.2方案二 (2)1.3方案对比 (2)2.系统硬件电路的设计 (3)2.1单片机的选择及引脚功能介绍 (3)2.2 8255A芯片的结构及引脚功能介绍 (4)2.3 DS1302芯片的结构及引脚功能介绍 (6)2.4显示电路设计 (7)2.5电源电路设计 (8)2.6键盘动态扫描电路设计 (8)3.控制系统的软件设计 (10)3.1主程序流程图 (10)3.2显示子程序 (11)3.3闹钟时间设定功能程序 (11)3.4键盘扫描程序 (12)4.系统功能调试与整体指标 (13)4.1硬件调试与分析 (13)4.2软件调试与分析 (13)4.3性能分析 (13)5.详细仪器清单 (14)6.总结与思考及致谢 (15)参考文献 (16)附录一:程序(方案一) (17)附录二:程序(方案二) (25)电子时钟的设计设计要求利用单片机作为控制核心,完成一个时钟计时器。
具体要求如下:(1)采用6位LED数码显示时、分、秒。
(2)时制式为24小时制。
(3)使用按键开关可实现时、分调整。
(4)秒表/时钟功能转换。
(5)定时设定提醒的功能。
(6)整点提醒(蜂鸣)。
(7)DS1302设时,对时,掉电记忆时间的功能。
1.方案论证与对比1.1方案一此方案采用单片机内部定时器T0进行计时,STC89S52实时控制。
如图1所示:P0 STC89C52单片机定时器P2PAPB8255PC6位LED数码管显示矩阵键盘蜂鸣器图 1 方案一系统方框图1.2方案二此方案采用专用时钟芯片DS1302精确计时,单片机STC89C52实时读取时钟显示至6位数码管。
如图2所示:P0 STC89C52单片机控制器P2PAPB8255PC6位LED数码管显示矩阵键盘蜂鸣器DS1302图 2 方案二系统方框图1.3方案对比以上方案中,方案一设计简洁,编程比较简单,计时精度不高,准确性不能完全保证。
虽硬件简洁、成本更低廉、便于实现,绿色环保,编程简单易写,不能达到提高同学们编程的能力和对单片机及其扩展芯片的学习和深程度的去了解单片机及其更广泛的应用,故在此我们选择挑战,放弃对其选择。
虽然我们对其进行了放弃,但我们也把此方法的程序写好以便进行对比。
方案二与方案一相比,编程比较复杂,计时精度较高,而且可以灵活运用,可扩展性好,并能充分的利用单片机的有效资源。
还可让我们培养我们的自学能力,自己去发掘单片机内部结构及其扩展功能,自己去学会怎样对其他芯片控制的学习方法,使得课程设计具有一定的挑战性,正因如此,故我们选择方案二。
2.系统硬件电路的设计2.1单片机的选择及引脚功能介绍STC89C52具有如下特点:40个引脚(引脚图如图四所示),4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,STC89C52RC设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
图4 STC89C52芯片引脚图引脚功能介绍:VCC(40):+5V;GND(20):接地;P0口(39-32):P0口为8位漏极开路双向I/O口,每引脚可吸收8个TTL门电流;P1口(1-8):P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流;P2口(21-28):P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流;P3口(10-17):P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流,P3口也可作为AT89C51的特殊功能口;RST(9):复位输入。
当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;ALE/PROG(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE 脉冲;PSEN(29):外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现;EA/VPP(31):当EA保持低电平时,外部程序存储器地址为(0000H-FFFFH)不管是否有内部程序存储器。
FLASH编程期间,此引脚也用于施加12V编程电源(VPP);XTAL1(19):反向振荡器放大器的输入及内部时钟工作电路的输入;XTAL2(18):来自反向振荡器的输出。
2.2 8255A芯片的结构及引脚功能介绍8255A芯片是Intel公司生产的通用可编程并行接口电路,广泛应用于单片机扩展并行I/O口。
它具有8个位并行口PA、PB和PC。
8255A芯片的内部结构及引脚如图5所示。
(1).8255A的内部结构8255A的内部结构有以下几部分组成:a.并行I/O端口A、B、C 8255A的内部有3个8位并行I/O口:A口、B口、C口。
3个I/O口都可以通过编程选择为输入口或输出口,但在结构和功能上有所不同。
A口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器。
B口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器(不锁存)。
C口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器(不锁存)。
当数据传送不需要联络信号时,这3个端口都可以用作输入口或输出口。
当A 口B口需要有联络信号时,C口可以作为A口和B口的联络信号线。
b.工作方式控制电路:8255A的三个端口在使用使可分为A、B两组。
A组包括A口8位和C口高4位:B组包括B口8位和C口低4位。
两组的控制电路中分别有控制寄存器,根据写入的控制字决定两组的工作方式,也可对C口每一位置“1”或清“0”。
c.数据总线缓冲器:数据总线缓冲器是三态双向的8位缓冲器,是8255A与单片机数据总线的接口,8255A的D0~D7可以和AT89C51单片机的P0.0~P0.7直接相连。
数据的输入输出、控制字和状态信息的传递,均可通过数据总线缓冲器进行。
d.读/写控制逻辑:8255A读/写控制逻辑的作用是从CPU的地址和控制总线上接受有关信号,转变成各种控制命令送到数据缓冲器及A组和B组的控制电路,控制A、B、C3个端口的操作。
其引脚图如图5所示:图5 8255引脚图引脚功能介绍:8255A共有40个引脚,一般为双列直插DIP封装,40个引脚可分为与CPU连接的数据线、地址和控制信号以及与外围设备连接的三个端口线。
D0~D7:双向三态数据总线。
RESET:复位信号,输入,高电平有效。
复位后,控制寄存器清0,A口、B口、C口被置为输入方式。
CS:片选信号,输入,低电平有效。
RD.:读信号,输入,低电平有效。
有效时,允许CPU通过8255A D0~D7读取数据或状态信息。
WR.:写信号,输入,低电平有效。
有效时,允许A1A0:端口控制信号,输入。
2位可构成四种状态,分别寻址A口、B口、C 口和控制寄存器PA0~PA7:A口数据线,双向。
PB0~PB7:B口数据线,双向。
PC0~PC7:C口数据/信号线,双向。
当8255A工作于方式0时,PC0~PC7分为两组(每组4位)并行I/O数据线;当8255A工作于方式1或方式2时,PC0~PC7为A口、B口提供联络信号。
2.3 DS1302芯片的结构及引脚功能介绍DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
(1).DS1302的引脚功能及结构DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。