当前位置:文档之家› 万年历程序和电路图

万年历程序和电路图

万年历程序和电路图
万年历程序和电路图

目录

第一章设计方案 (1)

1.1.硬件设计 (1)

1.1.1设计要求 (1)

1.1.2硬件框图 (1)

1.1.3硬件选择 (1)

1.2软件设计 (3)

1.2.1编程环境及语言 (3)

1.2.2程序框图 (3)

第二章系统设计 (4)

2.1硬件设计 (4)

2.1.1振荡电路 (4)

2.1.2复位电路 (4)

2.1.3按键 (4)

2.1.4 lcd显示电路 (5)

2.1.5音乐播放电路 (5)

2.1.6 P0上拉电阻计算 (6)

2.2软件设计 (7)

2.2.1程序流程图 (7)

2.2.2流程的各个模块设计 (9)

心得体会 (21)

附录 1. 元器件表 (22)

附录 2.程序源代码 (23)

1602.c文件 (23)

Clock.H文件 (27)

Music.h文件 (45)

LCD1602.H文件 (47)

参考文献 (54)

引言

单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括三大功能:实时

显示年、月、日、时、分、秒;实现位调;附加播放音乐功能。

本设计是基于A T89C51和LCD1602液晶显示器设计的可调式电子钟。该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有4KB的ROM,能够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便。显示器件采用通用型1602液晶,可显示32个字符,如果使用数码管来做显示器件需消耗大量的系统资源,因此采用低功耗的1602液晶,该液晶显示方便,功能强大,完全能满足数字万年历的显示要求。

通过此次设计能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件设计能力以及软件设计能力。

第一章设计方案

1.1.硬件设计

1.1.1设计要求

实现年月日、时分秒、星期的显示功能,用两个按键来实现日期和时间的调整功能,调整要求星期能自动更新,且能实现位调。显示格式:四位年,两位月,两位日,星期字母前三位,两位时,两位分,两位秒。比如:

YYYY-MM-DD WEEK

HH:MM:SS

1.1.2硬件框图

显示器

控制芯片

按键调整

图1-1-硬件框图

日期时间由硬件软件结合产生;按键之间相互配合完成当前日期时间的调整功能。过程与结果由控制芯片分别输出到显示器上。

本设计附加了播放音乐的功能。音乐从蜂鸣器产生。

1.1.3硬件选择

1).显示模块

本设计具体选用与实际应用与消耗资源相关。万年历用到的地方大多都在室内。现市场上与许多显示器,在日常生活中最常见的有数码管,led点阵屏,lcd液晶显示器等。

八段数码管的优点:亮度高,显示大。驱动部份的软件简单;缺点:与液晶相比,耗电及体积大。数码管只能单纯的显示数字,不能生动的表达各个参数的信息,消耗电力也比led液晶显示器大。

LCD液晶显示器它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,在单片机系统中应用晶液显示器作为输出器件有以下几个优点:

显示质量高,由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。

数字式接口,液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

体积小、重量轻,液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

功耗低,相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。Lcd液晶能一屏把本设计所要显示的信息表达完整。而且lcd 耗电小,体积小很适合与室内使用。

本设计的要求日期时间以数字表示、星期用3位英文字符表示共21个字符,lcd1602能显示32个字符,足以完成显示功能。Lcd1602有16个引脚,各个引脚功能见下表:引脚号引脚名电平输入/输出作用

1 VSS 电源地

2 VDD Vcc 电源(+5v)

3 VEE 对比调整电压

4 RS 0/1 输入0=输入指令,1=输入数据

5 R/W 0/1 输入0=向lcd写入数据或指令

1=从lcd读取数据

6 E 1,1->0 输入使能信号,1=读取信息

1->0(下降沿)执行指令

7 DB0 0/1 输入/输出数据总线line0

8 DB1 0/1 输入/输出数据总线line1

9 DB2 0/1 输入/输出数据总线line2

10 DB3 0/1 输入/输出数据总线line3

11 DB4 0/1 输入/输出数据总线line4

12 DB5 0/1 输入/输出数据总线line5

13 DB6 0/1 输入/输出数据总线line6

14 DB7 0/1 输入/输出数据总线line7

15 A Vcc Lcd背光正极

14 K Lcd背光负极

表 1-1 lcd1602引脚及功能

2).按键与蜂鸣器

本设计选用轻触按钮,型号为XDJT1102S。选用压电式蜂鸣器型号PT-1540P RoHS。3).控制芯片

根据lcd1602液晶显示器与按键的引脚I/O数量以及扩展功能的要求,所选控制芯片至少需要三组I/O口,本设计功能简单,所以程序量较小,AT89C51是一种带4K字节闪存只读存储器的低电压、高性能CMOS 8位微处理器。AT89c51是51系列基本的控制芯片,能满足本设计的要求,性价比也要低于51系列其他的芯片。

4).日期时间生成模块

为了减少成本,使用51的内部定时器中断再配合软件计数的方式来生成一秒的时间。

1.2软件设计

1.2.1编程环境及语言:

本设计的原理图实现是在proteus 中实现的,本设计的程序在keil Uvision4环境中进行编程与调试的,keil Uvision4与proteus 联调能有效的对各个设计进行测试。编程语言51C 。 1.2.2程序框图

图1-2 程序框图

1).time0中断用于生成时间,具体由程序和硬件共同产生1秒的时间。

2).两个外部中断能进行时间日期的切换,和对时间日期进行调整,播放音乐,能满足对按键设置的要求。

3).主函数能及时在液晶屏上显示默认的时间和调整后的时间。

主函数

Time0中断与软件计数产生1秒的时间,并实现日期时间更新

按键1按下Int0中断响

按键2按下Int1中断响

液晶显示

第二章系统设计

2.1硬件设计

2.1.1振荡电路

本设计51芯片选用内部振荡器方式。由于本设计的时间由内部定时器中断与软件计数相结合产生的,所以从计算方便以及系统的效率上考虑,本设计选用12MHz频率的晶振,电路原理图如下:

图2-1 A T89C51的振荡电路

经厂家推荐稳定电路的电容C1,C2=30pF+-10p(附录资料AT89C51.PDF 第4-32页)。

2.1.2复位电路

本设计使用上电复位电路。单片机晶振为12MHz,起振时间将近1ms,单片机1个机器周期的时间为1us。

单片机每次上电复位所需的最短延时应该不小于treset。这里,treset等于上电延时与起振延时之和。从实际上讲,延迟一个treset往往还不够,不能够保障单片机有一个良好的工作开端。

复位电路把单片机锁定在复位状态上并且维持一个延时(记作TRST),以便给予电源电压从上升到稳定的一个等待时间;在电源电压稳定之后,再插入一个延时,给予时钟振荡器从起振到稳定的一个等待时间;在单片机开始进入运行状态之前,还要至少推迟2个机器周期的延时间。单片机是高电平的时候复位,一般是用电阻和电容组成的,电容充电的时RST复位端为高电平,此时单片机开始复位..电容充电完成,此时单片机复位完成。

由此电容值可取22uf,电阻值取10KΩ。详细见附录文件(电容充电时间的计算方法.pdf)

图2-2 A T89C51上电复位电路

2.1.3按键

选用两个轻触按键与单片机P3^2(int0)、P3^3(int1)两个引脚相接组成的独立按键。

2.1.4 lcd显示电路

1).lcd的选用

本设计选用型号为LCD-016M002L显示器。具体资料见附录文件LCD-016M002L.pdf。2).lcd与51引脚的连接

Lcd1602引脚AT89C51引脚LCD1602引脚AT89C51引脚

RS P2^0 DB3 P0^3

R/W P2^1 DB4 P0^4

E P2^2 DB5 P0^5

DB0 P0^0 DB6 P0^6

DB1 P0^1 DB7 P0^7

DB2 P0^2

表2-1 lcd1602与51的连接

VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

图2-3 1602液晶与单片机接口电路

2.1.5音乐播放电路

此模块采用蜂鸣器实现,蜂鸣器驱动电流为20mA,单片机的P1口输出电流为26mA能够直接驱动蜂鸣器。只要编写相应的程序即可实现发出不同频率的声音,蜂鸣器与单片机的接口电路,蜂鸣器接线与单片机P1^7引脚相连。

图2-5 蜂鸣器电路

2.1.6 P0上拉电阻计算

由于lcd数据口是与51的P0口连接的,在P0口做一般I/O使用时要外接上拉电阻。

根据LCD-016M002L显示器的伏安特性,要保证上拉电阻明显小于lcd的阻抗,以使高电平时输出有效

Lcd工作电压:+5V

Lcd工作电流:20mA

lcd阻抗=5v/20mA=2.5kΩ。

上拉电阻值可以取2.2kΩ(详细见附录资料上拉电阻下拉电阻的总结.doc),由于需要八个相同的上拉电阻如图2-6所示,也可用一个排阻。具体型号见附录表。

图2-6 上拉电阻

2.2软件设计

2.2.1程序流程图

图2-6主函数流程

图2-7 time0中断服务程序流程

图2-8 int1中断服务流程

开始

初始化

将数据写入缓冲区

显示缓冲区内容

开始

赋计数初值

判断是否计满一秒

时间更新

返回

判断是否在调整状态

调整当前指针号的值

播放音乐

开始

返回

开始

定时器停止工作,调整指针

加1。调状态标志置1,秒

清零。等待按键松开。

判断调整指针是否增到

上限值(即调整完毕)

是否

指针复位。调整状态标志清零,

定时器开始工作。

返回

图2-9 int0中断服务流程

2.2.2流程的各个模块设计

全局变量

datetime数组保存日期时间星期的容器。

min[2],hour[2],day[2],mon[2],year[4];调整时候使用的中间变量。

buffer_date[16],buffer_time[16]显示缓冲区。

1).定时器中断服务程序

定时器1计时一秒。计数初值的计算方法如下:设晶振频率为f,则定时/计数器计数频率为f/12, 定时/计数器的计数总次数T_all在方式1为216=65536,定时间隔为T,计数初值为a,则有a=-T×f/12

将计数初值a分别赋给加1计数器TH0、TL0:

TH0=(T_all-a)/256;

TL0=(T_all-a)%256;

本设计晶振频率为12MHz,定时间隔为50ms,所以

a=-0.05*12000000/12

a=50000

TH0=(65536-50000)/256

TL0=(65536-50000)%256

1s就要计20次,中断服务程序如下:

void time0() interrupt 1 using 3

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

if(++count==20)//计时一秒

{

count=0;

DATATIME();//按实际规则日期时间更新

}

}

2).int0中断服务程序

按键1接在了int0对应的引脚P3^2。按键2接在了int1对应的引脚P3^3。Int0为电平触发方式,int1为边沿触发方式。由于按键2是一键多功能,具体功能由状态标志FLAG 表明。所以在int0中断服务程序中要有对FLAG标志的置位及清位的操作。在调整期间为了时间准确定时器不能工作,为了对日期时间的各位值进行循环调整,设置了一个计数器,它的值表明要调整的是哪位。终端服务程序如下:

void int0_K1() interrupt 0

{

T R0=0; //定时器停止

c num++; //计数器加1

F LAG=1; //标志位置位

d atetime[0]=0;

w hile(K1==0); //等待按键松开

i f(cnum>12) //调整结束,各个状态还原

{

TR0=1;

cnum=-1;

FLAG=0;

}

}

3).int1中断服务程序

Int1只要判断标志位执行任务就行了,中断服务程序如下:

void int1_K2() interrupt 2

{

i f(FLAG==1)//调整状态下则位对应调整位的增值,正常状态则播放音乐

{

EDIT_datetime(cnum);//按计数器的值调整对应位

}

e lse

{

ShowString(0x00,0," "); //播放音乐是屏幕上的字幕

ShowString(0x00,1,happy);

music();

Delayms(500);

}

}

4).主函数程序

主函数对各个中断及lcd1602初始化后,就一直进行显示工作了,显示的时候判断标志FLAG以区别是正常显示还是闪烁显示。主程序如下:

void main()

{

I E=0X87; //开中断 ea=1,et0=1,et1=1,ex0=1

T CON=0X04; //it1为边沿触发,it0电平触发

I P=0X0a; //定时器0,1为高优先级

T MOD=0X01; //设置定时器0方式1

T H0=(65536-50000)/256;

T L0=(65536-50000)%256;

I nitialize_LCD(); //初始化LCD

T R0=1;

w hile(1)

{

buffer_value(); //设置显示缓存区的内容

if(FLAG) //调整时对应调整位置闪烁

if(++refresh==5)

{

refresh=0;

Flash(cnum);

}

DIS_buffer(); //将显示缓冲区的内容输出到lcd上}

}

5).星期在调整是是自动更新的,这要归功于蔡勒公式。算法如下(C51表示):unsigned char week()

{

u nsigned int y,m,c,s;

y=datetime[5]%100;

c=datetime[5]/100;

i f(datetime[4]==1)

{m=13;

y--;

}

i f(datetime[4]==2)

{m=14;

y--;

}

s=y+y/4+c/4-2*c+26*(m+1)/10+datetime[3]-1;//蔡勒公式

s=s%7;

r eturn s;

}

函数返回值:0-星期日,1-星期一……6-星期六

6).闰年是自动判断的,算法:(year%4==0)&&(year%100!=0)||year%400==0

函数代码如下:

unsigned char Ynian(unsigned char year)

{

i f( (year%400==0||year%4==0) && (year%100!=0) )

return 1;

e lse

return 0;

}

是闰年返回1,否则返回0

7).月的天数判断,由于1,3,5,7,8,10,12每月有31天;4,6,9,11每月有30天;2月闰年29天,平年28天。所以只要判断月号是哪一类的,就返回那类的值,2月用闰年判断算法判断。函数代码如下:

unsigned char MON(unsigned char month)

{

s witch(month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: return 31;

case 4:

case 6:

case 9:

case 11: return 30;

default:

if(Ynian(datetime[5]))//二月特殊,闰年判断

return 29;

else

return 28;

}

}

返回各月的天数上限。

8).日期时间更新

按照实际规则更新,60秒一分,60分一时,24小时一日,30日或31日或28日或29日一月,12月一年。函数代码如下:

void DATATIME()

{

d atetime[0]++;

i f(datetime[0]>59) //秒判断

{

datetime[0]=0;

datetime[1]++;

}

i f(datetime[1]>59) //分

{

datetime[1]=0;

datetime[2]++;

}

i f(datetime[2]>23)//时

{

datetime[2]=0;

datetime[3]++;

}

i f(datetime[3]>MON(datetime[4]))//日

{

datetime[3]=1;

datetime[4]++;

}

i f(datetime[4]>12) //月

{

datetime[4]=1;

datetime[5]++; //年

}

//时刻为进入调整状态作准备,将当前日期时间值赋给调整时的变量

d atetime[6]=week(); min[0]=datetime[1]%10;

m in[1]=datetime[1]/10;

h our[0]=datetime[2]%10;

h our[1]=datetime[2]/10;

d ay[0]=datetime[3]%10;

d ay[1]=datetime[3]/10;

m on[0]=datetime[4]%10;

m on[1]=datetime[4]/10;

year[0]=datetime[5]%10,year[1]=datetime[5]%100/10;

y ear[2]=datetime[5]%1000/100,year[3]=datetime[5]/1000;

}

9).调整日期时间函数,利用cnum计数器指定当前的调整属性,函数源代码如下:void EDIT_datetime(char cnum)

{

s witch(cnum)

{

case 0:

min[0]++;

if(min[0]>9) //分低位调整限制min[0]=0;

break;

case 1:

min[1]++;

if(min[1]>5) //分高调整限制

min[1]=0;

break;

case 2:

hour[0]++;

if(hour[0]>9)//时低位调整限制

hour[0]=0;

break;

case 3:

hour[1]++;

if(hour[1]>2)//时高位调整限制

hour[1]=0;

break;

case 4:

day[0]++;

if(day[0]>9) //日低位调整限制

day[0]=0;

break;

case 5:

day[1]++;

if(day[1]>3)//日高位调整限制

day[1]=0;

break;

case 6:

mon[0]++;

if(mon[0]>9)//月低位调整限制

mon[0]=0;

break;

case 7:

mon[1]++;

if(mon[1]>1)//月高位调整限制

mon[1]=0;

break;

case 8:

year[0]++; //年调整

if(year[0]>9)

year[0]=0;

break;

case 9:

year[1]++;

if(year[1]>9)

year[1]=0;

break;

case 10:

year[2]++;

if(year[2]>9)

year[2]=0;

break;

case 11:

year[3]++;

if(year[3]>9)

year[3]=0;

break;

}

d atetime[1]=min[0]+min[1]*10; //调整后将datetime实时更新

d atetime[2]=hour[0]+hour[1]*10;

d atetime[3]=day[0]+day[1]*10;

d atetime[4]=mon[0]+mon[1]*10;

d atetime[5]=year[0]+year[1]*10+year[2]*100+year[3]*1000;

}

调整后能及时让datetime更新。

10).将datetime的日期时间星期按照格式放到缓冲区上,格式为:YYYY-MM-DD week

HH:MM:SS

函数源代码如下:

void buffer_value()

{

F ormat_Datetime(datetime[0],buffer_time+6);//将年月日时分秒星期,

F ormat_Datetime(datetime[1],buffer_time+3);//放到对应缓冲区的位置上

F ormat_Datetime(datetime[2],buffer_time+0);//以待显示

F ormat_Datetime(datetime[3],buffer_date+8);

F ormat_Datetime(datetime[4],buffer_date+5);

F ormat_Datetime(datetime[5]%100,buffer_date+2);

F ormat_Datetime(datetime[5]/100,buffer_date+0);

b uffer_date[13]=week1[week()];

b uffer_date[14]=week2[week()];

b uffer_date[15]=week3[week()];

}

Lcd1602显示的是字符,所以用函数转换。

Format_Datetime(数组1,数组2)

功能:将数组1的数值转换为字符放到数组2。

11).闪烁显示,在主函数显示配合延时清空,写入缓冲区的内容,达到闪烁效果。具体哪位闪烁还是有cnum决定。函数源代码如下:

void Flash(char n)

{

s witch(n)

{

case 0:

buffer_clr(0,4); //对应分低位置,清空

break;

case 1:

buffer_clr(0,3);

break;

case 2:

buffer_clr(0,1);

break;

case 3:

buffer_clr(0,0);

break;

case 4:

buffer_clr(1,9);

break;

case 5:

buffer_clr(1,8);

break;

case 6:

buffer_clr(1,6);

break;

case 7:

buffer_clr(1,5);

break;

case 8:

buffer_clr(1,3);

break;

case 9:

buffer_clr(1,2);

break;

case 10:

buffer_clr(1,1);

break;

case 11:

buffer_clr(1,0);

break;

case 12:

Write_LCD_Command(0xc0 |12);//第2行12列后显示over

Write_LCD_Data('o');

Write_LCD_Data('v');

Write_LCD_Data('e');

Write_LCD_Data('r');

break;

}

}

12).显示缓冲区。源代码如下:

void DIS_buffer()

{

S howString(0x00,0,buffer_date);//输出缓冲区的内容

S howString(0x00,1,buffer_time);

}

ShowString是lcd的驱动函数。其他的驱动函数见下。

13).lcd1602的驱动程序

Lcd1602与单片机引脚的连接前面已将过了。下面是各个对lcd1602的操作。具体细节可看lcd1602的资料。

/*-----------------------------------------------------------

函数名:Busy_Check

功能:读取lcd忙标志

输入参数:无

输出参数:返回读取的数据

版本号:1.1.0

修改日期:2010-06-01

------------------------------------------------------------*/

unsigned char Busy_Check()

{

unsigned char LCD_Status;

R S = 0; //寄存器选择

R W = 1; //读状态寄存器

E N = 1; //开始读

D elayms(1);

LCD_Status = P0;

E N = 0;

r eturn LCD_Status;

}

/*----------------------------------------------------------- 函数名:Write_LCD_Command

功能:向LCD写指令

输入参数:cmd-指令

输出参数:无

版本号:1.1.0

修改日期:2010-06-01

------------------------------------------------------------*/ void Write_LCD_Command(unsigned char cmd)

{

w hile((Busy_Check()&0x80)==0x80);//忙等待

R S = 0; //选择命令寄存器

R W = 0; //写

E N = 0;

P0 = cmd;

E N = 1;

D elayms(1);

E N = 0;

}

/*----------------------------------------------------------- 函数名:Write_LCD_Data

功能:向lcd发送数据

输入参数:dat-数据

输出参数:无

版本号:1.1.0

修改日期:2010-06-01

------------------------------------------------------------*/ void Write_LCD_Data(unsigned char dat)

{

万年历(c++设计)

西安科技大学2009级C++实验报告 创作编号:BG7531400019813488897SX 创作者:别如克* 面向对象技术实验报告 (万年历)

1.实验目的 掌握一种编程工具和面向对象程序设计的基本思想和方法,培养我们学生综合利用某种语言进行程序设计的能力,培养我们学生利用系统提供的功能进行创新设计的能力,培养我们学生充分利用计算机的功能和特点分析实际问题及解决实际问题的能力。 为我们提供一个综合运用所学知识解决实际问题的机会,增强我们学生的实践动手能力和工程实践能力,并培养和锻炼我们学生的自学创新能力。 为了能更好地了解C++语言,因此开设了此次课程设计,程序设计教学课程的目的不是为了单独的课堂学习,而是要让我们学生掌握程序设计的基本思想及方法。一方面,在课程设计过程中,可以明确的指导为什么而学,还能对所学知识得到应用,更重要的是可以让我们学生掌握一些基本函数的用法,从而不在对编程序感到茫然,经过设计,可以让我们熟悉简单程序的设计方法和编写,对程序设计及该门课程设计语言的应用得到理解。 2.功能简介 万年历,输入年份,可以显示出这一年的每个月份和所对应的星期

天,可以查询每一天. 3.流程图 4.代码 #include #include using namespace std; int i,c,day,year,k,a[50]; void f1(int x) //大月 { for( i=0;i<50;i++) a[i]=33; for(i=k-1;i>=0;i--) a[i]='\000'; //1号前均为空格 for(i=k;i<31+k;i++)

万年历系统设计方案和对策

电子万年历系统设计 The design of Electronic calendar system 专业:电子信息科学与技术 学号: 姓名:

电子万年历系统设计 摘要:近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,并且给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。虽然在日常生活中,各种信息处理终端如电脑、手机等给我们提供了准确的时间信息。但是在大多数场合却仅仅局限于个人的适用范围之内。在家居生活中,一款悬挂余居室墙壁上大方得体的电子钟不仅能为我们提供准确的时间显示,而且魅惑了环境,给单调的居室带来了现代化的气息,因而成为许多家庭的必备之选。 本文设计了一种基于八位串行输入-并行输出移位寄存器74HC164芯片,以STC89C52单片机为核心、数码显示的电子万年历,主要介绍了时钟芯片、温度传感器、仿真模块,以及万年历硬件和软件的设计,实现了准确显示,公历年、月、日、农历月、日、时、分、秒功能。 关键字:单片机;时钟芯片;温度传感器;仿真

The Design of Electronic Calendar System Abtract:In recent years, with computer penetration in the social sphere and the development of large-scale integrated circuits, MCU applications are constantly deepening, as it has a function of strong, small size, low power consumption, cheap, reliable, easy to use , And other characteristics, and therefore particularly suited to control the system and to human life brought about fundamental changes. SCM is by the application of technology products have entered the tens of thousands of households. The emergence of electronic calendar to the lives of people of many convenience. While in everyday life, dealing with all kinds of information terminals such as computers, mobile phones has provided us with accurate time information. However, in most occasions is limited to individuals within the scope of the application. In home life, hoisted more than a generous living room walls of the appropriate electronic bell can not only provide us with accurate time, and tantalized by the environment, bring to the monotonous room a modern flavor, so many families must Of the election. In this paper, a design based on eight serial input - output parallel shift register 74 HC164 chip to STC89C52 microcontroller as the core, digital display electronic calendar, mainly on the clock chip temperature sensor, simulation modules, hardware and calendar And software design, to achieve an accurate, the calendar year, month, day and the Lunar month, day, hours, minutes and seconds functions.

单片机课程设计—万年历[1]

郑州轻工业学院 软件学院 单片机与接口技术课程设计总结报告 设计题目:电子万年历 学生姓名: 系别: 专业: 班级: 学号: 指导教师: 2011年12月16日

设计题目: 电子万年历 设计任务与要求: 1、显示年月日时分秒及星期信息 2、具有可调整日期和时间功能 3、增加闰年计算功能 方案比较: 方案一:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用 AT89C52单片机为控制中心,显示模块采用普通的共阴LED数码管,键输入采用中断实现 功能调整,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通 过按键盘开关实现对时间、日期的调整。 方案二:系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,电源 电路、复位电路、晶振电路等模块。主控模块采用AT89C52单片机,按键模块用四个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对 时间、日期的操作。 两个方案工作原理大致相同,只有显示模块和时钟电路不同。LED数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602液晶显示屏,显示功 能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对LED数码管来说 要昂贵些,但是基于本设计显示的东西较多,若采用LED数码管的话,所需数码管较多,而且不利于控制,因此选择LCD1602作为显示模块。DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的 应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并具 有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。单片机有定时 器的功能,但时间误差较大,且需要编写时钟程序,因此采用DS1302作为时钟电路。 对比以上方案,结合设计技术指标与要求我们选择了方案二进行设计。

电子时钟万年历设计

计算机科学与技术学院硬件课程设计报告

在日常生活中,手表,闹钟是不可或缺的。在实际生活生产活动中,也要考虑时间的因素,如工时的计算,霓虹灯的亮灭。 因为集成电路制造技术的不断提高,出现了高性能、高可靠的集成芯片。电子时钟在工业领域,日常生活中得到了广泛的应用。电子时钟在性能方面具有精度高,实时性好,易于调整等优点。这些使得温度控制系统的研究和开发得到的各方面的广泛关注和支持。 本次课程设计,我利用8254计数芯片,8255芯片,4*4小键盘,12864LCD 液晶显示器,蜂鸣器制作了一个带有闹钟功能的电子时钟万年历。它可以实现由4*4小键盘输入初始时间(包括年月日时分秒星期),利用8254计数,通过程序处理进位,判断闰年,在液晶显示屏上实时显示时间。还可以由小键盘选择不同的闹钟模式,设定闹钟时间。 关键词: 电子时钟; 8255A芯片; 8254芯片; 12864LCD液晶显示器;键盘输入;蜂鸣器;闹钟功能;万年历

1.设计任务与要求...........................................................................6- 1.1实验目的 (6) 1.2具体要求 (6) 2.总体方案与说明...........................................................................6- 2.1使用硬件 (6) 2.1流程设计 (6) 2.1.1系统程序模块 (6) 2.1.1系统流程图 (7) 3.硬件方案 (7) 3.1硬件说明 (7) 3.1.1计数芯片8254 (7) 3.1.2可编程外围接口芯片8255A (8) 3.1.2 128×64字符液晶显示器 (11) 3.2电路原理图与说明 (12) 3.2.1键盘电路 (13) 3.2.2 8254计数电路 (13) 3.2.3 液晶显示电路 (14) 3.3电路连接图 (14) 3.3.1 8254计数芯片 (14) 3.3.2 整体电路 (15) 4.软件方案 (15) 4.1软件主要模块流程图 (15) 4.1.1输入子程序模块流程图 (16) 4.1.2显示子程序模块流程图 (18) 4.1.2闰年子程序模块流程图 (18) 4.1.2蜂鸣器子程序模块流程图 (18) 4.1.2时间进位程序模块流程图 (19) 4.1.2主程序模块流程图 (20) 4.2源程序清单与注释 (21) 5.分析与测试 (38) 6.运行结果 (38) 6.1试验线路图 (39) 6.2实验结果 (39) 6.2.1欢迎界面 (39)

电子万年历设计

课程论文论文题目基于单片机的电子万年历设计 课程名称单片机原理及接口技术 专业年级 2014级自动化3班 学生姓名孙宏远贾腾飞 学号 2016年12 月3 日

摘要: 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。。 关键词:AT89C51单片机,DS1602时钟芯片,LCD1602显示屏。串口通信。 一:引言 本设计的基于单片机控制的电子万年历,具有年、月、日、星期、时、分、秒的显示等功能,实现过程就是由主控制发送信息给DS1302时钟芯片再由时钟芯片反馈给单片机,再由主控制器传送给LCD1602显示屏显示信息。并且可以在键盘设置模块输入修改时间,当键盘设置时间、日期时,单片机主控制根据输入信息,通过串口通信传送给DS1302时钟芯片,DS1302芯片读取当前新信息产生反馈传送给单片机,然后单片机根据控制最后输送显示信息到LCD1602液晶显示屏模块上显示。 二:硬件设计: 2.0.硬件的设计总框图 2.1 DS1032时钟电路 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。芯片如图。 DS1302的内部主要由移位寄存器、指令和控制逻辑、振荡分频电路、实时时钟以及RAM组成。每次操作时,必须首先把CE置为高电平。再把提供地址和命令信息的8位装入移位寄存器。数据在SCLK的上升沿串行输入。无论是读周期还是写周期发生,也无论传送方式是单字节还是多字节,开始8位将指定内部何处被进行访问。在开始 8个时钟周期把含有地址信息的命令字装入移位寄存器之后。紧随其后的时钟在读操作时输出数据。 2.2 LCD1602与AT89C52的引脚接线 LCD1602采用总线式与单片机相连,AT89c52的P1口直接与液晶模块的数据总线D0~D7相连;P2 口的0,1,2脚分别与液晶模块的RS、RW、E脚相连。滑动变阻器用于调整液晶显示的亮度。电路如图

电子万年历

河北科技师范学院课程设计说明书 题目: 学院(系): 年级专业: 学号: 学生姓名: 指导教师:

摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。 我选用的是单片机8052来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒及星期,温度等信息。 该电子万年历使用12MHZ晶振与单片机8052相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。所以在该设计与制作中我选用了单片机8052,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, 单片机8052的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。 因此,采用单片机8052原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。

单片机AT89c52电子万年历设计(带程序)

目录 一、摘要 (2) 二、设计 (3) 三、设计任务. (2) 四、设计要求 (3) 五、系统方案设计 (3) 1、系统 (3) 1)原理构成框图 (3) 2)设计思路 (4) 2、主程序设计 (4) 3、中断程序设计 (5) 5、时间调整电路的设计 (7) 六、系统评价 (7) 七、c语言程序注释及说明 (8)

一、摘要 单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。本设计是基于AVR单片机强大的控制功能制作而成的电子万年历,该电子万年历包括四大功能:实时显示年、月、日、时、分、秒、星期;人为的校正年、月、日、时、分、星期;第一次开机显示12-00-30。 二、设计目的 1、掌握C52程序用于实践并实现相应的功能; 2、掌握时钟程序的使用方法; 3、掌握时间函数的使用方法; 4、掌握键盘的程序使用方法; 三、设计任务 通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,

七个按钮连接P0口可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。 四、设计要求 (1)能够准确的计时,时间可在数码管上显示出来,默认显示为时、分、秒,每隔一分钟自动显示年、月、日及星期,也可通过按键控制显示,并可通过按键调节时间。 (2)第一次开机显示12-30-30。 (3)每半秒led彩灯闪烁一次 五、系统方案设计: 1、系统总体设计: 1) 原理构成框图 本设计用AT89C52作为核心控制部分,外接晶振电路与复位电路,以两个四位数码管作为显示部分,开关控制显示时间与日期,具体框图如图1所示,数码管框图如图2所示:

万年历C语言课程设计(内附程序)

石家庄铁道大学课程设计 C语言课程设计 万年历 单位电气与电子工程学院(系) 班级 学号 学生姓名 指导教师 完成日期 2013 年7 月 8日

摘要 本课程设计报告介绍的是C语言实习中的万年历项目。该报告共分五章,第一章介绍选题意义,也就是我选择万年历作为课题项目的理由。第二章是系统的分析,包括系统概述,系统的构成,其中包括各个模块功能的分析介绍,该章节的最后介绍了各部分的功能,即组成程序的各个函数的功能介绍。第三章是系统的实现,即为各个功能的实现而服务的十个自定义函数的流程图,通过这十个流程图,您可以快速地明白程序功能的实现过程。第四章是总结,即本人在设计万年历程序过程中的心得,以及在整个程序设计过程中我的工作过程,也体现了我的设计思路。第五章是参考文献,在这里我主要查阅了《C程序设计(第三版)》中的C函数附表,另外有几处欠缺的知识,我借鉴了另一本书上的相关部分。第六章,也是最后一章,我把整个程序的源代码及其注释附上。由于本人水平所限,程序也不可能很完美,必定有一些漏洞和拖沓,还请谅解。好了,从这里开始,我将与你们分享我我在整个万年历程序设计中的所做所想。

目录 1.选题的意义 (4) 2.系统的分析 (5) 2.1系统概述 (5) 2.2系统的构成 (5) 2.3各模块的功能 (5) 2.4系统的运行环境 (5) 3.系统实现 (6) 4.总结 (11) 5.参考文献 (12) 6.附录(程序源代码) (13)

第一章 选题的意义 (1)通过万年历的设计,使我们掌握软件开发过程的问题分析、系统设计、程序编写、测试等基本方法和技能。 (2)通过万年历的设计,熟练掌握C语言中的分支、循环、数组、函数、文件操作等的综合运用。 (3)通过万年历的设计,可以培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C程序设计》课程中的所学内容。 (4)通过万年历的设计,可以强化自己的动手编程能力,更加深刻地感受C语言的优点。 (5)万年历与我们的生活联系密切,通过万年历的设计,我们可以感受知识与实践相结合的乐趣。

电子万年历的设计与实现

毕业设计(论文)任务书 题目:电子万年历的设计与实现 任务与要求: 设计一以单片机为核心控制的万年历,具有多项显示和控制功能。要求:准确计 时,以数字形式显示当前年月日、星期、时间; 具有年月日、星期、时间的设置和调整功能;自行设计所需直流电源 时间: 2010年9 月 27 日至 2010 年 11 月 23 日共 8 周 所属系部:电子工程系

摘要 随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。 而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。所以,电子万年历无论作为比赛题目还是练习题目都是很有价值。 关键词:单片机;万年历 1

目录 1 概述 (5) 1.1单片机原理及应用简介 (5) 1.2系统硬件设计 (6) 1.3结构原理与比较.............................. 错误!未定义书签。2系统总体方案及硬件设计......................... 错误!未定义书签。 2.1系统总体方案................................ 错误!未定义书签。 2.2硬件电路的总体框图设计 (12) 2.3硬件电路原理图设计 (12) 3软件设计 (13) 3.1主程序流程图 (13) 3.2显示模块流程图 (14) 4P ROTEUS软件仿真 (15) 4.1仿真过程 (15) 4.2仿真结果 (16) 5课程设计体会 (17) 参考文献 (18) 附录:源程序代码附 (18) 结束语 (25) 2

基于单片机的电子时钟万年历设计

一、项目介绍与设计目的 基于单片机的电子时钟万年历为实现电子万年历的功能,采用单片机STC89C51,辅助以必要的外围电路,用C语言编写程序,并进行模块化设计而成的电子万年历系统.它通过LCD能正确显示年、月、日、周日、时、分、秒等,具有功能稳定,精确度高和可调的特点。 二、设计方案 1.项目环境要求 1.1时钟芯片选择 方案一:不使用芯片,采用单片机的定时计数器 这种方法原理是利用单片机芯片的定时器来产生固定的时间,模拟时钟的时, 分,秒。如:利用AT80C52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期。每一个周期加1,那么1min为60个周期,1h就是60*60=3600个周期,一天就是3600*24=86400个周期。 此方法优点是可以省去一些外围的芯片,但这种方法只能适用于一些要求不是十分精确,不做长期保留的场合。 方案二:并行接口时钟芯片 DS12887 特点:采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。 但是对于80C52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大。 方案三:串行接口时钟芯片DS1302 芯片主特性: (1)实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力,还有闰年调整的能力

(2)31 8 位暂存数据存储RAM (3)串行 I/O 口方式使得管脚数量最少 (4)宽范围工作电压2.0 5.5V (5)工作电流 2.0V 时,小于300nA (6)读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式 (7)8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配 (8)简单 3 线接口 (9)与 TTL 兼容Vcc=5V (10)可选工业级温度范围-40~+85 优点:串行接口的日历时钟芯片,使用简单,接口容易,与微型计算机连线较少等特点,在单片机系统尤其是手持式信息设备中己得到了广泛的应用。 所以,最终选择串行时钟芯片DS1302,DS1302的管脚图如图2所示。 图2 DS1302管脚图 1.2显示模块选择 方案一:LED数码管显示 数码管显示比较常用的是采用CD4511和74LS138实现数码转换,数码显示分动态显示和静态显示,静态显示具有锁存功能,可以使数据显示得很清楚,但浪费了一些资源。目前单片机数码管普通采用动态显示。编程简单,但只能显示

单片机电子万年历含程序

CHANGZHOU INSTITUTE OF TECHNOLOGY 科研实践 项目名称:电子万年历设计 二级学院:电子信息与电气工程学院 专业:电气工程及其自动化班级: 10 电二 学生姓名:祝学东学号: 指导教师:庄志红职称:副教授 起止时间: 2013年12月9日—2013年12月20日 摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒、星期,并具有可调整日期和时间功能。 该电子万年历使用12MHZ晶振与单片机AT89C52相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

C语言程序设计 万年历程序

#include"stdio.h" int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31}; int judge(int year,int month) { if(month==1||month==3||month==5||month==7||month==8||month==10||month ==12) return(1); else if(month==2) { if(year%4!=0||year%100==0&&year%400!=0) return(2); else return(3); } else return(4); } void show2() { int year,i,j,a,n,m,k; char ** p; char * week[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; char*month[]={"January","February","March","April","May","June","July","Augu st","September","October","November","December"}; printf("please inter the year:"); scanf("%d",&year); printf("\n"); printf("the calendar of the year%d.",year); printf("\n"); a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7; for(i=0;i<12;i++) { n=judge(year,i+1); p=month+i; printf("%s\n",*p); printf("\n"); for(j=0;j<7;j++) {p=week+j; printf("%6s",*p);}

电子万年历设计(基于AT89C51单片机和DS1302时钟芯片)1

随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。 二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步…… 我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子万年历的设计,使其更加的具有市场。 本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。 除了采用集成化的时钟芯片外,还有采用MCU的方案,利用AT89系列单片微机制成万年历电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。AT89C51是由ATMEL 公司推出的一种小型单片机。95年出现在中国市场。其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受。 本文介绍了基于AT89C51单片机设计的电子万年历。 首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优

电子万年历

第一章绪论 1.1设计背景 从改革开放开始,电子工业已成为科技创新的重要领域,我国的电子产业也在新世纪开始高速发展,无论是产业结构,产业规模和技术水平都有了十分明显的进步和提升,而且电子产品在各个领域都有开创性的发展,使我们的生活变得更加智能化,为我国经济的发展做出了杰出的贡献。其中,单片机的大规模使用为我们的生活创造了极大的便利,可以说无时无刻不在影响着我们的生活。何为单片机,单片机全名为单片微控制器,它的结构组成就是将微型计算机的基本功能部件全都集成在一个半导体芯片上。尽管仅仅是一个芯片,但从单片机的构成和功能的角度来看充分具备一个计算机系统的中央处理功能。最重要的优点是,单片机体积小巧,可以任意嵌入到任何符合条件的应用系统中作为中央处理器进行指挥决策,是系统实现完全的智能化。当今世界,单片机已经无时无刻不在我们生活的周边存在,各类电子产品几乎都以单片机作为主控核心,通过单片机的控制使之更加智能快速,使我们的生活更加舒畅和方便。正是随着日常周边科学技术的进步,人们对待生活用品的要求也在逐步提高,时钟亦是如此,从古至今,人们对时间的概念就非常重视,从日晷到摆钟,经历了百年的发展,如今,人们对时钟的要求不仅仅是能够知道时间,还需要能够知道日期,星期,节气,天气情况等等,以便于满足人们对生活的各种需要,由此电子万年历就诞生了,正是因为电子万年历功能的多样性,使它在应用在各种场合,人们对它的需求量也就却来越大,电子万年历的发展空间也越来越广阔,成为了一项重要的产业。 1.2设计的目的及意义 中国从古至今就有重视时间的好传统,农民通过日照和鸡叫开始一天的劳作,商人通过古老的计时工具来确认是否应该开门迎客,学士知道时间后则开始一天的读书学习,这种传统一直绵延至今。当今社会,人们的生活节奏飞快,在工作中讲究快速和效率,需要在最短的时间内完成最合理的工作要求,所以人们通常需要在最短的时间内了解到最丰富的信息,人们不满足于只能看到此时此刻的时间信息,还需要了解过去和未来几天内的时间情况,包括农历,天

C语言程序的设计万年历

存档资料成绩: 华东交通大学理工学院 课程设计报告书 所属课程名称车 C语言程序设计课程设计 题目万年历查询 分院电信分院 专业班级 2013级电气工程及其自动化1班 学号 105 学生周利凯 指导教师肖盛文 2014年 6月 15日 摘要

通过C语言编程实现了一个万年历,能实现基本的万年历功能。通过本章的讲解,使读者能够明白万年历的实现原理和方法。万年历的实现核心是要判断闰年和根据给定的日期计算其对应的星期,并按照合适的方式输出日历.这都是本章向读者讲述的重点。 另外,在当今社会万年历在生活起着越来越重要的角色,它悄无声息的走进我们的生活,还向读者讲述了怎样突出显示某个日期的方法,这会在实际应用中经常遇到。除了讲述万年历的实现方法外,本章还回顾了前面章节的知识,如光标定位﹑设置寄存器﹑产生中断﹑输出一个字符等,以及讲述系统日期﹑屏幕输出的方法等。 关键字: C语言,函数,历法计算,万年历,中断。 目录

1.设计万年历目的--------------------------- P4 2.万年历程序设计思路图解及其讲解-----------P5 3.万年历程序清单与编码----------------------P7 4.万年历的调试与分析------------------------P12 5.万年历的使用环境与说明--------------------P14 6. 设计心得-----------------------------------P15 7.万年历参考文献------------------------------P16 8.致-----------------------------------------P17

万年历电子系统设计方案

万年历电子系统设计方案 一、设计要求与方案论证 1.1 项目设计容、功能、指标: (1)基本要求 ①具有年、月、日、时、分、秒等功能; ②具有自动判别闰年闰月的功能 ③有一路闹钟 ( 2 ) 创新要求 ①具有闹钟功能,时间到后蜂鸣器响,led灯亮。 ②设置的时间日期掉电不丢失 ③具有温度计功能; 1.2项目设计方案和比较 1.2.1单片机芯片的选择方案和论证: 方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二: 采用STC89C52,片ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 所以选择采用AT89S52作为主控制系统. 1.2.2 显示模块选择方案和论证: 方案一: 采用Lcd液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见。 方案二: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示. 方案三: 采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 由于显示的容较多,采用led数码管不方便,所以采用了LCD液晶作为显示。

单片机电子万年历时钟单片机课设

前言 单片机隶属微型计算机。目前单片机在工程与生活中有着广泛应用[1]。伴随着人们对时间的意识更为强烈,其计时设备也从目测太阳、日晷、摆钟直至现如今更为智能的电子钟。目前所处的时代信息化且更为智能化。与此同时,时间规划了生活与生产。在各行业,时间尤为重要,因为每个过程都必须严格遵循所设的时间限制。不论是生产还是科研,时间都是不可或缺的定量参数而且其尤为重要。保障时间精确性的技术在目前来说是值得研究与设计的。时间概念无处不在,而且在工程与实验科研中作为一种参数,其要求更是严苛。目前机械表作为一款普遍产品被广泛应用在生活中,而且其也具备日历功能。然而,因机械表本身机械结构的不稳定性及不精准性,再加上其受功率和体积限制,在生活设备与工程设施应用方面且远不如电子钟。因此本文将对电子时钟做进一步设计。 正文 电子钟可通过电子电路与程序软件实现时刻的显示与精确计时。该装置可广泛应用于日常生活与实验工程,并且是不可或缺的器件。通过集成逻辑电路与石英晶体谐振器的设计研发,可使得数字钟性能远优于传统时钟。研发生产比以往更加精确的数字时钟,将为在工程与生活中的用户带有良好的体验。与此同时,时钟不单单只具备原始的计时功能,其可附加其他优化功能。列如:定点自动报警,按时播报,自动启动/停止指示灯,定时开/关机及更多智能化定时管理设备。因此,研究设计更为先进的多功能的电子钟是尤为必要的。 设计电子万年历主要目的在于精准的显示时间与此同时可提供温度参数、星期、日期、响铃等其他优化功能。与此同时电子万年历顺应时代的发展,且被各领域所急需应用。并随着仪器仪表等学科技术的发展,及软件编程算法的优化改进,在生活及生产中电子时钟的设计随之受到影响及改变。目前单片机相关产品普及,电子万年历也得益于此,可以相结合做进一步优化改进。电子万年历目前不仅仅是提供计时功能,更多的可为用户带来不同场景工况时所具备的相应优化功能。将微控制器与时钟相结合,其设计便于开发者对功能进一步改进研发,对于用户可以直观的对电子万年历进行操作。本次在电子万年历的七个不同单位时间显示的基础上,再对定时闹钟、响铃、温度、节气显示优化功能做进一步的设计。其设计本身具有新颖性和实用性。具有多功能优化的电子万年历可将其应用在各电器中,如热水器的温度调节显示模块、空调定时温度模块等等。优化后的电子万年历与实际生活生产相结合,使原有的电器设备更为完善,使用更为便利。

单片机万年历电子钟设计报告含电路图和源程序

电子时钟万年历设计报告 学院:武夷学院 班级:09电信1班 组员:林巧文

一、设计要求与方案论证 (3) 1.1设计要求 (3) 1.1.1基本要求 (3) 1.1.2拓展部分 (3) 1.2 系统基本方案选择和论证 (3) 1.2.1单片机芯片的选择方案和论证: (3) 1.2.2 显示模块选择方案和论证: (4) 1.2.3时钟芯片的选择方案和论证: (4) 1.3 电路设计最终方案 (4) 二、理论分析与计算 (4) 2.1,秒数的产生由定时器T0产生: (4) 2.2. 总天数的算法 (5) 三.系统的硬件设计与实现 (5) 3.1 电路设计框图: (5) 3.2 系统硬件概述: (6) 3.3 主要单元电路的设计 (6) 3.3.1单片机主控制模块的设计 (6) 3.3.2显示模块的设计 (7) 3.3.3闹钟模块的设计 (9) 3.3.4电源稳压模块 (10) 四、系统的软件设计 (11) 4.1程序流程框图 (11) 4.2闹钟模块流程图: (11) 4.3按键调整模块流程图: (12) 五、测试方案与测试结果分析 (14) 5.1 测试仪器 (14) 5.2软件测试平台Keil C51 (14) 5.3 模块测试 (14) 5.3.1显示模块测试 (14) 5.4测试结果分析与结论 (15) 5.4.1测试结果分析 (15) 5.4.2 测试结论 (15) 六、作品总结 (15) 参考文献 (15) 附录一:系统电路图 (16) 附录三:系统C程序 (17)

一、设计要求与方案论证 1.1设计要求 1.1.1基本要求 (1)准确显示:时、分、秒(24小时制) (2)显示星期 (3)显示公历年月日 (4)时间、日期、星期可调节 (5)断电记忆功能 1.1.2拓展部分 (1)闹钟功能 (2)显示阴历 (3)显示24节气 (4)其他 1.2 系统基本方案选择和论证 1.2.1单片机芯片的选择方案和论证 方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V 的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP 在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二: 采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全兼容,该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 所以选择采用AT89S52作为主控制系统。

课程设计万年历的设计52503328

课程设计万年历的设计52503328

兰州理工大学 计算机与通信学院 2014年秋季学期 面向对象课程设计 题目:万年历的设计

序言 《面向对象的程序设计》是计算机专业一门重要的专业基础课。此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。通过课程设计,学生在下述各方面的能力应该得到锻炼: (1)进一步巩固、加深学生所学专业课程《C++语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。 (4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象的程序设计方法。 (6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。

目录 摘要 (2) 第一章系统总体设计 (3) 一.理论说明 (3) 二.流程图说明 (4) 1.总体流程说明图 (4) 2.部分流程说明图 (4) 第二章系统详细设计 (7) 一.主要组成部分 (7) 二.源程序 (9) 第三章系统测试 (34) 四软件使用说明书 (40) 一.系统运行环境 (40) 二.系统操作提示 (40) 总结 (41) 参考文献 (42) 致谢 (42)

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