单片机课程设计-基于8279的电子时钟附加四个功能

上传人:na****u 文档编号:56963464 上传时间:2022-02-22 格式:DOCX 页数:61 大小:718.75KB
返回 下载 相关 举报
单片机课程设计-基于8279的电子时钟附加四个功能_第1页
第1页 / 共61页
单片机课程设计-基于8279的电子时钟附加四个功能_第2页
第2页 / 共61页
单片机课程设计-基于8279的电子时钟附加四个功能_第3页
第3页 / 共61页
点击查看更多>>
资源描述
数字电子钟电气工程学院2014年6 月5 日单片机原理与应用课程设计报告书课题名称:数字电子钟目录一 系统总体设计方案规划与选定31.中断程序说明32.主程序说明3二 硬件设计51.AT89C51(总线型)52.8279(控制键盘和LED显示)53.74HC13864.八位一体LED灯(用来显示时-分-秒)65.四乘五键盘66.DS18b2077.定时关灯8三 软件设计91.中断程序流程图92.测温子程序113.调时子程序124.主程序流程图13四 调试141.按键与功能对应不齐142.测温函数无法退出143.待调位显示C不正常154.数字键屏蔽155.调时时待调位C无法显示165.所有都修改成功后的程序说明16五 新增功能及实现方法161.定时关灯172.闹钟取消按键173.屏蔽按键功能174.测温功能17六 小结与体会18七 参考文献19八 附录(源程序代码、电路图等)201.源程序代码202电路图35任务书:设计一个电子数字钟,显示时分秒,且具有闹钟功能(如显示23-46-58)。用8279接口实现4*5键盘及8位LED显示。一 系统总体设计方案规划与选定1.中断程序说明(1) 走时程序:进入走时程序后,如果没有设定闹钟,则开定时器T0,以50ms为基础,循环20次。时间进行变化,如果秒个位小于9,则一秒到,秒个位加1;如果秒个位等于9,则秒个位回0,同时判断秒十位,如果秒十位小于5,则秒十位加1;如果秒十位等于5,则秒十位回0,同时判断分个位,如果分个位小于9,则分十位加1;如果分十位等于9,则分十位回0,同时判断分十位,如果分十位小于5,则一秒到,分十位加1;如果分个位等于5,则分十位回0,同时判断小时个位,如果小时个位小于9,则小时个位加1,如果小时十位等于5,则小时十位回0,按此规律,时钟从00-00-00到23-59-59循环走时。2.主程序说明(1) 闹钟程序:设定闹钟后,时间到达所设闹钟点时,进入闹钟程序,响铃并正常走时,一分钟后响铃停止;如需中途停止,则按下闹钟取消键,则闹钟停止响铃。(2) 读键值程序:利用查询功能查询8279是否有按键按下,若有按键按下,则进入键值判断环节,根据事先设置的键值查找按下的按键。(3) 按键散转程序:根据读键值程序所得到的键值转移到相应按键处理函数。(4) LED显示程序:根据nao(闹钟),tiao(调时),guan(关闭),cewen(测温)标志位的不同,在8位LED上显示时间,闹钟设置,定时关灯设置和测温显示。将共阴极数码管所对应的段码写入8279的显示ROM中,可以将所对应的信息显示在数码管上。(5) 测温程序:当测温按键按下后,转移到该程序。初始化DS18b20,先将DQ位置1,稍做延时后DQ置0,延时480us以上,然后拉高DQ总线,读取DQ值,若初始化成功则返回presence=0。然后读取DS18b20中的数据并显示在数码管上,在这个过程中,时钟仍然正常工作但不显示在数码管上,显示温度1秒钟,之后再自动回到时间显示。(6) 调时间程序:当系统检测到调时按键按下后,进入调时模式,关闭定时器T0;在待调的位置上显示C,此时按下调节使能按键,使能数字键,按下数字键之后,可调节该位的时间,之后按下调节移位按键可以转换到下一位进行调节,当调节结束后可以按下走时键,即可走时,在走时的同时屏蔽数字键。(7) 闹钟设置程序:按下闹钟设置按键,显示闹钟时间,按下闹钟移位按键可以调节所要调整的位置,待调整位上显示C,在该位上按下相应的数字键可以进行调整,在这个过程中,时钟仍然正常工作但不显示在数码管上,调节完毕后可以按下推出闹钟设置按键即可显示时间。(8) 定时关灯程序:按下定时关灯设置按键,显示关灯时间,继续按下该键,改变调节的位置,待调位显示C,按下相应的数字键可以调节时间,在这个过程中,时钟仍然正常工作但不显示在数码管上,当调节结束后可以按下退出定时关灯设置键,当时钟时间到达所设定的时间时,定时关灯,节约能源。60二 硬件设计1.AT89C51(总线型)(1)P1.0:通过电阻限流和三极管放大接BUZZER,实现闹钟响铃(2)XTAL1和XTAL2:外接晶振电路,频率为12MHz(3)RST:接手动复位电路,实动复位,显示待命状态C.(4)AD07:接8279AD0-7,送低八位地址(5)P2.0(A8):接8279A0,选择数据口和状态口(6)P2.7(A15):接8279CS,进行8279片选(7)P3.6/WR:接8279WR,传递写信号(8)P3.7/RD:接8279RD,传递读信号(9)ALE:接8279CLK,设置8279扫描频率2.8279(控制键盘和LED显示)(1)AD0-7:接AT89C51P0.0-0.7(AD07)(2)CS:接AT89C51P2.7(A15)(3)A0:接AT89C51P2.0(A8)(4)RD:接AT89C51RD(5)WR:接AT89C51WR(6)IRQ:悬空(采用查询方式判断是否有键按下,故不需接单片机的外部中断)(7)CLK:接AT89C51ALE(8)RES:悬空(9)RL0-3:接键盘电路列值,指示输入键所在的列号(10)SL0-2:接74LS138,指示输入键所在的行号 (11)OUT_A0-A3:接数码管段选(E、F、G、DP) (12)OUT_B0-B3:接数码管(A、B、C、D)3.74HC138A-C:接8279SL0-SL2Y0-Y7:接74HC373(2)D0-D7E1:接VCCE2和E3:接地4.八位一体LED灯(用来显示时-分-秒)(1)A-G和DP:接74HC373(1)Q0-Q7(2)1-8:接74HC373(2)Q0-Q7 5.四乘五键盘 按键说明如下:048走时温度显示159闹钟设置取消闹钟26调节使能退出闹钟设置定时关灯设置37时钟移位闹钟移位退出关灯设置键码说明:000H 408H 810H 走时18H101H 509H 911H 闹钟设置19H202H 60aH 调节使能12H 退出闹钟设置1aH303H 70bH 时钟移位13H 闹钟移位1bH温度设置20H退出温度设置21H定时关灯设置22H退出关灯设置23H6.DS18b20(1)GND管脚直接接地(2)VCC接+5v(3)DQ接单片机P1.17.定时关灯(1)三极管b极接单片机P1.2(2)三极管c极接继电器的线圈,同时继电器的静触点上外接220V灯泡(3)继电器线圈接续流二极管,防止三 软件设计采用C语言编写程序,我们的程序可以分为两大模块:主程序模块(按键模块、闹钟模块、定时关灯模块,测温模块、调时模块)和中断程序模块(走时)。先将主要程序流程图总结如下。1.中断程序流程图 DisBuf6=6是是 秒数组DisBuf6=0 分数组DisBuf4+1 DisBuf4=10 DisBuf7=10 是 分数组DisBuf4=0 是 分数组DisBuf3+1 秒数组DisBuf7=0DisBuf3=6 秒数组DisBuf6+1 分数组DisBuf4=0 分数组DisBuf3=0 分数组DisBuf3=0 时数组DisBuf1+1DisBuf1=0DisBuf0=2DisBuf1=10 是分数组DisBuf1=0分数组DisBuf0=0 时数组DisBuf1=0 时数组DisBuf0+1 DisBuf7=0 DisBuf6=6 秒数组DisBuf7=0 秒数组DisBuf6-0 DisBuf4=0 DisBuf3=62.测温子程序 否是读取温度EA=0 显示转换 数码管显示 3.调时子程序s=4seat=7 4.主程序流程图是根据键值跳转到指定程序有键按下K0-K9,数字键否K10,调节使能K11,时钟移位K12,走时K13,闹钟设置四 调试无论是编程,还是画电路图,都遇到了很多的问题,尤其是对8279的了解过程很漫长,开始我对8279的功能与应用很陌生,以至于不知该如何着手,后来我们借了很多的资料,也研读了课本上的相关内容,花了很多的时间,才对其功能有所了解,下面我说一下我们在实现每一个功能的过程中遇到的困难和解决的办法。1.按键与功能对应不齐(1)在散转程序中,不同的子程序有各自的地址号,由于考虑了无按键时的空函数,占据了散转函数的第一位地址,同时,键码表的数组是从零开始的,所以返回时,键码表的按键返回值应为J+1,这样才能与散转程序中对应的按键处理程序所对应(2)4*5的键盘列线,按照课本通过上拉电阻接高电平,根本无法造成按键判断,调时无从谈起,按键右端会一直维持高电平,即使所在行有键按下,按键右边也不会变为低电平传到列线,传送返回,反而连键的左边也维持到高电平,查看8279FIFORAM,里边没有键码传入,后来我们将上拉电阻和高电平干脆去掉。在这一功能的实现过程最为漫长,因为按照书上的图连接键盘部分,可是一直无法中断,当时非常痛苦,找不到错误到底在哪里,但经过我们长时间的仔细讨论和思索,将高电平和上拉电阻去掉,才能使用。 2.测温函数无法退出(1)开始的时候我们为了按一下测温键就能马上反映出温度的读数,将测温子程序中的函数放在了while(1)中,这样按下温度键后,LED就能立刻反映出温度的读数。但是,这样做导致了按下测温键之后,系统无法自主退出测温子函数,陷入while(1)循环中,更无法正常显示时间,为了解决这个问题我们将while()中的条件更改为while(cewen),并且在计时器中记满一秒之后,令cewen=0,这样就可以使while退出循环,正常显示走时的时间。(2)上述问题解决后,我们在调试的过程中又发现一个BUG,按下调时键进行时间调整之后,再按下测温键,系统又无法退出温度显示,此时系统出现死机。经过我们对程序的认真梳理,发现测温的退出条件依赖于定时器一秒计时到时,cewen=0,而在调时时,我们关闭了计时器中断,这样,在一秒到之后系统没有响应中断将cewen置为0,于是系统无法退出测温显示,我们又将cewen的while条件改为(cewen&EA),保证了测温时定时器中断的打开。这样,如果EA=0,while循环会自动退出,而不会造成死机。3.待调位显示C不正常当调时和调闹钟时,我们的待调位应该显示C,可是由于显示C的子程序调用时,放得位置不对,导致C乱显示,修改C显示的位置,在每次按下调时或闹钟后或修改SEAT后,再显示C,C就可以在正确的位置显示了。4.数字键屏蔽(1)在正常走时时,我们发现如果误碰数字键就会将走时时间改变,这样影响了时钟走时的可靠性,为此,我们设置了tiao标志位,只有在tiao为1时,数字键才能对时钟进行调表,并且每当调表结束后,按下走时键,tiao位就会置0,屏蔽数字按键。(2)在调时时,我们发现如果不加以限制,每一位的数字是可以任意更改的,可能造成错误的时间组合,比如说26-73-67,这样完全不合逻辑的时间组合,为了减少人为造成的上述影响,我们进行了数字键键位屏蔽,例如,第一位数字只能为0、1、2,第二位数字可为09,但是一旦第一位数字为2,第二位只能为03,以此类推,所有的数字键都进行了键位屏蔽,保证时钟的准确性。5.调时时待调位C无法显示开始时,我们以为设置好tiao标志位就可以方便的进行调表了,但是很快又发现,待调位不能正常的显示C,原因是因为我们没有给定的标志位设定标签,于是,我们设定标志位SEAT,当按下调时键,给8279显示RAM的首地址写入C字型码,时钟十位显示C,当按下时钟位移时,SEAT改变,从而使显示C的位置改变,举例:按下时钟位移键,如果SEAT=1,则小时个位显示C,如果SEAT=4,在闹钟情况下,小时的十位显示C,在调时情况下,秒十位显示C;按下左移键,如果SEAT=3,小时十位显示C,如果SEAT=1,在闹钟情况下,分钟个位显示C,在调时情况下,秒个位显示C。5.所有都修改成功后的程序说明单片机上电后,时钟从00-00-00开始走时,按下调试键,第一位显示C,开始对第一位调节,以后通过控制移位键来修改所调位,调好之后,按下走时键,程序开始正常走时;如果正常走时时,按下闹钟键,第一位显示C,开始对第一位定时,控制移位键修改闹钟时间,修改好后按走时键,期间时钟正常走时。同理,可以调节定时关灯时间。与此同时,如果按下测温键,屏幕上显示所测温度,期间时间正常走时,1秒钟后回到时间显示。五 新增功能及实现方法本设计有四个新增功能:(1)定时关灯(2)闹钟取消按键(3)走时时按键屏蔽。(4)测量温度1.定时关灯在现代家居中,有时为了解决时间,需要对家用电器进行定时操作,为了满足人们对于家用电器的定时操作,我们设计了定时关灯环节,通过单片机的管脚驱动PNP型三极管实现继电器的关合,从而控制家用电器。2.闹钟取消按键闹钟响时,按下取消键,进入取消键中断程序,修改闹钟时间,使其为一个不可能达到的值,从而取消铃声;如果设有闹钟且时间未到,按下取消键,同样赋一个不可能走到的值,从而取消闹钟。3.屏蔽按键功能正常走时时,只有四个键有效:走时键、闹钟键、调试键和取消闹钟键,测温键,调节定时关灯键。按下调时键和调节使能键之后,数字键取消屏蔽,设置好时间之后,按下调节使能键,再次屏蔽数字键。同时在设定时间时,小时首位只能在02,分钟和秒的首位只能为05,当小时首位为2时,小时次位只能为03。4.测温功能在正常工作时,数码管显示时间,当按下测温键后,可以显示DS18b20中的温度。显示的格式为Cdd+温度+,可以显示两位或三位温度数据,测温范围为-55128。六 小结与体会通过此次课程设计,我真的收获很多,包括硬件和软件。1. 编程的过程中,几乎使用所用了所有的课本讲述基本C语言,所以无疑对课本单片机内容有了更深的理解和体会,更深地了解了它的原理和应用,比如单片机的晶振电路、复位电路、低八位地址传送端P0口、高八位地址传送端口P2口、外部中断口INT1及WR和RD写和读口等。另外就是对芯片8279的原理学习和应用,从很陌生到熟练应用,了解它的初始化(包括清零,设定标值等),了解它的OUT_A和OUT_B口(传递字型码)、ALE(设定扫描频率)、IQR(传递中断信号)、RL0-3(接键盘电路列值,指示输入键所在的列号)、SL0-2(接74HC138A-C,指示输入键所在的行号)等,了解它的LED显示和键盘扫描、它内部的显示RAM和FIFO RAM。2. 对DS18B20温度传感器单总线协议的学习,让我对单片机时序控制的重要性有了更深层次的理解,单总线协议完全依靠主机的时序命令对从机进行操作,进行写和读,任何时序的错误都可能导致数据的出错,这告诉我们以后的设计应该注意器件时序的配合。3. 对KEIL和PROTEUS软件的应用很熟练,包括KEIL软件的建工程、加入ASM文件、连接和编译以及PROTEUS软件的画图细节和调试运行步骤等(尤其是PROTEUS的应用,以前使用较少,在使用的过程中遇到了很多的问题,比如装软件和源程序显示,都费了很长的时间进行了解和学习)。4. 通过这次编程,我们犯了很多的错误,几乎数都数不清,我们编程开始的比较早,但却很晚才编好,所以我觉得编程序一定得思路已经清晰了,再去着手编写,否则漏洞百出,出现各种各样的错误,这无疑增加烦躁情绪,但是我很庆幸我和我的同组同学,克服那么多的困难,成功将程序编好,实现每一个功能,并且有附加功能,我很欣慰,这也归功于我们的坚持不懈和倾力付出。5.最后,特别要感谢的是杨老师一学期的辛苦教学,让我在单片机方面有这么多的了解,才有今天的编程水平和实现成果,忠心感谢。七 参考文献单片机原理、接口及应用 肖看 李群芳 编著 清华大学出版社单片机原理与接口技术 黄菊生编著 国防工业出版社单片机接口实用宝典 谢宜仁 机械工业出版社单片机原理教程:基于Proteus虚拟仿真 徐爱钧编著 电子工业出版社八 附录(源程序代码、电路图等)1.源程序代码#include #include#define uchar unsigned char#define uint unsigned int sbit beep=P10;/蜂鸣器sbit DQ=P11;sbit lamp=P12;bit Dreset=0; /DS18b20复位标记bit Dstart=0; /DS18b20运行标志位unsigned char presence; /读DS18b20复位返回值unsigned char temp=0;/整理读取数据,做进一步分析bit T0flag=0;/中断标志位char data DisBuf8=0,0,13,0,0,13,0,0; /显示缓冲区char data Disnao8=3,0,13,0,0,13,0,0;char data disguan8=12,0,13,0,0,13,0,0;unsigned char data Segtemp8=12,14,13,13,13,17,18,12;/时间设置计数unsigned char data Temp_data2;/读取温度暂存uchar code keyval=0x00,0x01,0x02,0x03,0x08,0x09,0x0a,0x0b, /键值表 0x10,0x11,0x12,0x13,0x18,0x19,0x1a,0x1b,0x20,0x21,0x22,0x23;uchar code SEG=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, /段码表0x7f,0x6f,0x77,0x7c,0x39,0x40,0x5e,0x79,0x71,0x00,0x63;unsigned int seat=0;unsigned int s=0;unsigned int tiao=0;unsigned int time=0;unsigned int nao=0;unsigned int cewen=0;unsigned int guan=0;/* 8279初始化函数 */void KbDisInit() XBYTE0x7fff=0x00; /设置8279工作方式 XBYTE0x7fff=0xD1; /清除8279 while (XBYTE0x7fff & 0x80);/等待清除结束 XBYTE0x7eff=0x34; /设置8279分频系数/* 读键值函数 */uchar ReadKey()uchar i,j; if (XBYTE0x7fff & 0x07) /判断是否有按键 XBYTE0x7fff=0x40; /有键按下,写入读FIFO命令 i=XBYTE0x7eff; /获取键值j=0;while (i!=keyvalj)j+; /查键值表return(j+1); return (0); /无键按下/* 显示函数 */void Disp() uchar i; XBYTE0x7fff=0x90; /写显示RA命令if(!nao&!cewen&!guan) for (i=0; i8; i+) XBYTE0x7eff=SEGDisBufi;/显示缓冲区内容 if(nao&!cewen&!guan) for (i=0; i8; i+) XBYTE0x7eff=SEGDisnaoi; if(cewen&!guan) for (i=0; i8; i+) XBYTE0x7eff=SEGSegtempi;if(guan) for (i=0; i0;x-) int i;for(i=113;i0;i-); unsigned char Init_DS18B20()/初始化ds1820 DQ = 1; /DQ复位 delay(8); /稍做延时DQ = 0; /单片机将DQ拉低 delay(90); /精确延时 大于 480us DQ = 1; /拉高总线 delay(8); presence = DQ; /如果=0则初始化成功 =1则初始化失败 delay(100); DQ = 1; return(presence); /返回信号,0=presence,1= no presence/*/unsigned char ReadOneChar()/读一个字节unsigned char s = 0;unsigned char dat = 0;unsigned char i;for (i = 8; i 0; i-) DQ = 0; / 给脉冲信号 dat = 1; DQ = 1; / 给脉冲信号delay(4); if(DQ) dat |= 0x80; delay(4); return (dat);/*/void WriteOneChar(unsigned char dat)/写一个字节 unsigned char i = 0; for (i = 8; i 0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1; /*/void Read_temperature(void)/读取温度Init_DS18B20();if(presence=1) Dreset=1;beep=0; /DS18B20不正常,蜂鸣器报警delayms(100);beep=1; else Dreset=0; WriteOneChar(0xCC); / 跳过读序号列号的操作 WriteOneChar(0x44); / 启动温度转换Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器Temp_data0 = ReadOneChar(); /温度低8位 Temp_data1 = ReadOneChar(); /温度高8位 /* 无按键处理函数 */void NoKey() ;/* 0键处理函数 */void k0() if(tiao&!nao&!guan) DisBufseat=0x00;if(tiao&nao&!guan)Disnaos=0x00;if(guan&tiao)disguans=0x00;/* 1键处理函数 */void k1() if(tiao&!nao&!guan) DisBufseat=0x01;if(tiao&nao&!guan) Disnaos=0x01;if(tiao&guan)disguans=0x01;/* 2键处理函数 */void k2() if(tiao&!nao&!guan) DisBufseat=0x02;if(tiao&nao&!guan) Disnaos=0x02;if(tiao&guan)disguans=0x02;/* 3键处理函数 */void k3() if(tiao&!nao&!guan)if(seat=0)DisBufseat=0;else DisBufseat=0x03;if(tiao&nao&!guan)if(s=0)Disnaos=0;else Disnaos=0x03;if(guan&tiao)if(s=0)disguans=0;else disguans=0x03;/* 4键处理函数 */void k4() if(tiao&!nao&!guan)if(seat=0)DisBufseat=0;else DisBufseat=0x04;if(tiao&nao&!guan)if(s=0)Disnaos=0;else Disnaos=0x04;if(guan&tiao)if(s=0)disguans=0;else disguans=0x04;/* 5键处理函数 */void k5() if(tiao&!nao&!guan)if(seat=0)DisBufseat=0;else if(DisBuf0=2&seat=1)DisBufseat=0;else DisBufseat=0x05;if(tiao&nao&!guan)if(s=0)Disnaos=0;else if(Disnao0=2&s=1)Disnaos=0;else Disnaos=0x05;if(tiao&guan)if(s=0)disguans=0;else if(disguan0=2&s=1)disguans=0;else disguans=0x05;void k6()if(tiao&!nao&!guan)if(seat=0)DisBufseat=0;else if(DisBuf0=2&seat=1)DisBufseat=0;else if (seat=3) DisBufseat=0;else if (seat=6)DisBufseat=0;elseDisBufseat=0x06;if(tiao&nao&!guan)if(s=0)Disnaos=0;else if(Disnao0=2&s=1)Disnaos=0;else if (s=3) Disnaos=0;else if (s=6)Disnaos=0;elseDisnaos=0x06;if(tiao&guan)if(s=0)disguans=0;else if(disguan0=2&s=1)disguans=0;else if (s=3) disguans=0;else if (s=6)disguans=0;elsedisguans=0x06;void k7()if(tiao&!nao&!guan)if(seat=0)DisBufseat=0;else if(DisBuf0=2&seat=1)DisBufseat=0;else if (seat=3) DisBufseat=0;else if (seat=6)DisBufseat=0;elseDisBufseat=0x07;if(tiao&nao&!guan)if(s=0)Disnaos=0;else if(Disnao0=2&s=1)Disnaos=0;else if (s=3) Disnaos=0;else if (s=6)Disnaos=0;elseDisnaos=0x07;if(tiao&guan)if(s=0)disguans=0;else if(disguan0=2&s=1)disguans=0;else if (s=3) disguans=0;else if (s=6)disguans=0;elsedisguans=0x07;void k8()if(tiao&!nao&!guan)if(seat=0)DisBufseat=0;else if(DisBuf0=2&seat=1)DisBufseat=0;else if (seat=3) DisBufseat=0;else if (seat=6)DisBufseat=0;elseDisBufseat=0x08;if(tiao&nao&!guan)if(s=0)Disnaos=0;else if(Disnao0=2&s=1)Disnaos=0;else if (s=3) Disnaos=0;else if (s=6)Disnaos=0;elseDisnaos=0x08;if(tiao&guan)if(s=0)disguans=0;else if(disguan0=2&s=1)disguans=0;else if (s=3) disguans=0;else if (s=6)disguans=0;elsedisguans=0x08;void k9()if(tiao&!nao&!guan)if(seat=0)DisBufseat=0;else if(DisBuf0=2&s=1)DisBufseat=0;else if (seat=3) DisBufseat=0;else if (seat=6)DisBufseat=0;elseDisBufseat=0x09;if(tiao&nao&!guan)if(s=0)Disnaos=0;else if(Disnao0=2&s=1)Disnaos=0;else if (s=3) Disnaos=0;else if (s=6)Disnaos=0;elseDisnaos=0x09;if(tiao&guan)if(s=0)disguans=0;else if(disguan0=2&s=1)disguans=0;else if (s=3) disguans=0;else if (s=6)disguans=0;elsedisguans=0x09;void k10()tiao=!tiao;void k11()if(seat=4|seat=1)seat=seat+2;else seat=seat+1;DisBufseat=0x0c;EA=0;if(seat7)seat=0;else DisBufseat=0x0c;void k12()EA=1;void k13() nao=1;void k14() nao=0;void k15()if(s=4|s=1)s=s+2;else s=s+1;Disnaos=0x0c;if(s7)s=0;nao=1;Disnaos=0x0c;void k16()cewen=1;if(cewen)T0flag=0; Read_temperature(); /检测温度,读出数据if(T0flag=0)temp=Temp_data04; /数据分析处理temp|=Temp_data17)s=0;disguans=0x0c;void k19()guan=0;/* k6, .其它按键处理函数可在此处插入 */code void (code *KeyProcTab)()=NoKey, k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16,k17,k18,k19;/* 主函数 */void main()KbDisInit();/8279初始化TMOD=0x01; /定时器初始化TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=ET0=TR0=1;lamp=0;tiao=0;while(1)Disp(); (* KeyProcTabReadKey()(); /根据不同按键的值查表散转naozhong();guandeng(); void t0() interrupt 1 /定时器T0中断子程序TH0=(65536-50000)/256;TL0=(65536-50000)%256;time+;T0flag=1;if(time=20)DisBuf7+;time=0;if(DisBuf7=10)DisBuf7=0;DisBuf6+;if(DisBuf6=6)DisBuf6=0;DisBuf4+;if(DisBuf4=10)DisBuf4=0;DisBuf3+;if(DisBuf3=6)DisBuf3=0;DisBuf1+;if(DisBuf1=10)DisBuf1=0;DisBuf0+;if(DisBuf7=0)if(DisBuf6=6)DisBuf7=DisBuf6=0;if(DisBuf4=0)if(DisBuf3=6)DisBuf4=DisBuf3=0;if(DisBuf1=4)if(DisBuf0=2)DisBuf1=DisBuf0=0;2电路图总电路图测温,闹钟响铃和定时开关键盘部分8279与单片机8279与138译码器走时
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!