基于STC89C52单片机的红外遥控系统_第1页
基于STC89C52单片机的红外遥控系统_第2页
基于STC89C52单片机的红外遥控系统_第3页
基于STC89C52单片机的红外遥控系统_第4页
基于STC89C52单片机的红外遥控系统_第5页
已阅读5页,还剩35页未读, 继续免费阅读

下载本文档

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

文档简介

1、页眉内容信息工程学院电子信息系专业实训报告题目基于STC89C52单片机的红外遥控系统专业班级:电子信息工程 11级 1班学号: 15姓名:郭晓伟指导教师:李建军题目基于STC89C52单片机的红外遥控系统实训目的:通过对基于单片机的课程设计, 使我们进一步熟悉和掌握单片机的结构及工作原理,掌握单片机的接口技术及相关外围芯片的特性和控制方法。 并且通过对 本次的课程实习, 掌握以单片机为核心的电路设计的基本方法和技术。 在课程设 计中,我们亲自动手进行实际应用程序设计和调试, 逐步掌握模块化程序设计方 法和调试技术,熟练运用 DXP Protel99se等类似的画图软件和编程软件 keil C

2、等,在设计各自的课题中, 每位同学通过完成一个包括电路设计和程序开发的完 整过程,使大家了解开发单片机应用系统的全过程, 在自己的实践设计中熟练这 门技术时, 同时排除和解决设计中遇到的各种问题, 这是在此次课程设计中, 同 学们得到的最大的收益,而且为今后从事相应工作打下基础。实训时间、地点:时间: 2014春学期 第 17.18周地点:工程训练中心实验室 实训内容: 摘要:单片机的广泛应用促进了设备和产品的微型化, 数字化,自控化,和智能化。单片机的应用加深了计算机于自动化控制技术的结合, 从而在自动控制领域里引现在可以通发了一场对传统控制技术的革命, 也就是单片机正从根本上改变着传统的控

3、制设 计思想和设计方法, 是以往必须由模拟或数字电路实现的控制功能, 过软件方法实现了。 红外遥控是一种被广泛使用的计算机技术, 特别是在家电方 面给人们带来了方便快捷的生活。红外遥控用到许多中断技术,计算机系统中, 中断可以由各种硬件设备产生, 以便请求服务或报告故障报警等。 此外,中断也 可以由处理器自身产生。外部中断请求有两种信号方式有电平方式和脉冲方式。电平方式的中断请求时低电平有效, 脉冲的中断请求是脉冲的下降沿有效。 我通 过在图书馆查阅有关资料, 并且设计出了合适的电路图, 经过仔细研究并对电路 图做了多次修改, 满足了课题的要求, 实现了红外遥控的目的。 最后通过仿真器 输入程

4、序,手动中断,中断结束后,程序从断点处继续执行。中断的应用具有重 要的意义,它大大提高了计算机效率。关键词: 单片机;遥控器; STC89C5;2 红外遥控i=r以单片机为核心的控制系统, 因为其实时控制功能强, 可靠性高,实用性强,应用范围广等优点,得到了极为广泛的应用。随着人们生活水平的不断提高,单 片机控制无疑是人们追求的目标之一, 它所给人带来的方便也是不可否定的, 其 中红外遥控就是一个典型的例子, 但人们对它的要求越来越高, 要为现代人工作、 科研、生活、提供更好的更方便的设施就需要从单片机技术入手, 一切向着数字 化控制,智能化控制方向发展。红外线遥控是目前使用最广泛的一种通信和

5、遥控手段。 由于红外线遥控装置 具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在 录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥 控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不 仅完全可靠而且能有效地隔离电气干扰。 它的理论性和实践性都很强, 我们在理 论课学习中主要学习单片机的基本构造, 各部分的工作原理以及指令系统, 然而, 光是理论的学习是远远不够的, 最重要的是把理论和实践相结合。 所以此次实习, 通过设计一个基于AT89S52单片机的遥控器设计,以增进对单片机电路的感性认识,加深对理论方面的理解和巩固,了解和掌握软

6、硬件设计过程、方法及实现, 增强自己的动手和实践能力, 为以后在工作和学习中, 设计和实现应用系统打下 良好基础。单片机系统开发与应用工程实习要求及相关知识2.1 单片机系统开发与应用工程实习的重要意义单片机是计算机技术、大规模集成电路技术和控制技术的综合产物。现在, 凡是电脑控制的设备和产品, 必有单片机嵌入其中, 它早已成为人类生活中不可 或缺的助手。单片机体积小、重量轻,具有很强的灵活性而且价格便宜。单片机主要用于工业环境的实时控制、 智能化仪器仪表、 家用电器等各个不 同的领域。不同领域对单片机的使用有不同的要求,诸如环境温度、湿度、电源 波动、电磁场扰动、噪声、冲击、红外遥控等等,都

7、直接影响着单片机应用系统 的总体设计。 无论哪一种单片机应用系统, 在总体设计中都必须把工作环境的制 约当作重要因素对待。 单片机应用系统设计不但要熟练掌握单片机程序语言和编 程技术,而且还要具备扎实的单片机硬件方面的理论和实践知识。2.2 预期目标 设计一种基于AT89S52单片机控制的红外线遥控器,具有以下功能:适用于编码式红外线遥控型家用电器;可遥控多台家用电器;3)具有一个学习 / 控制复用键;4)可通过一个设备选择键和各个功能控制键实现对多台设备的常用功能的学 习和控制;5)成本低,抗干扰能力强。2.3 单片机相关知识(1) 本次实习所使用的单片机是 Atmel公司的STC89C52

8、芯片,此芯片的功能 强大,可以实现我们日常生活中接触到的大部分家电的自动控制功能和实现对家 电的远程遥控。STC89C52勺引脚图如2-1所示:图2-1 STC89C5引脚图单片机最小系统如下图所示:UIVftCa-1I血兒1 电IIWpl卜 日I =17Ii 垃 鬧 ID 301 护心I蚯心LI iGhlTjL1KIMlTL3ro3M3ILJPO斗TL4TL.7nfKfPVTDMJP3J 空)kL3MGPIJJWTOPl 3JHTIFJ7呻血tja仞甘VtiU3PJ3yrw.P31馳PMS7in皿TnUn匹SItjTITWnVCC代養弭电压谀原理图为单片机的S小系统图2-2单片机最小系统(2

9、) 单片机最小系统的复位电路由电容串联电阻构成,由图并结合“电容电压不能突变 的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC 值来决定典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位 所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C取10u,R取 8.2K当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个 机周期的高电平.至于如何具体定量计,可以参考电路分析相关书籍.图2-3单片机最小系统复位电路(3) 单片机最小系统的晶振电路 单片机的时钟电路由振荡电路和分频电路组成, 其振荡电路由反相器以及并联

10、外 接的石英晶体和电容组成,用于产生振荡脉冲。分频电路用于把振荡脉冲分频,以的到所需要的时钟信号。振荡电路如图2-2所示:图2-3单片机最小系统晶振电路其输入端为引脚XTAL1,输出端为引脚XTAL2。通过这两个引脚在芯片外 并接石英晶体振荡器和两只电容,石英晶体为一感性原件,与电容构成振荡回路, 为片内放大器提供正反馈和振荡的相移条件,从而构成一个稳定的自激振荡器。振荡器的频率主要取决于晶体的振荡频率,一般晶体可在1.212 MHz之间任选, 电容C1、C2可在530 pF之间选择,电容的大小对振荡频率有微小的影响,可 起频率微调作用。振荡脉冲经二分频后作为系统的时钟信号,时钟信号经过三分频

11、产生ALE 信号,ALE信号用于控制把P0 口的低8位地址送入锁存器锁起来,以实现低地 址和数据的分时传送,ALE还可作为外部时钟或外部脉冲使用。时钟信号经六 分频得到机器周期信号。(4) 中断系统A中断的概念当CPU与外设交换信息时,由于外设的速度比较慢,若用查询的方式,则CPU就要浪费很多时间去等待外设。 这样就存在一个快速的CPU与慢速的外设之 间的矛盾。为了解决这个问题,就发展了中断的概念。CPU正在处理某一程序时,发生了另一突发事件请求 CPU迅速去处理(中断发生);CPU暂时停止当前的工作,转到需要处理的中断源的服务程序的入口(中断响应),一般在入口处执行一跳转指令转去处理中断事件

12、 (中断服务);待CPU 将中断事件处理完毕后,再回到原来程序被中断的地方继续处理执行程序(中断 返回),这一处理过程称为中断。51单片机的中断系统提供5个中断源:外部中断0和外部中断1,定时/计 数器(T0)和(T1)的溢出中断,串行接口的接收和发送中断。本程序中只用到了外 部中断1。B中断控制1中断允许寄存器IE(A8H)CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存 器(IE)控制的。IE各位的定义如表2-2所示:表2-1位地址0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H位符号EA/ESET1EX1ET0EXCEA断允许总控制位Eg 0中断总禁止,

13、禁止所有中断Eg 1中断总允许,总允许后中断的禁止或允许由各中断源的中断 允许控制位设置。EXO和EX仁孙部中断允许控制位EXO(EX1 = 1允许外部中断EXO ( EX1) = O禁止外部中断ETO和ET1完时器/计数器中断允许控制位ETO(ET1)= O禁止定时器/计数器中断ETO (ET1)= 1允许定时器/计数器中断ES讳行中断允许控制位ES=OES=1禁止串行中断 允许串行中断2中断优先级控制寄存器(IP )各中断的优先级通过中断优先级控制寄存器IP来设定,其未定义及位地址如表2-3所示:P TO-定时中断O优先级设定位;P X外部中断1优先级设定位;PT1定时中断1优先级设定位;

14、表2-2位地址OBFHOBEHOBDHOBCHOBBHOBAHOB9HOB8H位符号/PSPT1PX1PTOPXOP XO-外部中断O优先级设定位;PS 行中断优先级设定位。C定时器控制寄存器(TCON该寄存器用于保存外部中断请求以及定时器的计数溢出。进行字节操作时,寄存器地址为88H按位操作时,各位的地址为88H- 8FH寄存器的内容及位地 址表示如表2-4所示:表2-3位地址8FH8EH8DH8CH8BH8AH89H88H位符号TF1TR1TF0TR0IE1IT1IE0IT0IEO和IE1 外中断请求标志位。当 CPU采样到INTO (或INT1 )端出现有 效中断请求时,IE0( IE1

15、)位由硬件置“ 1”。当中断响应完成转向中断服务程 序时,由硬件把IE0 (或IE1)清零。TRO和TR1-4定时器运行控制位:TR0 (TR1 )= 0定时器/计数器不工作TR0 (TR1 )= 1定时器/计数器开始工作TFO和TF1计数溢出标志位。当计数器产生计数溢出时,相应的溢出标志 位硬件置“ 1”。并自动产生定时中断请求。(5) 液晶显示模块 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780 ,带背光的 比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图所示:图2-4 1602LCD尺寸图1602LCD主要技术参数:显示容量:16 2个字符芯片工作电

16、压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95 .35(WXH)mm 引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源止极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表2-4:引脚接口说明表VSS为地电源。VDD接5V正电源。VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对

17、比度最高,对比度过高时会产生 鬼影”使用时可以通过一个10K的电位器调整对第4 脚:比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存 器。RS为低电平R/W第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当为高电平时可以读忙信号,当 RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:DOD7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。(6) 声音提示模块该设计有声音报警,当有病人呼叫时,蜂鸣器就会大声提示,直到

18、护士应答回复,才会停止鸣叫,控制引脚接在 P3.4引脚上,利用三极管当做开关电路可 以保护单片机,还可以起到放大电流的作用,当三极管基极为高电平时,发射极截止,为低电平时,发射极导通。报警模块如图2-5所示。图2-5声音提示模块系统硬件设计3.1红外遥控系统通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路编码调制、LED红如图所示:芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、 外发送器;接收部分包括光、电转换放大器、解调、解码电路。3.2遥控发射器及其编码NEC勺 uPD6121GS片发遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用 比较广泛,解

19、码比较容易的一类来加以说明,现以兼容射码格式的芯片组成发射电路为例说明编码原理。当发射器按键按下后,即有遥 控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组 合表示二进制的“ 0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组 合表示二进制的“ 1”,其波形如图所示:上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提 高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线 向空间发射,如图所示:UPD61210生的遥控编码是连续的32

20、位二进制码组,其中前16位为用户 识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。 芯片厂商把用 户识别码固定为十六进制的一组数; 后16位为8位操作码(功能码)及其反码。UPD6121(最多额128种不同组合的编码。遥控器在按键按下后,周期性地发出 同一种32位二进制码,周期约为108ms 一组码本身的持续时间随它包含的二 进制“0”和“ 1”的个数不同而不同,大约在 4563ms之间,图4为发射波形图。当一个键按下超过36ms振荡器使芯片激活,将发射一组108ms的编码脉 冲,这108ms发射代码由一个起始码(9ms , 一个结果码(4.5ms),低8位地址 码(9ms18ms

21、,高8位地址码(9ms18ms ,8位数据码(9ms18ms和这8位 数据的反码(9ms18ms组成。如果键按下超过108ms仍未松开,接下来发射的 代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。3.接收器及解码 一体化红外线接收器是一种集红外线接收和放大于一体,不需要任何外接元件, 就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的 塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。红外接收头将38K载波信号过虑,得到与发射代码反向接收代码,如图:I10.56mlJ2Smsj0,56ntt31 h2.25nu遥控码的0即和r (1)解码的关

22、键是如何识别“ 0”和“1” 从位的定义我们可以发现“ 0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“ 0”为0.56ms, “ 1”为1.68ms,所以必须根据高电平的宽度 区别“ 0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读 到的电平为低,说明该位为“ 0”,反之则为“ 1”,为了可靠起见,延时必须比 0.56ms长些,但又不能超过1.12ms,否则如果该位为“ 0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms) /2=0.84ms最为可靠,一般取 0.84ms左右均可。(2)根据码的格式,应该等待9ms的起始码和4

23、.5ms的结果码完成后才能读码。四电路框图设计4.1遥控发射单元的框图设计遥控发射单元由单片机最小系统和按键电路、红外发射器电路等组成,遥控发射单元框图如图所示:电源电路V复位电路STC89C52单片机1PJ红外发射器晶振电路按键电路图4-1红外遥控单元发射框图4.2遥控接收单元的框图设计遥控接收单元由单片机最小系统和红外接收器、控制对象电路等组成,遥控接收单元框图如图3-2所示:图4-2红外遥控接收单元框图五 电路原理图及程序流程图5.1遥控发射单元原理图遥控发射单元由单片机最小系统和按键电路、红外发射器电路等组成,遥控发射 单元原理图如图5-1所示。图5-1遥控发射单元原理图5.2遥控接收

24、单元原理图遥控接收单元由单片机最小系统和红外接收器、控制对象电路等组成,遥控接 收单元原理图如图5-2所示。图5-2遥控接收单元原理图5.3总PCB图如图5-3所示:图5-3总PCB图5.4红外遥控程序流程图(1)程序开始是对单片机进行初始化设置, 循环扫描判断是否有键按下,如果有键按下就发射相应的红外信号,遥控发射程序流程图如图5-4所示:图5-4遥控发射程序流程图(2)程序开始是对单片机进行初始化设置,循环扫描判断是否有键按下,如果有键按下就发射相应的红外信号,遥控发射程序流程图如图5-5所示,5.5实物图rf * f讒啊4ka I程序附录 1: /* 名称:红外线遥控发射(NEC编码)单

25、片机:STC89C52R晶振:12M */ #include #include MY_SET.h #include LCD1602_6IO.h #define KEY_PORT P1#define KEY_NULL 80sbitIR = P 29/ 发射引脚/sbitLED仁 PO;sbitLED2=Pl;sbitLED3=P2A2;sbitLED4=P 2八3;sbitKEY仁 PMO;sbitKEY2=P 1;sbitKEY3=P1A2;sbitKEY4=PIA3;sbitKEY5=PIM;#defineUSER_H P2/ 用户码高 8 位#defineUSER_L PO/用户码低 8位

26、Uint8tab16=0x12,0x05,0x1e,0x55,0x01,0x1b,0x03,0x6b,0x07,0x08,0x09,0x68,0x22,0xE6,0x33,0xe2;/臊作码uint16 M = O;#define m9(65536-9000)/9mS#define m4_5(65536-4500)/4.5mS#define m1_6(65536-1650)/1.65mS#define m_56(65536-560)/0.56mS#define m40(65536-40000)/40mS#define m56(65536-56000)/56mS页眉内容/2.25mS#defin

27、e m2_25 (65536-2250) void SanZhuan();uint8 KEY(void);voidZZ(uint8 x);/NEC 编码发送程序voidZ0(uint8 temp);/ 单帧( 8位数据)发送程序voidTT0(bit BT,uint16 x);/38KHZ载波发射+延时程序char keyscan();void delayk();/* 函数:主程序*/void main(void)uchar m;TMOD = 0x01;IE = 0x81;/ 允许总中断中断 ,使能 INT0 外部中断TCON = 0x01;/ 触发方式为脉冲负边沿触发IRIN=1;/I/O

28、口初始化BEEP=1;IR = 1;delay1(10);/ 延时lcd_init();/初始化 LCDlcd_pos(0);/ 设置显示位置为第一行的第 1 个字符m = 0;while(cdis1m != 0)/ 显示字符lcd_wdat(cdis1m);m+;页眉内容lcd_pos(0x40);/ 设置显示位置为第二行第 1 个字符m = 0;while(cdis2m != 0)lcd_wdat(cdis2m);/ 显示字符m+;while(1) if(LED4 = 0)IE = 0x00; elseIE = 0x81;SanZhuan();/*函数:独立键盘*/uint8 KEY(vo

29、id)uint8 Key = 0xff;if(KEY1 = 0)Key = 0; /LED1 = LED1if(KEY2 = 0)Key = 1;LED2 = LED2;if(KEY3 = 0)Key = 2;LED3 = LED3;if(KEY4 = 0)Key = 3;LED3 = LED3;if(KEY5 = 0)LED4 = LED4;return Key;/ 返回键值页眉内容/*函数:散转程序*/void SanZhuan()uint8 v;/TMOD = 0x01;/v = KEY();/ 键盘检测v = keyscan();switch(v)case 0:ZZ(tab0);bre

30、ak;case 1:ZZ(tab1);break;case 2:ZZ(tab2);break;case 3:ZZ(tab3);break;case 4:ZZ(tab4);break;case 5:ZZ(tab5);break;case 6:ZZ(tab6);break;case 7:ZZ(tab7);break;case 8:ZZ(tab8);break;case 9:ZZ(tab9);break;case *:ZZ(tab10);break;case #:ZZ(tab11);break;case +:ZZ(tab12);break;case -:ZZ(tab13);break;/ case

31、0xd7:ZZ(tab14);break;/ case 0xe7:ZZ(tab15);break;default:break;v=0;页眉内容*/void ZZ(uint8 Value)TT0(1,m9);/ 高电平 9mSTT0(0,m4_5);/ 低电平 4.5mS/* 函数:NEC编码发送程序 入口:八位操作码/* 发送4帧数据一*/Z0(USER_H);/用户码高 8 位Z0(USER_L);/ 用户码低 8 位Z0(Value);/ 操作码Z0(Value);/操作码反码/*结束码*/TT0(1,m_56);TT0(0,m40);/*重复码*/while(KEY() != 0xFF)

32、TT0(1,m9);TT0(0,m2_25);TT0(1,m_56);TT0(0,m40);TT0(0,m56);/*函数:单帧( 8 位数据)发送程序*/void Z0(uint8 temp)页眉内容uint8 v;for (v=0;v8;/输入TO初始值temp = 1;/* 函数:38KHZ载波发射+延时程序入口:(是否发射载波,延时约x (uS*/void TT0(bit BT,uint16 x)if(BT = 0) while(!TF0);/BT=O时,不发射38KHZ载波只延时;Belse while(1)/38KHZ载波,(低电平)占空比5:26TLO = x;/清0TFO=O;

33、TR0=1;/启动定时器 0IR = 0;if(TF0)break;if(TF0)break;IR = 1;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;TF0=0;/ 标志位溢出则清 0IR =1;/ 载波停止后,发射端口常态为高/*函数 :外部中断函数*/void IR_IN(void) interrupt 0/ 外部中断服务程序unsigned char j,k,N=0;EX0

34、 = 0;delay(15);if (IRIN=1) EX0 =1;return;/确认IR信号出现while (!IRIN)/等IR变为高电平,跳过9ms的前导低电平信号。TR0=0;/ 关闭定时器 0delay(1);for (j=0;j4;j+)/收集四组数据for (k=0;k=30) EX0=1;return;/ 0.14ms 计数过长自动离开。/ 高电平计数完毕IRCOMj=IRCOMj 1;/ 数据最高位补“ 0”if (N=8) IRCOMj = IRCOMj | 0x80; / 数据最高位补“ 1”N=0;/end for k/end for jif (IRCOM2!=IRC

35、OM3)/ 按位取反 EX0=1;return; IRCOM5=IRCOM2 & 0x0F;/ 取键码的低四位IRCOM6=IRCOM2 4;/ 右移 4 次,高四位变为低四位if(IRCOM59) IRCOM5=IRCOM5+0x37;elseIRCOM5=IRCOM5+0x30;if(IRCOM69) IRCOM6=IRCOM6+0x37;elseIRCOM6=IRCOM6+0x30;lcd_pos(0x4b);lcd_wdat(IRCOM6);/ 第一位数显示lcd_pos(0x4c);lcd_wdat(IRCOM5);/ 第二位数显示Y0=0;switch(IRCOM2)页眉内容cas

36、e 0x09: Y0=0x01; break;case 0x1D: Y0=0x02; break;case 0x1F: Y0=0x03; break;case 0x0D: Y0=0x04; break;case 0x19: Y0=0x05; break;case 0x1B: Y0=0x06; break;case 0x11: Y0=0x07; break;case 0x15: Y0=0x08; break;case 0x17: Y0=0x09; break;default:break;/case 0x13: RELAY=1; break;/ case 0x14: RELAY=1; break;

37、/ case 0x51: RELAY=0; break;tabM = IRCOM2;M = (M+1)%4;beep();EX0 = 1;char keyscan()char temp,key;KEY_PORT = 0x7f;temp = KEY_PORT;if(temp != 0x0f)delayk();if(temp != 0x0f)temp = KEY_PORT & 0x0f;页眉内容temp = KEY_PORT;switch(temp)case 0x7e: key = A;break;/A case 0x7d: key = B;break;/B case 0x7b: key = C;

38、break;/C case 0x77: key = D;break;/Dwhile(temp != 0x0f)temp = KEY_PORT & 0x0f;P1 = key;return key;KEY_PORT = 0xbf;temp = KEY_PORT;temp = KEY_PORT & 0x0f;if(temp != 0x0f)delayk();if(temp != 0x0f)switch(temp)case 0xbe: key = 3;break;/3/ case 0xbd: key = 6;break;/6/temp = KEY_PORT;页眉内容case 0xbb: key =

39、9;break;/9 case 0xb7: key = #;break;/#while(temp != 0x0f)temp = KEY_PORT & 0x0f;/P1 = key;return key;KEY_PORT = 0xdf;temp = KEY_PORT;temp = KEY_PORT & 0x0f;if(temp != 0x0f)delayk();if(temp != 0x0f)temp = KEY_PORT;switch(temp)case 0xde: key = 2;break;/2 case 0xdd: key = 5;break;/5 case 0xdb: key = 8;

40、break;/8 case 0xd7: key = 0;break;/0/while(temp != 0x0f)页眉内容temp = KEY_PORT & 0x0f;/P1 = key;return key;KEY_PORT = 0xef;temp = KEY_PORT;temp = KEY_PORT & 0x0f;if(temp != 0x0f)delayk();if(temp != 0x0f)temp = KEY_PORT;switch(temp)case 0xee: key = 1;break;/1 case 0xed: key = 4;break;/4/ case 0xeb: key

41、= 7;break;/7 case 0xe7: key = *;break;/*while(temp != 0x0f)/P1 = key;return key;/beep=1;temp = KEY_PORT & 0x0f;页眉内容return KEY_NULL;/返回一个与键盘不相关的值void delayk()int x,y;for(x=0; x10; x+)for(y=0; y1000; y+);附录 2: sbit BEEP = P3八6; /蜂鸣器控制端口 P36 unsigned char flag;#include/包含单片机寄存器的头文件#include/包含_nop_ ()函数

42、定义的头文件sbit IR=P 3八2;/将IR位定义为P3.2引脚sbit RS=PSO;/寄存器选择位,将RS位定义为P2.0引脚sbit RW=P 2八1;/读写选择位,将RW位定义为P2.1引脚sbit E=P 2八2;/使能信号位,将E位定义为P2.2引脚sbit BF=POA7;/忙碌标志位,将BF位定义为P0.7引脚unsigned char code string = HELLO WORLD;unsigned char a4;/储存用户码、用户反码与键数据码、键数据反码 unsigned int LowTime,HighTime; /储存高、低电平的宽度 /* 函数功能:延时

43、1ms */ void delay1ms()unsigned char i,j;for(i=O;i1O;i+)for(j=O;j33;j+)/* 函数功能:延时若干毫秒 */void delay(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();void beep() /蜂鸣器响一声函数unsigned char i;for (i=0;i100;i+)delay1ms();BEEP=!BEEP;/BEE P取反BEEP=1;/关闭蜂鸣器delay(250);/ 延时/* 函数功能:判断液晶模块的忙碌状态 返回值:result。re

44、sult=1,忙碌;result=O,不忙 */unsigned char BusyTest(void)bit result;RS=O;II根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;/E=1,才允许读写_nop_();/空操作_nop_();_nop_();_nop_();/空操作四个机器周期,给硬件反应时间result=BF;/ 将忙碌标志电平赋给 resultE=0;return result;/* 函数功能:将模式设置指令或显示地址写入液晶模块 */ void WriteInstruction (unsigned char dictate)while(BusyT

45、est()=1); /如果忙就等待RS=0;/根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;/E 置低 电平 (根据表 8-6,写指令 时, E 为高 脉冲_nop_();_nop_();/空操作两个机器周期,给硬件反应时间P0=dictate;/将数据送入 P0 口,即写入指令或地址_nop_();_nop_();_nop_();_nop_();/空操作四个机器周期,给硬件反应时间E=1;/E 置高电平_nop_();_nop_();_nop_();nop();/ 空操作四个机器周期,给硬件反应时间E=0;/当E由高电平跳变成低电平时,液晶模块开始/* 函数功能:指定字符显示的实际地址 */void WriteAddress(unsigned char x)Writelnstruction(x|0x80); /显示位置的确定方法规定为80H+地址码x/* 函数功能:将数据(字符的标准ASCI码)写入液晶模块 */void W

温馨提示

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

评论

0/150

提交评论