温控系统课程设计_第1页
温控系统课程设计_第2页
温控系统课程设计_第3页
温控系统课程设计_第4页
温控系统课程设计_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机设计报告设计题目: 温控系统 设计作者: xxx 专业班级/学号: xxx 指导教师: xxx 设计时间: 2012年6月 摘要:本系统是由stc12c5a60s2为核心的温度控制系统,由pt100温度传感器读取温度,并以数字信号传给单片机。此系统分硬件、软件两部分,硬件分: stc12c5a60s2单片机,数码管显示时间、温度,按键调时、温,pt100温度传感器,放大电路,ds1302时钟电路,单片机通过对信号的相应的处理,从而实现时间显示与温度的控制。软件部分主要是主程序,子程序,还有用到中断程序。关键词:stc12c5a60s2芯片, pt100,ds1302。目录摘要21引言52

2、系统总体方案及硬件设计52.1系统基本框图52.2硬件设计63系统软件设计163.1主程序设计163.2定时中断程序设计164安装与调试174.1安装调试过程174.2故障分析185结论186使用元器件清单197参考文献19程序201 引言传感器是一种物理装置或生物器官,能够探测、感受外界的信号、物理条件(如光、热、湿度)或化学组成(如烟雾),并将探知的信息传递给其他装置或器官。新技术革命的到来,世界开始进入信息时代。在利用信息的过程中,首先要解决的就是要获取准确可靠的信息,而传感器是获取自然和生产领域中信息的主要途径与手段。在现代工业生产尤其是自动化生产过程中,要用各种传感器来监视和控制生产

3、过程中的各个参数,使设备工作在正常状态或最佳状态,并使产品达到最好的质量。因此可以说,没有众多的优良的传感器,现代化生产也就失去了基础。传感器早已渗透到诸如工业生产、宇宙开发、海洋探测、环境保护、资源调查、医学诊断、生物工程、甚至文物保护等等极其之泛的领域。可以毫不夸张地说,从茫茫的太空,到浩瀚的海洋,以至各种复杂的工程系统,几乎每一个现代化项目,都离不开各种各样的传感器。本温度控制系统是一个闭环反馈控制系统,它用温度传感器将检测到的温度信号经放大,送入单片机中进行数据处理并显示当前温度值,用当前温度值与设定温度值进行比较pid。实现对pwm的控制从而改变加热器的温度。通过这种控制方式实现对温

4、度的控制。系统功能由硬件和软件两大部分协调完成,硬件部分主要完成主机电路、数据采集电路、按键设置、控制执行等电路的设计。软件程序编写主要用来实现对温度的检测、标度转换、数码管显示。 2系统总体方案及硬件设计2.1系统基本框图 pt1温度采样放大采样信号控制系统(单片机)数码管显示驱动部分加热器操作系统2.2 硬件设计1、信号采集电路1)、选择pt100温度传感器采集信号pt100是铂热电阻,它的阻值跟温度的变化成正比。pt100的阻值与温度变化关系为:当pt100温度为0时它的阻值为100欧姆,在100时它的阻值约为138.5欧姆。它的工作原理:当pt100在0摄氏度的时候他的阻值为100欧姆

5、,它的阻值会随着温度上升而成匀速增长的。温度的测量方法多采用集成的半导体模拟温度传感器,传感器输出的电压或电流与温度在一定范围呈线性关系。通过放大,采样得到被测量。温度在 10摄氏度到80摄氏度范围内可调,通过单片机系统设计实现对温度的显示和控制功能。本温度控制系统是一个闭环反馈调节系统,由温度传感器pt100对保温箱温度进行检测,经过调理电路得到合适的电压信号。此电压信号通过单片机得到相应的pwm,将所得的pwm值送给tip127三极管进行控制电流从而加热电阻的温度也得到控制,并使单片机有相对应的信号输出显示。去调节pwm可使加热电阻的功率的变化,从而实现对温度的显示和控制。2)、信号放大温

6、度传感器通过感应外界的温度,使温度传感器对应的阻值变化,将此信号转换为电压变化;为了不受前后级的影响,经运放(lm324)的一级跟随;为了让采集信号更精确,本电路采用了减法器,把变化的信号单独取出;将这微小的信号进行放大;为了不受后级的影响,放大后再跟随隔离一次供给单片机的p1.0口。用此电路需要注意,供给此电路的电压一定要稳定。如图(1)所示:图(1)2、时间部分1)、s1302是美国dallas公司推出的一种高性能、低功耗、带ram的实时时钟电路,它可以对年、月、日、周、日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5v5.5v。采用三线接口与cpu进行同步通信,并可采用突发方式

7、一次传送多个字节的时钟信号或ram数据。ds1302内部有一个318的用于临时性存放数据的ram寄存器。ds1302是ds1202的升级产品,与ds1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。主要特点是采输用串行数据传,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768khz晶振。通过ds1302电路使得有更精确的时间,在外加设置按键,来调整时间。通过数码管显示。如图(2)所示:图(2)2)、执行ds1302的流程图初始化等待初始时间设置命令写操作按照新时间走读取当前时间数据将数据输入单片机日历、时间调整命令?否是

8、无3、单片机电路系统控制管理与数据处理采用60s2单片机来完成,硬件部分主要有单片机及外围电路,包括晶振电路和复位电路。如图(3)所示:图(3)1)、60s2芯片结(1)、p0口(p00p07)是一个8位三态双向i/o口,在不访问外部存储器时,作通用i/o口使用,用于传送cpu的输入/输出数据,当访问外部存储器时,此口为地址总线低8位及数据总线分时复用口,可带8个ls ttl负载。(2)、p1口(p10p17)是一个8位准双向i/o口(作为输入时,口锁存器置1),带有内部上拉电阻,可带4个 ls ttl负载。p1口可用来ad转换。60s2系列带a/d转换的单片机的a/d转换口在p1(p1.7p

9、1.0),有8路10位高速a/d转换器,速度可达到250khz(25万次/秒)。8路电压输入型a/d,除了可做温度检测外,还可做电池电压检测、按键扫描、频谱检测等。上电复位后p1口为弱上拉型i/o口,用户可通过软件设置将8路中的任何一路设置为a/d转换,不需要作为a/d使用的口可继续作为i/o口使用。(3)、p2口(p20p27)是一个8位准双向i/o口 ,与地址线高8位复用,可驱动4个 ls ttl负载。(4)、p3口(p30p37)是一个8位准双向i/o口,带有内部上拉电阻,可驱动4个 ls ttl负载。p3口为双功能口,它的第一功能作为通用i/o口,第二功能做控制口,如下表: 表p3口各

10、个位的第二功能(5)、电源线:vcc为+5v电源线,vss为接地线。(6)、控制线:ale/prog:地址锁存允许/编程线。ea/vpp:允许访问片外存储器/编程电源线。psen:片外rom选通线。rst/vpd:复位/备用电源线。xtal1和xtal2:片内振荡电路输入线。2)、复位电路:60s2是处于复位状态。且当主电源vcc发生故障而降低到规定低电平时,rst/vpd线上的备用电源自动投入,以保证片内ram中信息不丢失。复位电路分为上电复位和手动按钮复位两种形式。rst/vpd端的高电平直接由上电瞬间产生高电平则为上电复位;若通过按钮产生高电平复位信号称为手动按钮复位本次实验采取上电复位

11、,电路如图。3)、晶振电路: 系统的时钟电路设计采用的是内部方式,既利用芯片内部的震荡电路。60s2单片机内部有一个用于构成震荡器的高增益反相放大器。引脚xtal1和xtal2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器及电容构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性。在焊接电路板时,晶体振荡器的电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,保证振荡器稳定和可靠地工作。如右图。4、led数码管显示电路 1)、4位

12、七段led数码管结构如图所示,其分为共阴极和共阳极,本次实验采用共阳极的led数码管,即数码管的ag七个发光二极管加低电平(“0”)发亮,加低电平(“1”)发暗。如图(4)所示:图(4)2)、四位led数码管显示接口一般采用静态驱动和动态扫描两种驱动方式。静态驱动工作原理是每一个led显示器用一个i/o端口驱动,亮度大,耗电也大,占用i/o端口多,显示位数多时很少用;动态扫描驱动方式的工作原理是将多个显示器的段码同名端连在一起,位码分别控制,利用眼睛的余辉暂留效应,分别进行显示。只要保证一定的显示频率,看起来的效果和一直显示是一样的。在电路上用一个i/o端口驱动段码,用另一个i/o端口实现控位

13、,占用i/o端口少,耗电也小,简化拉电路,降低了成本,显示位数多时常采用这种方式。本次实验显示位数为8位,较多,所以选用动态扫描驱动方式。3)、本次实验中我们采用单片机p0口做数据口,p2口做选通口。由于p2口输出的电平带不动数码管,因此将每个口通过一个三极管放大,再加到数码管选通上去。应注意的是,经过三极管的信号反向,极性改变了;另外为保护三极管,输入必须接电阻限流防止三极管损坏。4)、七段led数码管与单片机的接口很简单,只需将单片机的一个8位并行i/o口与数码管的发光二极管的引脚相连即可。根据8位i/o口输出的不同数据,led就可以显示不同的数字或字符,这8位数据称为显示代码。如图(5)

14、所示:图(5)5、加热电路通过控制控制单片机,使p1.3口产生pwm,用pwm来控制三极管(pnp)的基极,让三极管导通,使得功率电阻(10)得到加热。如右图所示:6、pca/pwm的应用stc12c5a60s2系列单片机集成了两路可编程计数器阵列(pca)模块,可用于软件定时器、外部脉冲的捕捉、高速输出以及脉宽调制(pwm)输出。1)、pca工作模式寄存器cmodpca工作模式寄存器的格式如下:cidl:空闲模式下是否停止pca计数的控制位。 当cidl=0时,空闲模式下pca计数器继续工作;当cidl=1时,空闲模式下pca计数器停止工作。ecf:pca计数溢出中断使能位。当ecf=0时,

15、禁止寄存器ccon中cf位的中断;当ecf=1时,允许寄存器ccon中cf位的中断。2)、pca控制寄存器cconpca控制寄存器的格式如下:3)、pca模块pwm寄存器pca_pwm0和pca_pwm1本系统开的是pca_pwm0模式,pca模块0的pwm寄存器的格式如下:epc0h:在pwm模式下,与ccap0h组成9位数。epc0l:在pwm模式下,与ccap0l组成9位数。4)、产生pwm的流程图pca初始化中断入口测量温度设置温度?执行pwm是否7、ad的转换1)、ad转换是采用60s2单片机内部。60s2系列带a/d转换的单片机的a/d转换口在p1(p1.7p1.0),有8路10位

16、高速a/d转换器,速度可达到250khz(25万次/秒)。8路电压输入型a/d,除了可做温度检测外,还可做电池电压检测、按键扫描、频谱检测等。上电复位后p1口为弱上拉型i/o口,用户可通过软件设置将8路中的任何一路设置为a/d转换,不需要作为a/d使用的口可继续作为i/o口使用。本系统开的是10位adc,单片机内部通过模拟多路开关,模拟量将通过adc07的模拟量输入送给比较器,将比较结果保存到逐比较器,并通过逐比较寄存器输出转换结果。a/d转换结束后,最终的转换结果保存 到adc转换结果寄存器adc_res和adc_resl;同时,置位adc控制寄存器adc_contr中的a/d转 换结束标志

17、位adc_flag,以供程序查询或发出中断申请。模拟通道的选择控制由adc控制寄存器adc_contr中的chs2 chs0确定。adc的转换速度由adc控制寄存器中的speed1和speed0确定。在使用adc之前,应先给adc上电,也就是置位adc控制寄存器中的adc_power位。 即adrj=0时,如果10位结果,则按下面公式计算: 2)、ad转换流程图8、系统电路图3系统软件设计整个软件采用模块化设计,由主程序、中断子程序、显示子程序、按键子程序、ad转换子程序、产生pwm子程序、ds1302子程序等模块程序组成。系统软件主要完成显示测量温度、设置温度、时间、日历等功能,并对其可进行

18、任意设置。中断子程序是用定时中断来产生一定频率的对各个显示进行延时。3.1主程序设计主程序先对p0、p2两组i/o口、以及中断定时初值进行初始化,之后判断有没有按下按键进行切页面。当有按下切换键时,其页面会进行切换。其程序流程图如图(31)所示:开始系统初始化key+=0温度页面时间页面日历页面key=0key=1key=2图(31)3.2定时中断程序设计定时中断程序主要用于数码管扫描时间、ad转换时间等。该程序先定义两个变量用于控制使能端的高低电平的时间,每次中断进入后,两个变量自动加1,当两个变量分别满足一定值的时候,改变使能端的值,使能端实现高低电平。其中定时中断程序流程图如图(32):

19、开始定时值初始化及变量自加1变量值已加满?使能端取反yy返回ny图 (32) 定时中断程序流程图4安装与调试4.1安装调试过程4.1.1软件调试软件调试的过程主要是先分模块测试再统一调试。利用keil软件和实物电路对模块程序进行调试。先分别对各个程序进行编译,如先测试时间显示的子程序进行测试,看能否使单片机输出正确的控制信号。在各个模块都测试正常的情况下,将所有模块程序集合成一个程序。4.1.2硬件调试硬件电路可分为信号采集放大电路、单片机模块、显示电路、驱动加热器电路,四个部分进行调试。信号采集放大电路:首先检查电路板是否有线路短路或者断路以及各个元器件是否正确安装到电路板上。然后上电检测放

20、大后的信号是不是自己要的信号。单片机模块:主要检测复位电路和时钟电路。给单片机上电后,利用示波器检测晶振是否起振,在起振后,测试复位电路是否能够使单片机进行正常复位。显示电路:用万用表检测驱动数码管的三极管,给单片机上电,三极管的基极拉低,看三极管能否工作起来。再把数码管的数据口拉低,看数码管有否显示。驱动加热器电路:检查一下是否有短路或断路现象。4.2故障分析首先,我们对编好程序先进行软件上的调试,在确认程序没有错误后,我们通过软件把程序下载到60s2芯片里,然后进行硬件上的调试。调试的过程中,需要认真观察看那边是否不足;在温度的显示页面上,温度在不断的跳变,且跳变的范围很大;对此对硬件调试

21、,算出采集回来回来的放大的信号的公共公式;将算出的公式带入到程序当去。再一次的编译下载。再次观察现象,并对此判断是否能正常工作。并对其他功能进行检测,一模块、一模快的故障分析。最后,在把整体全部结合起来,调试,判断调温、调时功能能否实现,能否正常显示;切页能否工作等,一一的式。最后,通过单步调试以及整体调试,使得设计温控系统能够达到基本要求,并且温度跳变大大减小。总体来说,调试过程中碰到的问题很多,有显示、以及设计的电路等问题,但都能及时的发现这些问题并且针对这些问题进行探讨和修正。所以,此次课程设计对我在今后的学习具有深远的影响。5结论本次设计在同学及老师的指导下,完成了课题的基本功能。此设

22、计实现了利用单片机60s2为核心,信号采样放大、显示、驱动加热器等电路,实现了时间、日历等正常工作功能,同时在对程序进一步整理修改之后,使温度正常显示,并能够对其进行设温。在这次课程设计中,我从中学到很多,收获很多。通过了这个课程设计,使我对单片机更加深一步了解不少,体会到60s2单片机的强大功能。整个设计从方案确定、查阅资料、电路原理图的确定、制作电路板、程序设计以及电路的调试等步骤,每一个过程都让我学了很多,让我体会到完成每一项步骤都是需要自己认真全力的投入其中,这样才可以完成任务,时间才不会白花。虽然此次的设计已经完成了很多功能,但是由于自己的知识有限,此次设计中也存在着一些很大的问题。

23、例如,信号采集放大电路中的减法器的电路搭错了,使得硬件电路都无法出来,花了我好长的一段时间在调整这个。以后需要切记此次的教训,需细心才行。6使用元器件清单此次设计所示用的元器件如下表格所示:表格 9-1 元件使用清单元件名称封装型号、规格数量单片机dipstc12c5a60s21温度传感器pt1001晶振12m1精密滑阻1k2数码管(共阳)四位数码管(共阳)2时钟芯片ds13021电池扣cr20321瓷片电容20p2运放diplm3241发光二极管(红)led1电阻10010k30三极管pnp90128按键5自锁开关1功率管tip1271功率电阻10 3w1电解电容100uf3电解电容10uf

24、1瓷片电容10437参考文献1徐仁贵, 单片微型计算机应用技术m 机械工业出版社,20002马西秦, 自动检测技术m 机械工业出版社,20003邵裕森, 过程控制及仪表m 上海交通大学出版社,20003黄 坚, 自动控制原理及应用m 高等教育出版社,2000社,2008.4宏晶科技的资料及程序5黄继昌.电子元器件应用手册m.北京:人民邮电出版社,2007.6何立民.单片机应用系统设计.北京:北京航空航天大学出版社,1990.7王庆有,等.光电传感器应用技术.机械工业出版社,2008.8康华光,等.电子技术基础m.北京:高等教育出版社,1998.程序/*copyright (c)*/*主程序*/

25、*/#include mirts51.h#include seg.h#include key.h#include stcad.h#include stcpwm.h#include ds1302.hvoid func_2ms()seg_scan();void func_20ms()key_pageadd();key_pagecut();key_pageinto();key_pageback();into_done();back_done();void func_200ms()ad_result();pwm_out();void func_400ms()add_done();cut_done();

26、rd_ds1302();seg_flick();/-void sys_init()mirts51_init();stcad_init();init_pwm();ds1302_init();void main()sys_init();while(1)mirts51_sys();/*/*子程序*/*/*/定时中断子程序/*/#include #define unchar unsigned char#define tsys_unit 2000#define time0_tf0 1unchart2ms ,t20ms ,t200ms ;bitt2ms_bit,t20ms_bit,t200ms_bit,t

27、400ms_bit;void mirts51_init()ea=1;et0=1;tmod|=0x01;th0=(65536-tsys_unit)/256;tl0=(65536-tsys_unit)%256;tr0=1;void mirts51_clock() interrupt time0_tf0th0=(65536-tsys_unit)/256;tl0=(65536-tsys_unit)%256;t2ms_bit=1;+t2ms;if(t2ms=10)t2ms=0;t20ms_bit=1;+t20ms;if(t20ms=10)t20ms=0;t200ms_bit=1;+t200ms;if(t

28、200ms=2)t200ms=0;t400ms_bit=1;extern void func_2ms();extern void func_20ms();extern void func_200ms();extern void func_400ms();void mirts51_sys()if(t2ms_bit=1)t2ms_bit=0;func_2ms();if(t20ms_bit=1)t20ms_bit=0;func_20ms();if(t200ms_bit=1)t200ms_bit=0;func_200ms();if(t400ms_bit=1)t400ms_bit=0;func_400m

29、s();/*/显示信号/*/#include #define unchar unsigned char#define unint unsigned int#define data_port p0#define addr_port p2unchar idata seg_buf8; /idata:单片机间接访问的片内ram区,允许访问全部片内ram unchar seg_column=0;bit seg_bit;/extern的应用,例如:原定义:unsigned char idata abc; 引用:extern idata abc;extern char page_num;/“页面显示” 从外

30、文件库调用page_numextern unint last_result;extern bit flick_bit;extern unchar into_count; /计数按键按下的次数extern char temp_ten,temp_one,temp_dot;extern unchar idata real_time7;unchar code seg_num =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/,0x77,0x7c,0x39,0x5e,0x79,0x71;/a-funchar codeseg_sign=0x4

31、0,0x63,0x39;/ -, , c unchar code seg_addr=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;void scan_clean() /赋初值函数data_port=0xff;addr_port=0xff; /执行段选信号unchar scan_data(unchar num_show,unchar dot_show)bit num_bit,dot_bit;num_bit=(bit)(num_showseg_column)&0x01);dot_bit=(bit)(dot_showseg_column)&0x01);if(num_

32、bit=1&dot_bit=0)data_port=seg_bufseg_column;return 0;if(num_bit=1&dot_bit=1)data_port=seg_bufseg_column&0x7f;return 0;if(num_bit=0&dot_bit=0)data_port=0x00;return 0;if(num_bit=0&dot_bit=1)data_port=0x80;return 0;return 0;void scan_addr()addr_port=seg_addrseg_column;+seg_column;if(seg_column=8)seg_co

33、lumn=0;void page0()unint temp_tmp,tmp_use;tmp_use=(3716+9*last_result)/21+9)/0.88-27.5)*1.17; /温度采集计算公式/tmp_use=(10+(last_result-600)/42)*10;temp_tmp=tmp_use/100;seg_buf0=seg_numtemp_tmp;temp_tmp=tmp_use%100/10;seg_buf1=seg_numtemp_tmp&0x7f; /显示小数点temp_tmp=tmp_use%10;seg_buf2=seg_numtemp_tmp;seg_buf

34、3=seg_sign1; /显示温度单位seg_buf4=seg_numtemp_ten;seg_buf5=seg_numtemp_one&0x7f; /温度直接显示seg_buf6=seg_numtemp_dot;seg_buf7=seg_sign1; /显示温度单位/-void page1()/时分秒unchar page1_tmp;page1_tmp=real_time2%100/10;seg_buf0=seg_numpage1_tmp; /显示时的 十位page1_tmp=real_time2%10;seg_buf1=seg_numpage1_tmp; /显示时的 个位seg_buf2

35、=seg_sign0;/显示一干 page1_tmp=real_time1%100/10;seg_buf3=seg_numpage1_tmp;/显示分的 十位 page1_tmp=real_time1%10;seg_buf4=seg_numpage1_tmp;/显示分的 个位 seg_buf5=seg_sign0;/显示一干page1_tmp=real_time0%100/10;seg_buf6=seg_numpage1_tmp;/显示秒的 十位page1_tmp=real_time0%10;seg_buf7=seg_numpage1_tmp;/显示秒的 个位void page2()/年月日u

36、nchar page2_tmp;seg_buf0=seg_num2; /固定显示值为2 千位seg_buf1=seg_num0; /固定显示值为0 百位page2_tmp=real_time6%100/10; seg_buf2=seg_numpage2_tmp; /显示十位page2_tmp=real_time6%10;seg_buf3=seg_numpage2_tmp&0x7f; /显示个位page2_tmp=real_time4%100/10; seg_buf4=seg_numpage2_tmp; /显示十位月page2_tmp=real_time4%10;seg_buf5=seg_num

37、page2_tmp&0x7f; /显示个位月page2_tmp=real_time3%100/10;seg_buf6=seg_numpage2_tmp; /显示十位日page2_tmp=real_time3%10;seg_buf7=seg_numpage2_tmp; /显示个位日void *dir_page=page0,page1,page2;void page_turn()void (*page_tmp)();page_tmp=dir_pagepage_num; (*page_tmp)();void seg_scan()page_turn(); scan_clean(); /调用赋初值函数;

38、if(seg_bit=0)scan_data(0xff,0x00);/送段选信号elseif(page_num=0)if(into_count=1)scan_data(0xef,0x20); /送段选信号if(into_count=2)scan_data(0xdf,0x20);/送段选信号if(into_count=0)scan_data(0xbf,0x20);/送段选信号if(page_num=1)if(into_count=1)scan_data(0xfd,0x00);/送段选信号if(into_count=2)scan_data(0xef,0x00);/送段选信号if(into_coun

39、t=0)scan_data(0x7f,0x00);/送段选信号if(page_num=2)if(into_count=1) scan_data(0xf7,0x28);/送段选信号if(into_count=2)scan_data(0xdf,0x28);/送段选信号if(into_count=0)scan_data(0x7f,0x28);/送段选信号scan_addr(); /扫描段选信号void seg_flick()if(flick_bit=0)seg_bit=0;into_count=0;elseseg_bit=seg_bit;/*/按键子程序/*/#include #include ds

40、1302.h#define unchar unsigned char/ sbit 位变量名=字节地址位位置sbit key_add=p14;sbit key_cut=p15;sbit key_into=p16;sbit key_back=p17;char page_num; /显示页面char temp_ten=1,temp_one=0,temp_dot=0;unchar into_count;/-定义值是一个二进制位,不是0就是1bit add_bit,cut_bit,into_bit,back_bit;bit add_later=0;bit cut_later=0;bit flick_bi

41、t;extern char idata real_time7;/例如:原定义:unsigned char idata abc; 引用:extern idata abc;extern unchar code time_wr7;/秒,分,时,日,月,周,年unchar pwm_outdone;void add_done(); /添加完成函数void page0_add(); /在第一页内执行函数void page1_add(); /在第二页内执行函数void page2_add();/在第三页内执行函数void cut_done();void page0_cut();void page1_cut(

42、);void page2_cut();void into_done();void back_done();unchar return_temp();void key_pageadd()static bit key_affirm,add_once; /默认值0/*static表示静态的,当程序运行时这个变量就在内存中开辟地址了.当这个变量在某函数内定义时,不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的,非静态局部变量在函数关闭后重新打

43、开时就会重置初始值,而静态变量的值和函数本身的调用无关,始终存在.*/if(key_add=0)/按下 p1.4 对应的按键if(key_affirm=1)/确认 按键按下add_bit=1;if(add_once=0) add_once=1; /添加一次add_done(); /添加完成add_later=1; /添加后 要至1elsekey_affirm=1; /等待按键按下else/没按下 p1.4 “切” 执行这句key_affirm=0;add_once=0;add_bit=0;void add_done()if(add_bit=1&add_later=0)if(flick_bit=

44、0)+page_num; /页面自增if(page_num=3) /切页 共三页page_num=0; /页面还回到初始页elseif(page_num=0)page0_add(); /在第一页内执行温度函数if(page_num=1)page1_add(); /在第二页内执行时钟函数if(page_num=2)page2_add(); /在第三页内执行日历函数else /用到这个else语句是为了自己给自己赋0static unchar count; /第一个作用:隐藏(只能在本库中使用,对其他库隐藏); /第二个作用: 是保持变量内容的持久,可见范围全局变量比static变量大 /第三个作

45、用: 是默认初始化为0 /*对static的运用做个总结:首先static的最主要功能是隐藏, 其次因为static变量存放在静态存储区,所以它具备持久性和默认值0*/+count;if(count=2)add_later=0; count=0;/*在第一页内执行函数*温度页面*/void page0_add() /*温度执行十位*/if(into_count=1)+temp_ten; /温度十位if(temp_ten8) temp_ten=1; /温度大于80度时,温度自动跳到10度if(temp_ten=8)temp_one=0;/温度个位清0,temp_dot=0;/温度小数点位清0 /*温度执行个位*/if(into_count=1)if(temp_ten!=8)/十位不等于8时(即=10&temp_ten!=1)/temp_one=0;/if(temp_one=10&temp_ten=1)temp_one=0; /如果十位等于1时,那

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论