电子称课程设计和毕业设计说明书.doc
2022年-2023年建筑工程管理行业文档 齐鲁斌创作课程设计(论文)题 目 名 称 基于单片机的电子秤设计 课 程 名 称 单片机原理及在电气测控学科中的应用 学 生 姓 名 学 号 系 、专 业 指 导 教 师 课程设计(论文)任务书年级专业学生姓名学 号题目名称基于单片机的电子秤设计设计时间2011年6月20日2011年7月1日课程名称单片机原理及在电气测控学科中的应用课程编号121200105设计地点数字控制与PLC实验室创新实验室(214)(305)一、 课程设计(论文)目的课程设计是在校学生素质教育的重要环节,是理论与实践相结合的桥梁和纽带。单片机课程设计,要求学生更多的完成软硬结合的动手实践方案,解决目前学生课程设计过程中普遍存在的缺乏动手能力的现象。单片机课程设计是继电子技术、和单片机原理与应用课程之后开出的实践环节课程,其目的和任务是训练学生综合运用已学课程“电子技术基础”、“单片机原理及应用”的基本知识,独立进行单片机应用技术和开发工作,掌握单片机程序设计、调试和应用电路设计、分析及调试检测。二、 已知技术参数和条件1、利用单片机设计一款电子秤用以测量物体重量,能通过键盘设置单价,显示金额,重量、单价、金额及当前时间都能在LCD液晶显示器上显示出来。2、89C51系列单片机,A/D转换器件,LED数码管,LCD液晶显示器等;3、KEIL 软件;Wave软件;Proteus仿真软件;4、THKSCM-1型单片机实验系统。三、 任务和要求设计要求掌握电子秤的基本原理;掌握电子秤硬件电路的设计;掌握电子秤软件程序设计,掌握仿真软件的使用。1、 利用单片机设计一款电子秤用以测量物体重量,能通过键盘设置单价,显示金额,重量、单价、金额及当前时间都能在LCD液晶显示器上显示出来。2、 要求设计出电气原理图;3、 要求设计出程序流程图;4、要求设计出程序。注:1此表由指导教师填写,经系、教研室审批,指导教师、学生签字后生效;2此表1式3份,学生、指导教师、教研室各1份。四、参考资料和现有基础条件(包括实验室、主要仪器设备等)1、单片机课程设计指导,中南大学出版社,张一斌等2009年9月2、单片机实验与实践教程,北京航空航天大学出版社,何立民等2004年7月3、THKSCM-1型单片机实验系统实验指导书、KEIL 软件,WAVE 软件4、数字控制与PLC实验室”THKSCM-1型单片机实验系统”。31目 录摘 要I1绪论11.1 引言11.2电子称设计的背景及意义22 总体设计方案32.1设计方案32.2工作原理33 硬件电路的设计54 软件设计64.1主程序设计65 系统仿真96使用说明137 设计总结14参考文献15程序:16摘 要 随着科学的进步,智能仪器逐步替代了常规仪器。使得测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化。作为重量测量仪器,智能电子秤在各行各业开始显现其测量准确,测量速度快,易于实时测量和监控的巨大优点,并开始逐渐取代传统型的机械杠杆测量称,成为测量领域的主流产品。 本文设计的电子秤以ATMEGA16单片机为主要部件,外围附以称重电路、显示电路、报警电路、键盘电路、时钟芯片等构成称重系统电路板。用C语言进行软件设计,称重电路则以半桥传感器为主。称重传感器输出的电量是模拟量,数值比较小达不到A/D转换接收的电压范围。所以送A/D转换之前要对其进行前端放大、整形滤波等处理。然后,A/D转换的结果才能送单片机进行数据处理并显示。其数据显示部分采用LCD显示,成本低且能很好地实现所要求的功能。本次课设完成的电子秤的主要优点是:1、实时测量与监控。2、能显示称量时的日期时间。3、超值报警功能。4、测量精度高。5、显示速度快、准确。本文设计的电子秤虽然是一个极其简单的智能仪器,但是通过它可以更深入的了解智能仪器的工作原理以及其优异的性能。关键词:SP20C-G501;ATMEGA16;称重传感器;A/D转换器;LCD显示器1绪论1.1 引言在我们生活中经常都需要测量物体的重量,于是就用到秤,但是随着社会的进步、科学的发展,我们对其要求操作方便、易于识别。随着计量技术和电子技术的发展,传统纯机械结构的杆秤、台秤、磅秤等称量装置逐步被淘汰,电子称量装置电子秤、电子天平等以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。电子秤向提高精度和降低成本方向发展的趋势引起了对低成本、高性能模拟信号处理器件需求的增加。通过分析近年来电子衡器产品的发展情况及国内外市场的需求,电子衡器总的发展趋势是小型化、模块化、集成化、智能化;其技术性能趋向是速率高、准确度高、稳定性高、可靠性高;其功能趋向是称重计量的控制信息和非控制信息并重的“智能化”功能;其应用性能趋向于综合性和组合性。1.2电子称设计的背景及意义称重技术自古以来就被人们所重视,作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。电子秤是电子衡器中的一种,衡器是国家法定计量器具,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备,衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。称重装置不仅是提供重量数据的单体仪表,而且作为工业控制系统和商业管理系统的一个组成部分,推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。称重装置的应用已遍及到国民经济各领域,取得了显著的经济效益。电子秤是称重技术中的一种新型仪表,广泛应用于各种场合。电子秤与机械秤比较有体积小、重量轻、结构简单、价格低、实用价值强、维护方便等特点,可在各种环境工作,重量信号可远传,易于实现重量显示数字化,易于与计算机联网,实现生产过程自动化,提高劳动生产率。例如标签秤在超市中的应用已经是耳闻目睹的了。一张小小的标签包含着:品名、价格、重量等,一一列表在这小小的电子标签上。标签机的使用大大加快了销售速度,也方便了顾客。顶尖条码标签称有着许多卓越的特点,以太网功能使管理更加方便。因此,称重技术的研究和衡器工业的发展各国都非常重视。50年代中期电子技术的渗入推动了衡器制造业的发展。60年代初期出现机电结合式电子衡器以来,随着时代科技的迅猛发展,微电子学和计算机等现代电子技术的成就给传统的电子测量与仪器带来了巨大的冲击和革命性的影响。经过40多年的不断改进与完善,衡器技术也在不断进步和提高。从世界水平看,衡器技术已经经历了四个阶段,从传统的全部由机械元器件组成的机械称到用电子线路代替部分机械元器件的机电结合秤,再从集成电路式到目前的单片机系统设计的电子计价秤。我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。现今电子衡器制造技术及应用得到了新发展:电子称重技术从静态称重向动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。2 总体设计方案2.1设计任务设计要求掌握电子秤的基本原理;掌握电子秤硬件电路的设计;掌握电子秤软件程序设计,掌握仿真软件的使用。1、利用单片机设计一款电子秤用以测量物体重量,能通过键盘设置单价,显示金额,重量、单价、金额及当前时间都能在LCD液晶显示器上显示出来。2、要求设计出电气原理图;3、要求设计出程序流程图;4、要求设计出程序。2.2设计方案在智能化电子测量的设计理念要求下,整个电子秤电路由单片机主控制电路、时钟电路、液晶显示电路、5*4键盘电路和压力传感电路个部分组成。如图2.1所示。2.3工作原理 当接通电源电子秤才是工作时,电子秤进入工作状态,液晶显示单价、重量、金额、时间。首先可对单价进行设置,然后在载物台上放上要称量的物品。此时,在液晶显示屏上显示出物品的单价,重量,及自动计算出金额。传感器采用压变变阻器,当载物台受压力使弹簧发生形变,电阻器划片也发生滑动,而产生不同的电流值。传输到单片机芯片ATMEGA16键盘电路液晶显示压力传感器电源电路图2.1 整体设计方框图3 硬件电路的设计 综合考虑本次设计要求、现有元器件资源、元器件价格和对元器件的熟悉掌握程度,数字电子秤采用ATMEGA16单片机作为微处理器,接口电路由时钟芯片、液晶显示显示电路、5*4按键电路等来实现硬件电路的设计。控制器系统的硬件电路原理图如图3.1所示。控制器系统硬件电路的工作过程是:打开电源时,MCU及各个部分电路开始工作,MCU调用内部存储数据对各部分接口电路初始化。在对液晶显示检忙扫描,然后显示相应数据。同时扫描键盘,当输入数据时候,单片机对其进行相应处理。当载物台有物品放入时,将采集的数据传入单片机内部的ADC进行数模转换,并处理数据。最后送到液晶显示。图3.1 数字电子秤硬件电路图4 软件设计本设计中的程序由主控制程序、液晶显示驱动程序、和5*4键盘程序组成。4.1主程序设计 整个设计中采用由下向上的设计思路。主程序中主要完成对液晶显示、及键盘扫描程序的调用。在编写程序的过程中,各变量统一采用全局变量方式命名,同时考虑到电子秤对精度的要求,本设计中的价格及总量相关的变量全部采用浮点数。主程序流程图如图4.1所示。开始初始化载物台是否有重物?键盘扫描结束YN图4.1 主程序流程图 4.2液晶显示驱动程序开始写入控制字写入初始行是否换行?全部数据已写完?结束图4.2液晶显示驱动程序流程图 液晶能够显示比较复杂的汉字,首先必须对其写入控制操作字,包括图形的显示方式,字体的模式。然后写入初始行地址,指针自动左移,直到写完全部数据为止。 write_data(place&0xff); /写入地址高位 write_data(place/256); /写入地址低位 write_com(0x24); /地址设置 write_com(0xb0); /设置数据自动写 write_data(ASC_MSK(c1-0x20)*16+k); /*-例如:0的ASCII码为0x30, 在ASC_MSK中的位置为0x10*16 -16字节字码依次写入LCD-*/ write_com(0xb2); /自动复位 place=place+30; MCU通过拉低CS、拉高CLK来启动ADC0832进行外部压力传感转换后的电压信号进行采样,每产生8个CLK脉冲,DATA获得一位完整的8bit数据,此时MCU发送中断请求,拉高CS,拉低CLK,并将数据DAT返回。4.3 5*4键盘程序 本设计中采用了5*4矩阵式键盘,单片机定时进行查询。首先单片机发送行扫描代码,然后进行列扫描,当发现某一列出现了低电平时,即返回相应的键盘值。若没有发现则说明当前行没有键按下,行扫描右移一位,继续执行列扫描。MCU根据相应的键值,即可确定被按下的键。开始发送行扫描码发送列扫描码列扫描完毕?毕?行扫描完毕?返回键值结束右移一位右移一位图4.4 5*4键盘程序5 系统仿真在protues的ISIS 7.4sp2软件环境下画出电路原理图,接下来就是将设计的程序在ICCAVR开发集成环境上编译成机器语言,进入Protues的ISIS,双击AT89C51,在"Program File中"添加"main.hex"文件到ATNEGA16中,如图5.1所示。图5.1 数字电子秤仿真设置图 该仿真验证的过程:首先按开始按,此时电子秤进入显示界面。液晶上显示"价格、重量、金额"。如图5.2所示。图5.2电子秤显示界面图 接下来调节压力传感模拟电路电压,将电压设为0表示此时载物台上没有物体。此时液晶显示画面为:单价:0 重量:0 总价:0”。如图5.3所示。图5.3电子秤模拟空载图 最后,上调压力传感电压表示已载有商品,在键盘上输入单价,再按确认,此时单片机自动计算出物品的金额,并在液晶上显示出金额。达到基本要求。如图5.4所示。最大称量重量29KG,如图5.5所示。图5.4电子秤模拟载物显示仿真图图5.4电子秤模拟最大称量范围仿真图6使用说明 在使用仿真的过程中,首先打开仿真电路图,并加载好“HEX”文件到单片机中。后将压力传感电压调制0,点击按钮,开始仿真。0到9分别为数字0到9的输入,10小数点,11乘法,12除法,13加法,14减法,16去皮,17清零,18确定,19退格。输入单价后按确定,电子秤将自动显示出金额。7 设计总结通过本次电子技能课程数字电子秤的设计,让我更加熟悉了单片机的整个设计流程。在设计过程中,我也意识到好的编程书写习惯对软件设计的重要性。刚刚开始由于自己变量大部分采用的是局部变量,导致程序仿真出错,给自己的修改创造不小的麻烦。经过一天的努力,统一采用全局变量终于实现最终的仿真结果和设计的全部任务和要求。当然本数字电子秤还有很多可以改进的地方,例如可以改进按键功能方便工作人员随时对各数据进行修改等等。由于设计时间有限,只能在以后的学习过程中做更进一步的改进。本次课程设计使我对单片机有了更深的认识,让我们把理论与实际结合,为我们更好的学为所用打下了基础。参考文献1 于永.51单片机C语言常用模块于综合系统设计实例精讲M.北京:电子工业出版社,2008:88-94.2 李朝青.单片机原理及接口技术(第三版)M.北京:北京航空航天大学出版社,2006.123 单片机课程设计指导,中南大学出版社,张一斌等2009年9月4 单片机实验与实践教程,北京航空航天大学出版社,何立民等2004年7月程序: #include<iom16.h>#include<stdlib.h>#define uchar unsigned char#define uint unsigned int#define PD0 0#define PD1 1#define PD2 2#define PB5 5#define PB6 6#define PB4 4#define PA7 7/*-宏定义-*/#define SET_BIT(x,y) (x|=(1<<y)#define CLR_BIT(x,y) (x&=(1<<y)#define GET_BIT(x,y) (x&(1<<y)/*-端口电平-*/#define LCD_RS_1 SET_BIT(PORTD,PD0)#define LCD_RS_0 CLR_BIT(PORTD,PD0)#define LCD_RW_1 SET_BIT(PORTD,PD1)#define LCD_RW_0 CLR_BIT(PORTD,PD1)#define LCD_EN_1 SET_BIT(PORTD,PD2)#define LCD_EN_0 CLR_BIT(PORTD,PD2)#define LCD_CS1_1 SET_BIT(PORTB,PB5)#define LCD_CS1_0 CLR_BIT(PORTB,PB5)#define LCD_CS2_1 SET_BIT(PORTB,PB6)#define LCD_CS2_0 CLR_BIT(PORTB,PB6)#define DataPort PORTC#define Busy 0x80/*-*/#define DS1302_RST_1 SET_BIT(PORTA,PA7)#define DS1302_RST_0 CLR_BIT(PORTA,PA7)#define DS1302_CLK_1 SET_BIT(PORTB,PB4)#define DS1302_CLK_0 CLR_BIT(PORTB,PB4)#define DS1302_DAT_1 SET_BIT(PORTB,PA7)#define DS1302_DAT_0 CLR_BIT(PORTB,PA7)float p,t;float qu_pi,shenfa,jieguo;uchar hour,sec,min;_flash uchar act5=0xf0,0xe0,0xd0,0xb0,0x70;_flash uchar dan=0x00,0x10,0x00,0x10,0xF8,0x17,0x49,0x12,0x4A,0x12,0x4C,0x12,0x48,0x12,0xF8,0xFF,0x48,0x12,0x4C,0x12,0x4A,0x12,0x49,0x12,0xFC,0x13,0x08,0x18,0x00,0x10,0x00,0x00;_flash uchar jia=0x80,0x00,0x40,0x00,0x20,0x00,0xF8,0xFF,0x87,0x00,0x40,0x80,0x20,0x40,0x90,0x3F,0x08,0x00,0x07,0x00,0x08,0x00,0x90,0xFF,0x20,0x00,0xC0,0x00,0x40,0x00,0x00,0x00;_flash uchar yuan=0x20,0x80,0x20,0x80,0x22,0x40,0x22,0x20,0x22,0x18,0xE2,0x07,0x22,0x00,0x22,0x00,0x22,0x00,0xE2,0x3F,0x22,0x40,0x23,0x40,0x22,0x40,0x30,0x40,0x20,0x70,0x00,0x00;_flash uchar jin=0x80,0x00,0x80,0x40,0x40,0x40,0x20,0x4A,0x50,0x52,0x48,0x62,0x44,0x42,0xC3,0x7F,0x44,0x42,0x68,0x62,0x50,0x52,0x20,0x4A,0x40,0x60,0xC0,0x40,0x40,0x00,0x00,0x00;_flash uchar e=0x10,0x10,0x8C,0x08,0x44,0xFC,0xB5,0x4A,0x26,0x49,0xA4,0x4A,0x74,0x7C,0x0C,0x08,0x02,0x80,0xF2,0x4F,0x1A,0x20,0xD6,0x1F,0x12,0x20,0xFB,0x4F,0x12,0xC0,0x00,0x00;_flash uchar zhong=0x08,0x40,0x08,0x40,0x0A,0x48,0xEA,0x4B,0xAA,0x4A,0xAA,0x4A,0xAA,0x4A,0xFE,0x7F,0xAA,0x4A,0xAA,0x4A,0xA9,0x4A,0xF9,0x4B,0x29,0x48,0x0C,0x60,0x08,0x40,0x00,0x00;_flash uchar liang=0x20,0x00,0x20,0x80,0x20,0x80,0xBE,0xAF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBF,0xAF,0x22,0x80,0x30,0x80,0x20,0x00,0x00,0x00;_flash uchar chu_shi_hua32=0x04,0x10,0x34,0x08,0xC4,0x06,0x04,0x01,0xC4,0x82,0x3C,0x8C,0x20,0x40,0x10,0x30,0x0F,0x0C,0xE8,0x03,0x08,0x0C,0x08,0x10,0x28,0x60,0x18,0xC0,0x00,0x40,0x00,0x00,0x40,0x00,0x42,0x40,0x44,0x20,0xC8,0x1F,0x00,0x20,0xFC,0x47,0x04,0x42,0x02,0x41,0x82,0x40,0xFC,0x7F,0x04,0x40,0x04,0x42,0x04,0x44,0xFE,0x63,0x04,0x20,0x00,0x00,0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00,0x04,0x80,0xF4,0x43,0x14,0x45,0x14,0x29,0x14,0x19,0xFF,0x17,0x14,0x21,0x14,0x21,0x14,0x41,0xF6,0xC3,0x04,0x40,0x00,0x00,0x00,0x80,0x00,0x60,0xFE,0x1F,0x22,0x02,0x22,0x02,0x22,0x02,0x22,0x02,0xFE,0x7F,0x22,0x02,0x22,0x02,0x22,0x42,0x22,0x82,0xFF,0x7F,0x02,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0xE4,0xFF,0x13,0x00,0x26,0x00,0x8A,0x3F,0xA3,0x24,0xAA,0x24,0xA4,0x24,0xA3,0x3F,0x26,0x40,0x2A,0x80,0xF2,0x7F,0x23,0x00,0x02,0x00,0x00,0x00,0x00,0x08,0x00,0x04,0x00,0x22,0x7F,0x11,0xC9,0x09,0x49,0x87,0x49,0x41,0x49,0x21,0x49,0x19,0x49,0x07,0x49,0x41,0x7F,0x81,0x00,0x41,0x80,0x3F,0x00,0x01,0x00,0x00,0x00,0x00,0xF8,0x07,0x48,0x02,0x48,0x02,0x48,0x02,0x48,0x02,0xFF,0x3F,0x48,0x42,0x48,0x42,0x48,0x42,0x48,0x42,0xFC,0x47,0x08,0x40,0x00,0x70,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x82,0x00,0x82,0x00,0x82,0x00,0x82,0x40,0x82,0x80,0xE2,0x7F,0xA2,0x00,0x92,0x00,0x8A,0x00,0x86,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,0x20,0x10,0x24,0x08,0x24,0x06,0xA4,0x01,0xFE,0xFF,0xA3,0x00,0x22,0x11,0x10,0x0C,0x1C,0x43,0x13,0x80,0xD0,0x7F,0x10,0x00,0x50,0x01,0x30,0x06,0x10,0x0C,0x00,0x00;_flash uchar shi=0x00,0x00,0xFC,0x3F,0x84,0x10,0x84,0x10,0x84,0x10,0xFE,0x3F,0x14,0x00,0x10,0x00,0x90,0x00,0x10,0x23,0x10,0x40,0x10,0x80,0xFF,0x7F,0x10,0x00,0x10,0x00,0x00,0x00;_flash uchar fen=0x00,0x01,0x80,0x00,0x40,0x80,0x20,0x40,0x98,0x20,0x86,0x1F,0x80,0x00,0x80,0x40,0x83,0x80,0x8C,0x40,0x90,0x3F,0x20,0x00,0xC0,0x00,0x80,0x01,0x80,0x00,0x00,0x00;_flash uchar miao=0x20,0x10,0x24,0x08,0x24,0x06,0xA4,0x01,0xFE,0xFF,0xA3,0x00,0x22,0x81,0x80,0x80,0x70,0x40,0x00,0x20,0xFF,0x17,0x00,0x08,0x10,0x04,0x20,0x03,0x60,0x00,0x00,0x00;void LcdJianMang();/检测忙函数_flash uchar shizijian16=0x00,0x00,0xE0,0x0F,0xF0,0x1F,0x08,0x20,0x08,0x20,0x18,0x30,0xF0,0x1F,0xC0,0x07,/ 0 0x00,0x00,0x00,0x00,0x10,0x20,0xF0,0x3F,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00, / 1 0x00,0x00,0x70,0x30,0x78,0x38,0x08,0x34,0x08,0x32,0xD8,0x31,0xF0,0x38,0x20,0x08, / 20x00,0x00,0x30,0x18,0x38,0x38,0x88,0x21,0x88,0x21,0xF8,0x33,0x70,0x1E,0x00,0x0C, / 30x00,0x00,0x00,0x06,0x80,0x05,0x60,0x24,0x30,0x24,0xF8,0x3F,0xF8,0x3F,0x00,0x24, / 40x00,0x00,0xF0,0x19,0xF8,0x39,0x88,0x20,0xC8,0x20,0x88,0x31,0x88,0x1F,0x00,0x06, / 50x00,0x00,0xE0,0x0F,0xF0,0x3F,0x88,0x20,0x88,0x20,0x98,0x20,0x98,0x1F,0x00,0x0E, / 60x00,0x00,0x38,0x00,0x18,0x00,0x08,0x3E,0x88,0x3F,0xE8,0x00,0x38,0x00,0x08,0x00, / 70x00,0x00,0x70,0x1E,0xF8,0x37,0x88,0x21,0x88,0x21,0x88,0x23,0xF8,0x1E,0x20,0x0C, / 80x00,0x00,0xF0,0x11,0xF8,0x3B,0x08,0x22,0x08,0x22,0x18,0x3B,0xF0,0x1F,0xE0,0x07, / 90x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, / '.' 100x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, / ' ' 110x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x31,0xC0,0x7B,0xC0,0x7B,0x80,0x31 / ':' 12;/*-*/void delay_1ms(void) uint i; for(i=1;i<20;i+) ;/*-*/void delay(uint x) uint i,j; for(j=0;j<x;j+) for(i=0;i<10000;i+);/*-*/void DS1302_Set_Byt(uchar x) uchar i; for(i=8;i>0;i-) if(x&0x01) DS1302_DAT_1; else DS1302_DAT_0; DS1302_CLK_0; DS1302_CLK_1; DS1302_CLK_0; x=x>>1; /*-*/uchar DS1302_Get_Byt() uchar i,x; x=0; CLR_BIT(DDRB,7); SET_BIT(PORTB,7); for(i=8;i>0;i-) x=x>>1; if(GET_BIT(PINB,7) x=x|0x80; DS1302_CLK_1; DS1302_CLK_0; SET_BIT(DDRB,7); CLR_BIT(PORTB,7); return x; /*-*/void DS1302_Set_Shu_Ju(uchar x,uchar y) DS1302_RST_0; DS1302_CLK_0; DS1302_RST_1; DS1302_Set_Byt(x); DS1302_Set_Byt(y); DS1302_RST_0; DS1302_CLK_0;/*-*/uchar DS1302_Get_Shu_Ju(uchar x) uchar y; DS1302_RST_0; DS1302_CLK_0; DS1302_RST_1; DS1302_Set_Byt(x); y=DS1302_Get_Byt(); DS1302_RST_0; DS1302_CLK_0; return y;/*-*/void LcdWriteData(uchar dataw)/写数据 LcdJianMang();/判忙 LCD_RW_0;/写 LCD_RS_1;/数据 DataPort=dataw; delay_1ms(); LCD_EN_1; delay_1ms(); LCD_EN_0; /*-*/void LcdWritCommand(uchar dataw)/写指令 LcdJianMang();/判忙 LCD_RW_0;LCD_RW_0;/ LCD_RS_0;LCD_RS_0;/指令 DataPort=dataw; delay_1ms(); LCD_EN_1; delay_1ms(); LCD_EN_0; /*-*/void LcdJianMang()/检测忙函数 LCD_EN_0; LCD_RW_1; LCD_RS_0; LCD_EN_1; DDRC=0x00; if(PINB&0x80) LCD_EN_0; DDRC=0xff; /*-*/void xie_yi_ge_han_zi(uchar x,uchar y,uchar z,uchar _flash *p) uchar i,y1; for(i=0;i<z;i+) if(y>63) LCD_CS1_1; LCD_CS2_0; y1=y-64; else LCD_CS1_0; LCD_CS2_1; y1=y; LcdWritCommand(x+0xb8); LcdWritCommand(0x40+y1); LcdWriteData(pi*2); LcdWritCommand(x+0xb9); LcdWritCommand(0x40+y1);