基于某51单片机的万年历的设计

发布时间 : 星期一 文章基于某51单片机的万年历的设计更新完毕开始阅读

实用文档

12864液晶具有如下的特性:

1)提供8位,4位并行接口及串行接口可选 2)并行接口适配M6800时序 3)自动电源启动复位功能 4)内部自建振荡源

64×16位字符显示RAM(DDRAM最多16字符×4行,LCD显示范围16×2行)(改为半角输入) 2M位中文字型ROM(CGROM),总共提供8192个中文字型(16×16点阵)16K位半宽字型ROM(HCGROM),总共提供126个西文字型(16×8点阵)64×16位字符产生RAM(CGRAM) 15×16位总共240点的ICONRAM(ICONRAM)其与单片机的连接电路如图9所示。 五、软件设计框图 1. 主程序流程图:

2. 阴阳历转换流程图:

标准

实用文档

六、程序源代码 1. 主程序

#include < reg52.h > #include < nongli.h > #include < lcd.h > #include < shezhi.h > #include < time.h> #include < wendu.h > #include < key.h >

#define uchar unsigned char #define uint unsigned int

/******************************************************************** sbit bell = P2 ^ 0; //定义蜂鸣器端口

/******************************************************************** 定时器设置整点报时

********************************************************************/ void Timer0_Service() interrupt 1 {

标准

实用文档

static uchar count = 0;

static uchar flag = 0; //记录鸣叫的次数 count = 0;

TR0 = 0; //关闭Timer0 TH0 = 0x3c;

TL0 = 0XB0; //延时 50 ms TR0 = 1 ; //启动Timer0 count ++;

if( count == 20 ) //鸣叫 1 秒 {

bell = ~ bell; count = 0; flag ++; }

if( flag == 6 ) {

flag = 0;

TR0 = 0; //关闭Timer0 } }

/******************************************************************** 中断服务程序 整点报时 一分钟

********************************************************************/ uchar HexNum_Convert(uchar HexNum)//将16进制数转换成十进制数 {

uchar Numtemp;

Numtemp=(HexNum>>4)*10+(HexNum&0X0F); return Numtemp; }

/******************************************************************** * 函数名称:main() * 功 能: * 入口参数: * 出口参数:

********************************************************************/ void main( void ) {

uchar clock_time[6] = {0X00,0X59,0X23,0X09,0X04,0X11}; //定义时间变量 秒 分 时 日 月 年

uchar alarm_time[2] = { 10, 06}; //闹钟设置 alarm_time[0]: 分钟 alarm_time[1] :小时

uchar temperature[2]; //定义温度变量 temperature[0] 低8位 temperature[1] 高8位

标准

实用文档

Lcd_Initial(); //LCD初始化

Clock_Fresh( clock_time ); //时间刷新

Clock_Initial( clock_time ); //时钟初试化

/***********************中断初始化***************************/ EA = 1; //开总中断

ET0 = 1; //Timer0 开中断 ET2 = 1; //Timer2 开中断

TMOD = 0x01 ; //Timer0 工作方式 1 RCAP2H = 0x3c;

RCAP2L = 0xb0; //Timer2 延时 50 ms while( 1 ) {

switch( Key_Scan() ) //按键扫描 {

case up_array: {

Key_Idle(); //检测按键松开 }

break; case down_array: {

Key_Idle(); //检测按键松开 }

break; case clear_array: {

Key_Idle(); //检测按键松开 } break; case function_array:{

Key_Function( clock_time, alarm_time );

} case null: {

Clock_Fresh( clock_time ); //时间刷新 Lcd_Clock( clock_time ); //时间显示

Sensor_Fresh( temperature ); //温度更新 Lcd_Temperture( temperature ); //温度显示

Calendar_Convert( 0 , clock_time ); Week_Convert( 0, clock_time );

标准

联系合同范文客服:xxxxx#qq.com(#替换为@)