单片机万年历实训
多功能电子万年历实训报告

一、引言随着科技的发展,电子产品在我们的日常生活中扮演着越来越重要的角色。
作为电子信息专业的一名学生,我深知理论与实践相结合的重要性。
为了提高自己的动手能力和解决实际问题的能力,我参加了本次多功能电子万年历的实训项目。
通过本次实训,我不仅掌握了单片机的基本原理和编程方法,还学会了如何将理论知识应用于实际项目中。
二、实训目的1. 熟悉单片机的硬件结构和编程方法。
2. 掌握电子万年历的设计原理和实现方法。
3. 提高动手能力和解决实际问题的能力。
4. 培养团队协作和沟通能力。
三、实训内容本次实训主要围绕多功能电子万年历的设计与实现展开,主要包括以下几个方面:1. 硬件设计:选择合适的单片机作为核心控制单元,设计电路图,并焊接电路板。
2. 软件设计:编写程序,实现万年历的基本功能,如显示日期、时间、星期、闰年判断、闹钟等。
3. 温度采集:使用DS18B20温度传感器采集环境温度,并在LCD1602显示屏上显示。
4. 按键控制:设计按键电路,实现时间校准、闹钟设置、温度显示等功能。
四、实训过程1. 硬件设计:- 选择AT89C52单片机作为核心控制单元,因为它具有低功耗、高性能的特点。
- 设计电路图,包括晶振电路、复位电路、时钟电路、按键电路、LCD1602显示电路、温度传感器电路等。
- 焊接电路板,确保电路连接正确。
2. 软件设计:- 使用Keil软件编写程序,实现万年历的基本功能。
- 编写时间显示、闹钟、温度显示等模块的程序。
- 编写按键扫描程序,实现时间校准、闹钟设置、温度显示等功能。
3. 温度采集:- 使用DS18B20温度传感器采集环境温度。
- 将温度数据转换为数字信号,并在LCD1602显示屏上显示。
4. 按键控制:- 设计按键电路,实现时间校准、闹钟设置、温度显示等功能。
- 编写按键扫描程序,检测按键状态,并执行相应的操作。
五、实训结果经过努力,我成功完成了多功能电子万年历的设计与实现。
该万年历具有以下功能:1. 显示年、月、日、星期、时、分、秒。
单片机实训报告万年历

一、实训目的随着科技的发展,单片机在各个领域的应用越来越广泛。
本次实训旨在通过万年历的设计与实现,让学生深入了解单片机的编程与应用,提高学生的实践能力和创新意识。
通过万年历的设计,使学生掌握单片机的基本原理、编程技巧以及相关外设的使用。
二、实训内容本次实训以AT89C51单片机为核心,结合DS1302时钟芯片、LCD1602液晶显示屏和独立键盘,设计并实现一个具有年、月、日、星期、时分秒显示以及闰年判断功能的万年历。
三、实训步骤1. 需求分析- 显示当前日期和时间,包括年、月、日、星期、时分秒。
- 判断闰年,正确显示2月的天数。
- 允许用户通过按键调整日期和时间。
- 具有电源掉电保护功能,保证数据不丢失。
2. 硬件设计- 核心模块:AT89C51单片机- 时钟模块:DS1302时钟芯片,提供精确的日期和时间。
- 显示模块:LCD1602液晶显示屏,用于显示日期、时间和星期。
- 按键模块:独立键盘,用于调整日期和时间。
- 电源模块:锂电池,提供稳定的电源。
3. 软件设计- 主程序:负责初始化硬件、读取时间、显示时间和日期、处理按键输入等。
- 时钟模块:读取DS1302芯片中的时间,并进行处理。
- 显示模块:将时间、日期和星期显示在LCD1602液晶显示屏上。
- 按键处理模块:根据按键输入调整日期和时间。
4. 程序编写- 使用C语言进行程序编写,利用Keil软件进行编译和烧录。
5. 调试与测试- 对程序进行调试,确保功能正常。
- 对万年历进行测试,验证其准确性。
四、实训结果经过设计、编程、调试和测试,成功实现了万年历的功能。
万年历能够准确显示当前日期和时间,并具有闰年判断功能。
用户可以通过按键调整日期和时间,且在电源掉电的情况下,万年历仍能保持时间。
五、实训心得1. 实践出真知:通过本次实训,深刻体会到理论知识与实践应用相结合的重要性。
只有将所学知识运用到实际项目中,才能真正掌握单片机的编程与应用。
单片机实训--万年历程序

#include<reg52.h>typedef unsigned char uint8; #define clrdp 0x01#define enmode 0x06#define curback 0x02#define ondp 0x0f#define offdp 0x08#define movd 0x14#define funset 0x38#define bus P1#define contw 0x8e#define secw 0x80#define secr 0x81#define minw 0x82#define minr 0x83#define hourw 0x84#define hourr 0x85#define datw 0x86#define datr 0x87#define monthw 0x88#define monthr 0x89#define dayw 0x8a#define dayr 0x8b#define yearw 0x8c#define yearr 0x8dsbit K1=P2^7;sbit K2=P2^5;sbit K3=P2^4;sbit RS=P3^7;sbit RW=P3^6;sbit EN=P3^5;sbit DIO=P2^1;sbit RST=P2^2;sbit SCK=P2^0;bit flag=0;uint8 sel;uint8 time[7]={0};uint8 time_disp[32]={0}; void init_1602(void);void write_com(uint8 comd); void write_dat(uint8 wdata); void delay(void);void long_dleay(void);void init_1302(void);uint8 read_1302(uint8 addr);void write_1302(uint8 addr,uint8 wdata); void disp(void);void read_time(void);void sepr_time(void);void chk_key(void);uint8 bcd_dec(uint8 wdata);uint8 dec_bcd(uint8 wdata);void main(void){init_1302();init_1602();while(1){chk_key();read_time();sepr_time();disp();}}//1302初始化void init_1302(void){write_1302(contw,0);write_1302(secw,0);}//写1302寄存器void write_1302(uint8 addr,uint8 wdata) {uint8 i;SCK=0;RST=1;for(i=0;i<8;i++){DIO=addr&0x01;SCK=1;SCK=0;addr>>=1;}for(i=0;i<8;i++){DIO=wdata&0x01;SCK=1;SCK=0;wdata>>=1;}RST=0;}//读1302寄存器uint8 read_1302(uint8 addr) {uint8 i;uint8 temp;SCK=0;RST=1;for(i=0;i<8;i++){DIO=addr&0x01;SCK=1;SCK=0;addr>>=1;}for(i=0;i<8;i++){temp>>=1;if(! DIO){temp&=0x7f;}else{temp|=0x80;}SCK=1;SCK=0;}RST=0;return temp;}//读1302时间寄存器void read_time(void){uint8 i;uint8 temp;for(i=0;i<7;i++){temp=read_1302(0x81+i*2);time[i]=temp;}time[0]&=0x7f;}//显示时间void disp(void){uint8 i;write_com(0x80);for(i=0;i<16;i++){write_dat(time_disp[i]);}write_com(0xc0);for(i=16;i<32;i++){write_dat(time_disp[i]);}}//分离时间void sepr_time(void){time_disp[0]='-';time_disp[1]='-';time_disp[2]='2';time_disp[3]='0';time_disp[4]=(time[6]>>4)+0x30;time_disp[5]=(time[6]&0x0f)+0x30;time_disp[6]='-';time_disp[7]=(time[4]>>4)+0x30;time_disp[8]=(time[4]&0x0f)+0x30;time_disp[9]='-';time_disp[10]=(time[3]>>4)+0x30;time_disp[11]=(time[3]&0x0f)+0x30;time_disp[12]='-';time_disp[13]='-';time_disp[14]=(time[5]>>4)+0x30;time_disp[15]=(time[5]&0x0f)+0x30;time_disp[16]='-';time_disp[17]='-';time_disp[18]='-';time_disp[19]='-';time_disp[20]=(time[2]>>4)+0x30;time_disp[21]=(time[2]&0x0f)+0x30;time_disp[22]='-';time_disp[23]=(time[1]>>4)+0x30;time_disp[24]=(time[1]&0x0f)+0x30;time_disp[25]='-';time_disp[26]=(time[0]>>4)+0x30;time_disp[27]=(time[0]&0x0f)+0x30;time_disp[28]='-';time_disp[29]='-';time_disp[30]='-';time_disp[31]='-';}void init_1602(void){write_com(offdp);write_com(funset);write_com(enmode);write_com(movd);write_com(ondp);write_com(clrdp);}void write_com(uint8 comd){RS=0;RW=0;bus=comd;EN=1;EN=0;delay();}void write_dat(uint8 wdata){RS=1;RW=0;bus=wdata;EN=1;EN=0;delay();}void delay(void){uint8 t;for(t=0;t<250;t++);}void long_delay(void){uint8 t;for(t=0;t<200;t++){delay();}}void chk_key(void){uint8 buf;uint8 temp;if(!K1){long_delay();if(!K1){if(flag){if((sel>=0)&&(sel<8)){sel++;}else if(sel==8){temp=read_1302(secr);temp&=0x7f;write_1302(secw,temp);sel=0;flag=0;}else{sel=8;}}else{temp=read_1302(secr);temp|=0x80;write_1302(secw,temp);flag=1;}}}else if(!K2){long_delay();if(!K2){switch(sel){case 1:temp=read_1302(yearr);buf=bcd_dec(temp);if(buf<99){buf++;temp=dec_bcd(buf);write_1302(yearw,temp);}break;case 2:temp=read_1302(dayr);buf=bcd_dec(temp);if(buf<7){buf++;temp=dec_bcd(buf);write_1302(dayw,temp);}break;case 3:temp=read_1302(monthr);buf=bcd_dec(temp);if(buf<12){buf++;temp=dec_bcd(buf);write_1302(monthw,temp);}break;case 4:temp=read_1302(datr);buf=bcd_dec(temp);if(buf<31){buf++;temp=dec_bcd(buf);write_1302(datw,temp);}break;case 5:temp=read_1302(hourr);buf=bcd_dec(temp);if(buf<23){buf++;temp=dec_bcd(buf);write_1302(hourw,temp);}break;case 6:temp=read_1302(minr);buf=bcd_dec(temp);if(buf<59){buf++;temp=dec_bcd(buf);write_1302(minw,temp);}break;case 7:temp=read_1302(secr);temp&=0x7f;buf=bcd_dec(temp);if(buf<59){buf++;temp=dec_bcd(buf);temp|=0x80;write_1302(secw,temp);}break;default:break;}}}else if(!K3){long_delay();if(!K3){switch(sel){case 1:temp=read_1302(yearr);buf=bcd_dec(temp);if(buf>0){buf--;temp=dec_bcd(buf);write_1302(yearw,temp);}break;case 2:temp=read_1302(dayr);buf=bcd_dec(temp);if(buf>1){buf--;temp=dec_bcd(buf);write_1302(dayw,temp);}break;case 3:temp=read_1302(monthr);buf=bcd_dec(temp);if(buf>1){buf--;temp=dec_bcd(buf);write_1302(monthw,temp);}break;case 4:temp=read_1302(datr);buf=bcd_dec(temp);if(buf>1){buf--;temp=dec_bcd(buf);write_1302(datw,temp);}break;case 5:temp=read_1302(hourr);buf=bcd_dec(temp);if(buf>0){buf--;temp=dec_bcd(buf);write_1302(hourw,temp);}break;case 6:temp=read_1302(minr);buf=bcd_dec(temp);if(buf>0){buf--;temp=dec_bcd(buf);write_1302(minw,temp);}break;case 7:temp=read_1302(secr);temp&=0x7f;buf=bcd_dec(temp);if(buf>0){buf--;temp=dec_bcd(buf);temp|=0x80;write_1302(secw,temp);}break;default:break;}}}}uint8 dec_bcd(uint8 wdata){uint8 temp;uint8 i;uint8 j;i=wdata/10;j=wdata%10;temp=i;temp=temp<<4;temp=temp|j;return temp;}uint8 bcd_dec(uint8 wdata){uint8 temp;uint8 i;uint8 j;i=wdata>>4;j=wdata&0x0f;temp=i*10+j;return temp;。
单片万年历的实训报告

一、实训背景与目的随着科技的发展,单片机技术在各个领域得到了广泛应用。
万年历作为一种实用的电子设备,在日常生活中有着重要的地位。
本实训旨在通过设计并实现单片万年历,提高学生对单片机应用能力的掌握,加深对嵌入式系统设计、编程及调试的理解,培养解决实际问题的能力。
二、实训内容1. 万年历系统需求分析万年历系统应具备以下功能:(1)实时显示当前日期和时间;(2)具备闰年判断功能;(3)提供闰年、平年、大月、小月的判断;(4)提供日历查询功能;(5)提供闹钟功能。
2. 硬件设计万年历系统硬件主要由以下模块组成:(1)单片机:选用STC89C52单片机作为核心控制器;(2)实时时钟模块:选用DS1302实时时钟芯片,用于获取当前日期和时间;(3)显示模块:选用LCD1602液晶显示屏,用于显示日期和时间;(4)按键模块:选用独立按键,用于设置日期和时间、查询日历、设置闹钟等;(5)蜂鸣器:用于闹钟提示。
3. 软件设计万年历系统软件主要由以下部分组成:(1)主程序:负责初始化系统、处理按键输入、显示日期和时间、查询日历、设置闹钟等功能;(2)时钟模块:负责读取DS1302芯片的当前日期和时间,并更新显示;(3)日历模块:负责判断闰年、平年、大月、小月,并计算日期;(4)闹钟模块:负责设置闹钟时间,并在设定时间到来时触发蜂鸣器。
三、实训过程1. 硬件搭建根据设计方案,搭建万年历系统硬件电路,包括单片机、实时时钟模块、显示模块、按键模块和蜂鸣器等。
2. 软件编写使用C语言编写万年历系统软件,包括主程序、时钟模块、日历模块和闹钟模块等。
3. 调试与优化对万年历系统进行调试,修复程序中的错误,并对系统性能进行优化。
四、实训结果经过设计和调试,成功实现了一个功能完善的单片万年历系统。
系统能够实时显示当前日期和时间,具备闰年判断、日历查询、闹钟等功能。
用户可以通过按键设置日期和时间、查询日历、设置闹钟等。
五、实训总结1. 收获通过本次实训,我掌握了以下知识和技能:(1)熟悉了单片机系统硬件设计及搭建;(2)掌握了C语言编程及调试技巧;(3)了解了嵌入式系统设计及开发流程;(4)提高了解决实际问题的能力。
单片机万年历实习报告

一、实习背景随着科技的发展,单片机技术逐渐成为电子领域的主流技术之一。
为了提高自己的实践能力,加深对单片机原理的理解,我参加了单片机万年历的实习项目。
本次实习以AT89C51单片机为核心,结合LCD1602液晶显示屏,设计并实现了一个功能完善的万年历。
二、实习目的1. 熟悉单片机的基本原理和编程方法,掌握单片机的应用技术。
2. 学会使用LCD1602液晶显示屏,了解其工作原理和驱动方法。
3. 掌握万年历的设计与实现方法,提高自己的动手能力和实际操作技能。
4. 培养团队合作精神,提高自己的沟通能力和组织协调能力。
三、实习内容1. 硬件设计(1)选用AT89C51单片机作为核心控制器。
(2)使用LCD1602液晶显示屏显示日期、星期等信息。
(3)选用DS1302实时时钟模块获取当前时间。
(4)选用按键模块实现用户交互功能。
2. 软件设计(1)编写程序实现万年历的基本功能,包括日期显示、星期显示、时间设置等。
(2)编写程序实现实时时钟模块的初始化、数据读取和更新。
(3)编写程序实现按键模块的扫描和处理。
(4)编写程序实现LCD1602液晶显示屏的初始化、数据写入和显示控制。
3. 调试与优化(1)对硬件电路进行调试,确保电路连接正确,各模块工作正常。
(2)对软件程序进行调试,修复程序中的错误,优化程序性能。
(3)调整程序参数,使万年历显示效果更佳。
四、实习过程1. 硬件电路搭建根据设计要求,我首先搭建了万年历的硬件电路。
首先,将AT89C51单片机、LCD1602液晶显示屏、DS1302实时时钟模块和按键模块连接起来。
然后,对电路进行测试,确保各模块正常工作。
2. 软件编程在硬件电路搭建完成后,我开始编写软件程序。
首先,编写程序实现万年历的基本功能,包括日期显示、星期显示、时间设置等。
然后,编写程序实现实时时钟模块的初始化、数据读取和更新。
接着,编写程序实现按键模块的扫描和处理。
最后,编写程序实现LCD1602液晶显示屏的初始化、数据写入和显示控制。
万年历时钟实训报告

一、实训目的本次万年历时钟实训的主要目的是通过实际操作,学习万年历时钟的设计与制作,掌握万年历时钟的原理和制作方法,提高动手实践能力和创新思维。
实训过程中,我们学习了万年历时钟的硬件组成、软件编程、电路设计等知识,并对万年历时钟进行了实际制作。
二、实训内容1. 万年历时钟硬件组成万年历时钟主要由以下几部分组成:(1)单片机:作为万年历时钟的核心控制器,负责处理时间、日期、温度等数据,并控制整个时钟的运行。
(2)DS1302实时时钟模块:用于存储和提供当前时间、日期等信息。
(3)DS18B20温度传感器:用于检测环境温度。
(4)LCD12864液晶显示屏:用于显示时间、日期、温度等信息。
(5)按键:用于设置和调整时间、日期、温度等信息。
2. 万年历时钟软件编程万年历时钟的软件编程主要包括以下几部分:(1)主程序:负责初始化硬件设备,处理时间、日期、温度等数据,控制LCD显示。
(2)时钟模块:负责读取DS1302模块中的时间、日期信息,并实现时钟功能。
(3)温度模块:负责读取DS18B20传感器中的温度信息,并实现温度显示功能。
(4)按键处理模块:负责处理按键输入,实现时间、日期、温度的设置和调整。
3. 万年历时钟电路设计万年历时钟的电路设计主要包括以下几部分:(1)单片机与DS1302模块的连接:通过I2C接口连接单片机与DS1302模块,实现时间、日期信息的读取和写入。
(2)单片机与DS18B20传感器的连接:通过1-Wire接口连接单片机与DS18B20传感器,实现温度信息的读取。
(3)单片机与LCD12864显示屏的连接:通过SPI接口连接单片机与LCD12864显示屏,实现显示信息的输出。
(4)按键与单片机的连接:通过GPIO接口连接按键与单片机,实现按键输入的处理。
三、实训过程1. 硬件准备首先,准备好万年历时钟所需的硬件设备,包括单片机、DS1302模块、DS18B20传感器、LCD12864显示屏、按键等。
温度万年历的单片机实现实验报告

目录一、温度万年历设计的目的和意义 (1)二、电路设计方案 (1)三、原理设计 (1)四、方案结构图 (3)五、温度万年历1602驱动及显示的详细设计 (6)六、心得与总结 (14)一、温度万年历设计的目的和意义随着社会的发展,信息量的不断提升以前对信息交换的要求提高,温度万年历的发展以及投入市场变得非常有必要。
本设计是基于51单片机并模拟日常所用的日历,而51系列单片机是各单片机中最为典型和最有代表性的一种。
通过本次设计,学习和巩固了单片机指令编程的相关知识,熟悉单片机各部件的组成及其功能。
本设计将制作一种基于单片机控制的带实时温度显示、具有定时功能的电子万年历。
传统的电子日历大都体积大,功耗大,显示不准确等特点。
为了缩小体积,减小功耗,使其变得小巧灵敏,本设计加入了时钟芯片DS1302,可对时间进行准确记时,同时可设置定时时间,实现定时功能。
另外本设计具有显示实时温度的功能。
传统的温度传感器系统大都采用放大、调理、A/D转换,转换后的数字信号送入计算机处理,处理电路复杂、可靠性相对较差,占用计算机的资源比较多。
本设计将采用DS18B20一线制数字温度传感器,可将温度信号直接转换成数字信号送给微处理器,电路简单,成本低,实现了时间温度同时显示的效果。
最后,温度和时间都将通过LCD1602液晶显示器进行显示。
测试表明系统达到了设计要求的各项功能,各部分工作正常。
二、电路设计方案采用AT89S52作为主控制系统; 直接采用单片机定时计数器提供秒信号;LCD 液晶显示屏作为显示。
三、原理设计1.基本原理:本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路直接采用单片机定时计数器提供秒信号;温度的采集由DS18B20构成;显示部份由LCD液晶显示屏显示。
同时还添加了提醒功能,通过蜂鸣器实现。
2.总体框图图13. 单元电路设计◆ 单片机主控制模块的设计AT89S52单片机为40引脚双列直插芯片,有四个I/O 口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O 口(P0、P1、P2、P3),每一条I/O 线都能独立地作输出或输入。
制作电子万年历实训报告

一、引言随着科技的飞速发展,电子产品的普及和应用越来越广泛。
电子万年历作为一种常见的电子设备,不仅可以显示年、月、日、星期、时、分等信息,还可以实现闹钟、定时显示等功能。
为了提高我们的实践能力和创新能力,本次实训我们选择制作一款基于单片机的电子万年历。
二、实训目的1. 掌握电子万年历的基本原理和设计方法。
2. 熟悉单片机的编程和应用。
3. 培养团队协作能力和动手实践能力。
三、实训内容1. 硬件设计本实训所使用的硬件主要包括以下部分:- 单片机:AT89C52- 时钟模块:DS1302- 显示模块:LCD1602- 遥控模块:1838V- 按键模块:S1(设置键)、S2(上调键)、S3(下调键)、S4(复位键)硬件电路图如下:2. 软件设计本实训所使用的软件主要包括以下部分:- 单片机编程:C语言- 显示程序:LCD1602驱动程序- 遥控程序:1838V遥控接收程序软件流程图如下:3. 功能实现本实训所实现的电子万年历具有以下功能:- 显示年、月、日、星期、时、分等信息。
- 遥控操作:设置时间、星期、日期等。
- 定时显示:定时显示当前时间。
- 停电自动计时:采用DS1302时钟模块,停电后可继续计时。
四、实训过程1. 硬件搭建首先,我们根据电路图搭建了电子万年历的硬件电路。
在搭建过程中,我们注意了以下几点:- 确保电路连接正确,避免短路或开路。
- 选择合适的元器件,确保电路性能稳定。
- 对电路进行测试,确保电路正常工作。
2. 软件编程接下来,我们使用C语言对单片机进行编程。
在编程过程中,我们遵循以下步骤:- 分析功能需求,确定程序结构。
- 编写程序代码,实现各项功能。
- 调试程序,确保程序运行正常。
3. 测试与优化在完成软件编程后,我们对电子万年历进行测试。
在测试过程中,我们发现以下问题:- 遥控操作不稳定。
单片机实训总结报告万年历

一、引言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。
为了提高我们的实践能力和专业技能,我们选择了单片机实训作为课程的一部分。
在实训过程中,我们以万年历为例,通过学习单片机原理、编程和应用,实现了万年历的设计与制作。
本文将详细总结万年历实训的整个过程。
二、实训目标1. 掌握单片机的基本原理和编程方法;2. 熟悉万年历的设计与制作流程;3. 提高动手实践能力和团队合作精神;4. 培养创新思维和解决问题的能力。
三、实训内容1. 单片机原理及编程实训初期,我们学习了单片机的基本原理,包括CPU、存储器、输入输出接口等。
通过学习,我们了解了51单片机的结构、工作原理和指令系统。
在此基础上,我们学习了C语言编程,掌握了Keil软件的使用方法。
2. 万年历设计与制作万年历的设计与制作分为以下几个步骤:(1)需求分析:确定万年历的功能,包括显示年、月、日、星期、时分秒、农历、公历、节假日等。
(2)硬件设计:选择合适的单片机、显示屏、按键等硬件设备。
本实训选用AT89C51单片机、LCD1602显示屏和按键。
(3)软件设计:编写万年历的程序,实现功能需求。
程序主要包括以下几个模块:1)时钟模块:实现时分秒的计时功能;2)日期模块:实现年、月、日的显示和计算;3)星期模块:根据日期计算星期;4)农历模块:根据公历日期计算农历日期;5)节假日模块:显示节假日信息;6)按键模块:实现用户交互功能。
(4)调试与优化:对万年历程序进行调试,确保功能正常运行。
同时,对程序进行优化,提高运行效率。
3. 实训成果展示经过一段时间的努力,我们成功完成了万年历的设计与制作。
以下为万年历的部分功能展示:(1)显示当前日期、时间、星期和温度;(2)显示农历日期和节假日信息;(3)通过按键调整时间、日期和温度;(4)具有闹钟功能,可设置闹钟时间。
四、实训总结1. 提高了单片机编程能力:通过万年历的设计与制作,我们掌握了C语言编程方法,熟悉了Keil软件的使用。
万年历实训报告

一、任务目的通过万年历的设计与制作,进一步熟悉单片机内部定时器、I/O口、中断、提高实践能力二、设计要求用单片机设计一个功能实用,使用简便万年历,具体要求:根据提供的单片机键盘接口模块电路,加上必要的外部电路,设计出万年历的硬件电路,编写软件,用Proteus进行仿真实验,然后进行实物的软硬件调试,并撰写符合要求的实训报告。
三、系统硬件电路设计可分为最小系统、键盘电路、显示部分等几个单元电路,要求画出各部分电路图,写出工作原理。
这是仿真总图1、最小系统:最小系统包括时钟电路和复位电路。
时钟信号的产生:在MCS-51系列单片机内部有一个高增益反相放大器,其输入端引脚为XTAL1,其输出端引脚为XTAL2。
只在XTAL1和 XTAL2之间跨接晶振和微调电容,就可以构成一个稳定的自激振荡器。
复位电路,可分为上店复位电路和按键复位电路,在电子琴设计中采用的是按键复位电路。
该电路用RESET键实现复位,此时电源经两个电阻分压,在RST 端产生一个复位高电平2、按键电路:因为显示数码有限,所以就用P2_7口来判断,即当P2_7=0时显示时分秒;P2_7=1显示年月日。
而三个按钮分别是年月日或时分秒对应的加法按钮。
端,而P1口是段码输入端,来进行动态扫描。
四、软件设计#include<at89x51.h>unsigned int hour=0, min=0,sec=0,c=0,r=20, y=3,n=2012;unsigned char led[]={0x11,0xd7,0x32,0x92,0xd4,0x98,0x18,0xd3,0x10,0x90}; void delay(unsigned int x){unsigned int j;while(x--)for(j=0;j<125;j++);}void main(){TMOD = 0x01;TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;EA=1;ET0=1;TR0=1;while(1){ unsigned int q=0;for(q=0;q<50;q++){ if (P2_7==0){P0=0XFE;P1=led[sec%10];delay(1);P0=0XFd;P1=led[sec/10];delay(1);P0=0XFb;P1=led[min%10];delay(1);P0=0Xf7;P1=led[min/10];delay(1);P0=0Xef;P1=led[hour%10];delay(1);P0=0Xdf;P1=led[hour/10];delay(1);}else{P0=0XFE;P1=led[r%10];delay(1);P0=0XFd;P1=led[r/10];delay(1);P0=0XFb;P1=led[y%10];delay(1);P0=0Xf7;P1=led[y/10];delay(1);P0=0Xef;P1=led[n%10];delay(2);P0=0Xdf;P1=led[n%100/10];delay(2);P0=0xbf;P1=led[n%1000/100];delay(2);P0=0x7f;P1=led[n/1000];delay(2);}}if(P2_0==0){delay(1);if(P2_0==0);if(sec==60){min++;}else sec++;}if(P2_1==0){delay(1);if(P2_1==0);if(min==60){hour++;}else min++;} if(P2_2==0){delay(1);if(P2_2==0);if(hour==24){r++;}else hour++;}if(P2_0==0){delay(1);if(P2_0==0);if(y==1||y==3||y==5||y==7||y==8|y==10||y==12){if(r==31){r=1;y++;}else r++;}if(y==2){if(((n%400==0||n%4==0&&n%100!=0))&&r>=29){r=1;y++;}else if(((n%400==1||n%4==1&&n%100!=1))&&r>=28){r=1;y++;}else r++;}if(y==4||y==6||y==9||y==11){if(r==30){r=1;y++;}else r++;}}if(P2_1==0){delay(1);if(P2_1==0);if(y==12){n++;y=1}else(y++);}if(P2_2==0){delay(1);if(P2_2==0);n++;}}}void T0_1() interrupt 1{ TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;c++;if(c==20) { c =0; sec++;}if(sec==60){sec = 0; min++; }if(min==60) { min=0; hour++; }if(hour==24){hour=0;r++;}if(y==1||y==3||y==5||y==7||y==8|y==10||y==12){if(r==31){r=1;y++;} else r++;}if(y==2){if(((n%400==0||n%4==0&&n%100!=0))&&r>=29){r=1;}else if(((n%400==1||n%4==1&&n%100!=1))&&r>=28){r=1;y++;}else r++;}if(y==4||y==6||y==9||y==11){if(r==30){r=1;y++;}else r++;}if(y==12){n++;y=1}else y++;}五、系统调试该万年历要实现以下功能:1、实现正常走时;2、能够校准时间和日期;3、能够自动区分平润年和大小月;在仿真过程中出现的最典型的问题是按下加法按钮要么出现闪烁或抖动,要么就加法跳动数次,经分析与试验得知这是由于延时时间使用不当,于是我们在循环扫描的前面加一个FOR语句循环50次后再扫描是否有键被按下六、心得体会通过此次万年历的设计与制作,获得了丰富的理论知识,极大地提高了实践能力。
万年历的单片机实现

实验题目:万年历的单片机实现一、实验内容用单片机实现万年历二、实验要求(1)平时显示实时时钟与日历(2)输入任意日子可显示对应的星期和阴历(3)可设置的闹钟功能三、实验器件综合实验箱微机一台(Keil软件)四、设计任务分析本实验是基于51单片机的电子万年历的设计,其中包括当前时间与日期的显示,当前时间与日期的调整,闹铃的设置,任意日期的阴历查询以及星期查询的功能。
可以依据功能,将显示分为三个界面,分别为当前时间与日期显示界面,闹铃设置界面,综合查询界面,可通过三个按键进行切换,按键时需要软件“去抖”。
显示器件为型号为LCM12864的LCD液晶显示屏。
具体实现过程如下:五、具体实现过程可以依据功能,将显示分为三个界面,分别为当前时间与日期显示与设置界面,闹铃设置界面,综合查询界面。
由于LCM12864的配置文件中自带一个函数LCM_DispStr,可以直接将指定字符串显示于指定行列,故为了方便起见,也为了减少变量,将本实验中所需的时间与日期全部定义为字符串形式。
事实证明,这样反而加大了程序代码的冗余。
(一)、当前时间与日期显示与设置本界面中包含当前的时间与日期显示及设置功能,为主界面,即初始界面。
1、当前时间与日期显示由于时间具有同步性,故时间应该是可以动态刷新的,又为了不被其它功能影响计时的准确性,可以用一个定时器中断予以实现。
采用定时方式1,由于定时器无法计时1S,故可以设置一个变量从而使其为2ms*500,不太清楚具体晶振频率,取TH=-2000/256,TL=-2000%256,即作12MHz处理,经测试平均约每分钟2s的误差。
之所以设置值不大,也是为了后期的闹铃部分的闹钟能稍微响亮一些。
同时每次更新完时间后,若秒钟达到了60秒,则会引起相应的时间甚至日期的进位。
同时在日期的进位中,需要注意的是平闰年的2月只有28/29天,以及大月31天与小月30天。
2、当前时间与日期修改在此过程中,需要有按键可以进入修改界面,以及退出界面,同时,在修改时需要移位以及数字的加减功能,为了方便表明修改的哪位,设置了一个周期约为0.2s的闪烁功能。
51单片机万年历实验原理

51单片机万年历实验原理1. 概述51单片机万年历实验是一项基于51单片机的实验项目,用于模拟和显示日期和时间信息,使其具备一定的时钟和日历功能。
本文将详细介绍该实验的原理和实现方法。
2. 实验所需材料完成51单片机万年历实验需要以下材料: - 51单片机开发板 - LCD显示屏 - 时钟芯片(如DS1302) - 电容 - 电阻 - 键盘模块 - 连接线等3. 实验原理本实验的原理主要包括三个方面:51单片机的控制逻辑、时钟芯片的数据存储和显示屏的信息展示。
3.1 51单片机的控制逻辑在51单片机中,首先需要定义和初始化各个引脚和功能模块。
通过引脚的输入输出控制、时钟和定时器的设置,实现对时钟芯片和LCD显示屏的控制和数据传输。
3.2 时钟芯片的数据存储时钟芯片一般具有独立的电源供应和存储空间,用于储存日期和时间等信息。
通过与51单片机的通讯接口,读取和写入时钟芯片中的数据,实现对日期和时间信息的读取和更新。
3.3 显示屏的信息展示LCD显示屏作为用户界面,用于展示日期和时间等信息。
通过51单片机的输出控制,将读取到的日期和时间信息通过LCD显示屏进行展示。
具体的显示方式可以根据需求设计,如以年、月、日的格式显示,或者以星期和时间的格式显示等。
4. 实验步骤基于以上原理,可以按照以下步骤进行51单片机万年历实验:4.1 硬件连接按照实验所需材料,将51单片机开发板、LCD显示屏和时钟芯片等进行正确的连接。
根据引脚功能和电平要求,通过连接线将它们连接在一起。
4.2 编写程序使用合适的集成开发环境(如Keil)编写51单片机的程序。
程序主要包括引脚和功能模块的初始化设置、时钟芯片数据的读写和LCD显示屏信息的输出等。
4.3 载入程序将编写好的程序通过USB下载线或其他方式,将程序载入到开发板中。
确保程序可以正确地运行在51单片机上。
4.4 测试实验接通电源,观察LCD显示屏是否正常显示日期和时间信息。
万年历实训报告

单片机万年历实训报告课程名称:单片机C程序设计专业:电子信息专业班级: 13电信②班学号:1318201姓名:钟善友指导教师:黄丽英/候聪玲时间:2015年1月22日目录一、万年历设计思路操作分析二、硬件特性介绍AT89C51的工作原理功能特性概述主要性能参数三、工作原理万年历工作原理通用LCD162液晶介绍LCD162工作原理四、控制系统设计按键设计LCD162电路软件设计五、控制程序设计六、设计心得万年历设计思路按照功能要求,本时钟系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟的调整及显示。
本次设计万年历电路,分组独立计年月日星期时分秒:设计一个单片机控制的日期系统,利用单片机的定时器计数器定时和计数的原理,结合显示电路、LCD 液晶显示器以及按键来设计计数器。
使用了AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂线路,使电路简明易懂,使用按键调整年月日星期时分秒,同时使用C 语言程序控制整个显示,使编程变得更容易,这样通过芯片和显示屏完成设计。
软件采用可读性强的C 语言来写,经过KeilC 编译通过,并最终将十六进制(HEX )文件烧写到单片机中。
程序编写采取模块化、结构化设计。
语言程序可以分为几个主要功能模块程序:驱动程序,定时/计数器程序,键盘中断扫描程序,1602LCD 液晶显示程序。
操作分析以AT89C51单片机为核心的时钟,在LCD 显示器上显示当前的时间: ● 使用字符型LCD 显示器显示当前时间。
● 显示格式为“年—月—日 星期”● 时时:分分:秒秒●用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。
功能键K1~K4功能如下。
● K1—进入设置年,月,日,星期,小时,分钟,秒。
● K2—设置所选位的加1。
● K3—设置所选位减1。
● K4—确认完成设置。
程序执行后工作指示灯LCD 闪动,表示程序开始执行,LCD 显示“2015—01—22 4,”,“10:30:10”,然后开始计时。
单片机万年历实训报告

单片机万年历实训报告1. 引言本报告旨在介绍单片机万年历的设计和实训过程。
单片机万年历是一种基于单片机技术的电子产品,可以显示日期、时间以及其他相关信息。
本实训目的在于通过设计和制作一个简单的单片机万年历,加深对于单片机的理解和应用。
2. 设计概述2.1 硬件设计在硬件设计方面,我们选择了常见的AVR单片机作为控制器,配合相应的显示器、按键和时钟电路。
主要元件选用的是ATmega16单片机,因为其性能稳定、易于编程且资源丰富。
2.2 软件设计软件设计方面,我们使用C语言编程,通过编写相应的代码实现日期、时间以及其他功能的显示和更新。
同时,为了方便用户操作,我们设计了一些菜单和按键控制功能。
3. 系统结构3.1 硬件结构单片机万年历的硬件结构主要包括以下部分:1.单片机:ATmega16单片机作为核心控制器。
2.显示屏:通过连接数码管或LCD显示器来显示日期、时间等信息。
3.按键:用于用户与系统进行交互,包括设置时间、日期等操作。
4.时钟电路:提供单片机系统所需的时钟信号。
3.2 软件结构单片机万年历的软件结构主要包括以下功能模块:1.时钟模块:实现时钟的初始化、计时和显示功能。
2.日历模块:实现日期的初始化、计算和显示功能。
3.操作模块:处理用户的按键输入,包括设置时间、日期以及其他功能。
4.显示模块:根据当前的日期、时间等信息,将其显示在相应的屏幕上。
4. 功能设计4.1 日期和时间显示在单片机万年历中,最基本的功能之一是显示当前的日期和时间。
通过时钟模块获取当前的时间,再通过日历模块计算日期,并将其显示在屏幕上。
4.2 设置功能为了方便用户对日期和时间进行设置,我们设计了相应的设置功能。
用户可以通过按键进行小时、分钟、月份、日期等的设置,然后通过确认键进行保存。
设置功能能够满足大部分用户对日期和时间的要求。
4.3 闹钟功能为了使单片机万年历具有更多实用性,我们添加了闹钟功能。
用户可以设置闹钟的时间,当时间到达时,系统会发出提示音,并在屏幕上显示相应信息。
万年历单片机综合实验

综合实验报告实验题目:万年历学生班级:学生姓名:学生学号:指导教师:实验时间:摘要本设计是电子万年历。
具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。
我选用的是单片机STC89C52来实现电子万年历的功能。
该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒等信息。
该电子万年历使用12MHZ晶振与单片机STC89C52相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。
利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。
同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。
若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。
若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。
所以在该设计与制作中我选用了单片机STC89C52,它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外, 单片机STC89C52的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
因此,采用单片机STC89C52原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。
关键词:STC89S52 ,DS1302,LCD,PROTEUS目录一、实验要求: (3)1.1基本要求: (3)1.2拓展要求: (3)二、方案论证: (3)2.1.显示部分: (3)2.2.数字时钟: (3)三、总体方案: (4)四、系统硬件设计: (4)4.1. 时间设置模块: (4)4.2.时钟模块: (4)4.3.整点报时电路 (5)4.4. LCD液晶显示模块: (5)五、整体电路: (6)5.1.电路 (6)六、数字时钟使用说明: (7)七、心得体会: (7)八、程序代码: (7)一、实验要求:1.1基本要求:1、能动态显示年、月、日、星期、小时、分钟、秒。
单片机万年历的实训报告

一、实训背景随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。
单片机具有体积小、功耗低、成本低、可靠性高等优点,因此在智能仪表、工业控制、家用电器等领域具有很高的应用价值。
万年历作为一种时间记录工具,在日常生活中有着广泛的应用。
本实训旨在通过单片机万年历的设计与实现,提高学生对单片机编程和硬件应用能力的培养。
二、实训目的1. 熟悉单片机的基本原理和编程方法;2. 掌握万年历的设计与实现方法;3. 提高学生的动手能力和实践能力;4. 培养学生的创新意识和团队协作精神。
三、实训内容1. 单片机万年历硬件设计(1)单片机核心:选用AT89C51单片机作为核心控制器,其具有丰富的I/O接口,便于与其他外围电路连接。
(2)时钟芯片:选用DS1302时钟芯片,用于存储和提供系统时间,具有年、月、日、时、分、秒等信息。
(3)显示模块:选用LCD1602液晶显示屏,用于显示年、月、日、时、分、秒、星期等信息。
(4)按键模块:选用独立按键,用于设置和调整时间、日期、星期等信息。
(5)温度传感器:选用DS18B20数字温度传感器,用于检测环境温度。
2. 单片机万年历软件设计(1)系统初始化:对单片机进行初始化,设置时钟频率、I/O端口等。
(2)时钟读取与显示:从DS1302时钟芯片读取时间,并在LCD1602显示屏上显示。
(3)按键处理:对按键进行扫描和处理,实现时间、日期、星期等信息的设置和调整。
(4)温度检测与显示:从DS18B20温度传感器读取温度,并在LCD1602显示屏上显示。
(5)温度报警:当温度超过设定值时,通过蜂鸣器发出报警信号。
3. 单片机万年历功能实现(1)显示年、月、日、时、分、秒、星期等信息。
(2)设置和调整时间、日期、星期等信息。
(3)显示环境温度。
(4)温度报警功能。
四、实训结果与分析1. 硬件电路搭建成功,实现了万年历的基本功能。
2. 软件编程完成,实现了万年历的时间显示、按键处理、温度检测与显示、温度报警等功能。
单片机万年历实训报告

单片机万年历实训报告一、实训背景随着科技的不断发展,单片机已经成为了现代电子技术中不可或缺的组成部分。
在单片机的应用领域中,万年历也是一个比较重要的应用。
因此,在单片机课程中进行万年历实训,可以帮助学生更好地掌握单片机的编程和应用。
二、实训目标本次实训的主要目标是:1.掌握单片机的基本原理和编程方法;2.了解万年历的基本概念和计算方法;3.设计并实现一个完整的单片机万年历系统。
三、实训内容1.单片机基础知识学习在进行万年历实训之前,需要先学习单片机基础知识。
包括:单片机原理、寄存器操作、IO口操作等。
2.万年历功能分析了解万年历的基本概念和计算方法,包括:闰年判断、月份天数计算等。
3.系统设计与编程根据功能分析,设计并编写程序代码,实现一个完整的单片机万年历系统。
主要包括:时钟模块、显示模块、按键模块等。
4.系统测试与调试完成程序编写后,需要进行系统测试与调试,确保系统稳定可靠。
四、实训成果经过一段时间的学习和实践,我们成功地完成了单片机万年历的设计与实现。
具体成果如下:1.硬件部分硬件部分主要包括:单片机、时钟模块、显示模块、按键模块等。
其中,时钟模块采用DS1302芯片,显示模块采用数码管显示,按键模块采用矩阵按键。
2.软件部分软件部分主要包括:程序代码。
程序代码采用C语言编写,实现了完整的万年历功能。
3.系统测试经过系统测试,我们发现该单片机万年历系统具有较好的稳定性和可靠性。
可以正常地进行日期时间的显示和计算。
五、实训体会通过本次实训,我深刻地认识到了单片机在现代电子技术中的重要作用。
同时也提高了我对单片机编程能力和应用能力。
在实际工作中,我将更加注重对单片机技术的学习和应用。
六、总结本次实训是一次非常有意义的学习经历。
通过对单片机万年历的设计与实现,我们不仅掌握了单片机编程的基本方法,也了解了万年历的基本概念和计算方法。
希望今后能够继续保持学习的热情,不断提高自己的技术水平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ﻩshort year;//待选
char month;
charmday;
charweek;
charhour;
ﻩcharminute;
char second;
}time;
structtime_char//time的字符型
{
char ch_year[4];
charch_month[2];
char ch_mday[2];
charflag_ok=0;//key_up与key_down的功能选择
charflag_mean=0;
char flag_set=0;//key_up与key_down的功能标识
charflag_year_leap=0;
//短语
//codecharstring_time[]="Settingtime?\0";
code char string_hour[]="Settinghour? \0";
codecharstring_minute[]="Settingminute?\0";
code char string_second[]="Setting second? \0";
//年月日时分秒的定义
struct DATA_TIME
else return0;
}
//星期的判断
void de_week(void)
{
int i,j,day=0;
charmweek;
for(i=2000;i<time.year;i++)
{
if(leep_year(i))day+=366;
elseday+=365;
}
for(j=1;j<time.month;j++)
pt[1]=DATA-pt[0]*10+0x10;
}
voidtran_4_ch(char*pt,intDATA)
{
pt[0]=DATA/1000;
pt[1]=DATA/100-pt[0]*10;
pt[2]=DATA/10-pt[0]*100-pt[1]*10;
pt[3]=DATA-pt[0]*1000-pt[1]*100-pt[2]*10;
{
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
pt[0]+=0x30;
pt[1]+=0x30;
pt[2]+=0x30;
pt[3]+=0x30;
}
//格式转换的实现
voidtran_ch(void)
{
tran_4_ch(time_ch.ch_year ,time.year);
tran_2_ch(time_ch.ch_month,time.month);
charch_week[1];
charch_hour[2];
charch_minute[2];
char ch_second[2];
}time_ch;
/***************子函数****************/
//LCD的延时程序
void LCD_delay(void)
{
chari,j;
for(i=100;i>=0;i--)for(j=0;j<20;j++);
显示年、月、日、时、分、秒(24小时制)
时间可调,年份2000——9999
2012年10月9日
*******************************************/
#include<reg51.h>
/******全局变量的定义与设置******/
sbitkey_mean=P1^0;ﻩ//按键的定义
}
//向LCD写指令函数
void wcmd(charcmd)
{
RS=0;
RW=0;
E=1;
LCD_delay();
PORT=cmd;
LCD_delay();
E=0;
}
//向LCD写数据函数
voidwdata(charDATA)
{
RS=1;
RW=0;
E=1;
LCD_delay();
PORT=DATA;
tran_2_ch(time_ch.ch_mday,time.mday );
//tran_2_ch(time_ch.ch_week,time.week*10+1);
time_ch.ch_week[0]=time.week+0x30;
tran_2_ch(time_ch.ch_hour,time.hour);
单片机万年历实训
———————————————————————————————— 作者:
————————————————————————————————日期:
单片机万年历实训
仿真图:
原理图:
程序:
/******************************************
使用LCD1602与单片机实现的时钟与日期
tran_2_ch(time_ch.ch_minute,time.minute);
tran_2_ch(time_ch.ch_second,time.second);
}
//是否是闰年
char leep_year(intyear)//如果是闰年则flag_year_leep=1,否则=0
{
if((year%400==0)||year%4==0&&year%100!=0)return1;
codechar string_year[]="Setting year? \0";
codecharstring_month[]= "Settingmonth?\0";
codecharstring_mday[]="Setting day?\0";
code char string_week[]="Settingweek? \0";
sbitkey_ok=P1^1;
sbit key_set=P1^2;
sbitRS=P1^5;//LCD控制端口
sbitRW=P1^6;ﻩﻩﻩ
sbitE=P1^7;ﻩﻩﻩ
sfrPORT=0xa0;
char flag_sec=0;//值为20代表1s
charflag_en_ok=0;
charflag_en_key=0;ﻩ//值为1表示键盘有效,否则无效
LCD_delay();
E=0;
}
//写字符串
voidwstring(char *pt,chari)// i为字符的个数,不带\0
{
char j;
for(j=0;j<i;j++)
{
wdata(pt[j]);
}
}
//时Байду номын сангаас数据的格式转换
voidtran_2_ch(char*pt,charDATA)
{
pt[0]=DATA/10+0x30;