单片机课设--红外遥控及点阵显示应用(共22页)_第1页
单片机课设--红外遥控及点阵显示应用(共22页)_第2页
单片机课设--红外遥控及点阵显示应用(共22页)_第3页
单片机课设--红外遥控及点阵显示应用(共22页)_第4页
单片机课设--红外遥控及点阵显示应用(共22页)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上目 录专心-专注-专业1. 主要元器件介绍1.1 AT89C51单片机1.1.1 AT89C51单片机的硬件结构 AT89C52单片机的内部结构与MCS-51系列单片机的构成基本相同。CPU是由运算器和控制器所构成的。运算器主要用来对操作数进行算术、逻辑运算和位操作的。控制器是单片机的指挥控制部件,主要任务的识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动而协调地工作。它的程序存储器为8K字节可重擦写Flash闪速存储器,闪烁存储器允许在线+5V电擦除、电写入或使用编程器对其重复编程。数据存储器比51系列的单片机相比大了许多为256字节RAM

2、。AT89C52单片机的指令系统和引脚功能与MCS-51的完全兼容。FLASHCPU串行通讯口RAM输入输出接口计数器定时器时钟 图1 8单片机89C52结构框图1.1.2 AT89C52管脚说明VCC:电源GND:接地P0口:P0口是一个8位漏级开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0口端口写“1”时,引脚作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接受指令字节:在程序效验时,输出指令字节。程序效验时,需要外部上拉电阻。P1口:P1口是一个具有内部上拉电阻的8位

3、是双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑电平。对P1口写“1”时,内部上拉电阻的原因,将输出 电流ILL。此外,与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数 输入(P1.0/T2)和输出(P1.1/T2EX),具体 图 2 AT89C52外部引脚如下表所示 表 1 P1.0和P1.1的第二功能 引脚号功能特性P1.0T2(定时/计数器2外部计数脉冲输入),时钟输出P1.1T2EX定时/计数2捕获/重装载触发和方向控制 在Flash编程和校验时,P1口接收低8位地址字节。 P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,

4、P2输出缓冲级可驱动吸收或输出电流4个TTL逻辑电平。对P2口写“1”时,通过内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流ILL。 在访问外部好曾许存储器或用16位地址读取外部数据存储器时,P2口送出高8位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。在Flash编程和校验时,P2口接收低8位地址字节和一些控制信号。 P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑电平。对P3口写“1”时,内部上拉电

5、阻把端口拉高,此时可以作为输入端口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流ILL。P3口除了作为一般、的I/O口线外,更重要的是它的第二功能,如下表所示。 表 2 P3口引脚第二功能引脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通) 在Flash编程和校验时,P3口也接收一些控制信号。 RST:复位输入。晶振工作时,RST脚持续2个机器周期以高电平将使用单片

6、机复位。 ALE/:地址锁存器控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚()也使用作编程输入脉冲。 在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。 如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位的设置对微控制器处于外部执行模式下无效。 :外部程序储存器选通信号()是外部程序存储器选通信号。当AT89C52从外部程

7、序存储器执行外部代码时,在每个机器周期被激活两次,而在访问外部数据储存器时,将不被激活。 :访问外部程序存储器控制信号。为使能从0000HFFFFH的外部程序存储器读取指令,端必须保持低电平(接地)。为了执行内部程序指令,应该接VCC。 在flash编程期间,也接受12伏VPP电压。 XTA L1:振荡器反相放大器及内部时钟发生器的输入端。 XTA L2:振荡器反相放大器的输出端。1.1.3存储器结构 MCS-51器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K寻址。1. 程序存储器 如果EA引脚接地,程序读取只从外部存储器开始。对于89C52,如果EA接VCC,程序

8、先从内部存储器(地址为0000H1FFFFH)开始,接着从外部寻址,寻址范围为:2000HFFFFH。2. 数据存储器 AT89C52有256字节RAM。高128字节与特殊功能寄存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。当一条指令访问高于7FH的地址时,寻址方式决定CPU访问高字节RAM还是特殊功能寄存器空间。直接寻址方式访问特殊功能寄存器(SFR)。1.1.4定时器1. 定时器0和定时器1在AT89C52中,定时器0和定时器1都是16位加法计数结构,分别由TH0(地址8CH)和TL0(地址8AH)及TH1(地址8DH)和TL1(地址8BH)两个8位计数器组

9、成。这4个计数器均属于专用寄存器之列。每个定时器/计数器都有定时和计数两种功能。2. 计数功能 所谓的计数功能是指对外部事件进行计数。外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外脉冲进行计数。MCS-51系列的芯片有T0(P3.4)和T1(P3.5)两个信号引脚,分别就是这两个计数器的计数输入端。外部输入的脉冲在负跳变时有效,进行计数器加1。计数方式下,单片机在每个机器周期的S5P2拍节对外部计数脉冲进行采样。如果前一个机器周期采样为高电平,后一个机器周期采样为低电平,即为一个有效计数脉冲。在下一个机器周期的S3P1进行计数。可见采样计数脉冲是在2个机器周期进行的。鉴于此,计数脉冲

10、的频率不能高于振荡脉冲的频率不能高于振荡脉冲频率的1/24。3. 定时功能 定时器也是通过计数器的计数来实现的,不过此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲。也就是每个机器周期计数加1。由于一个机器周期等于12个振荡脉冲周期,因此计数频率为振荡频率的1/12。如果单片机采用12MHz晶体,则计数频率为1MHz。即每微秒计数器加1。这样不但可以根据计数值计算出定时时间,也可以反过来按定时时间的要求计算出计数器的预置值。4. 定时器2 定时器2是一个16位定时器/计数器,它既可以作定时器,又可以做事件计数器。其工作方式由特殊寄存器T2CON中的C/T2位选择(如表2所示)。定

11、时器2有三种工作模式:捕捉方式、自动重载(向上或向下计数)和波特率发生器。如表3.3所示,工作模式由T2CON中的相关为选择。定时器2有2个8位寄存器:TH2和TL2。在定时工作方式中,每个机器周期,TL2寄存器都会加1。由于一个机器周期由12个晶振周期构成,因此,计数频率就是晶振频率的1/12。表 3.3 定时器2工作模式RCLK+TCLKCP/RL2TR2MODE00116位自动重载01116位捕捉1×1波特率发生器××0不用 在计数工作方式下,寄存器在相关外部输入角T2发生1至0的下降沿时增加1。在这种方式下,每个机器周期的S5P2期间采样外部输入。一个周期

12、采样到高电平,而下一个周期采样到低电平,计数器加1。在检测到跳变的这个周期的S3P1期间,新的计数值出现在寄存器中。因为识别10的跳变需要2个机器周期(24个晶振周期),所以,最大的计数频率不高于晶振频率的1/24。为了确保给定的电平在采样前采样到一次,电平应该至少在一个完整的机器周期内保持不变。表4 T2MOD-定时器2控制寄存器 T2MOD地址:0C9H 复位值:×××××00B-T2OEDCEN76543210符号功能无定义,预留扩展T2OE定时器2输出允许位DCEN置1后,定时器2可配置向上或向下计数1.1.5中断 AT89C52有6个

13、中断源:两个外部中断(INT0和INT1),三个定时中断定时器0、1、2和一个串行中断。每个中断源都可以通过置位或清除特殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断总控制位EA,它能禁止所有中断。 如表3.5所示,IE.6位是不可用的。对于AT89S52,IE.5位也是不能用的。用户软件不应给这些位写1。它们为AT89系列新产品预留。定时器2可以被寄存器T2CON中的TF2和EXF2的或逻辑触发。程序进入中断服务后,这些标志位都可以由硬件清0。实际上,中断服务程序必须判定是否是TF2或EXF2激活中断。标志位也必须由软件清0。定时器0和定时器1标志位TF0和T

14、F1在计数溢出的那个周期的S5P2被置位。它们的值一直到下一个周期被电路捕捉下来。然而,定时器2的标志位TF2在计数溢出的那个周期被置位,在同一个周期被电路捕捉下来。表 3 中断允许控制位符号位地址功能EAIE.7中断允许控制位,EA=0,中断总禁止;EA=1,各中断由各自的控制位设定-IE.6预留ET2IE.5定时器2中断允许控制位ESIE.4串行口中断允许控制位ET1IE.3定时器1中断允许控制位EX1IE.2外部中断1允许控制位ET0IE.1定时器0中断允许控制位EX0IE.0外部中断0允许控制位1. 2 16*16点阵LED 8×8单色点阵共需要64个发光二极管组成,且每个二

15、极管是放置在行线与列线的叉点上。下图为8×8点阵LED外观及引脚图,其等效电路如下图所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。图4 8×8点阵外观及引脚图 proteus中用8×8点阵组成的16×16点阵,如下图:图5 16×16点阵点阵LED一般采用扫描式显示,实际运用分为三种方式:(1)点扫描; (2)行扫描;(3)列扫描。 若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外

16、一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。1.3 红外控制相关介绍红外遥控系统由发射和接收两大部份组成,应用编/解码专用集成电路芯片来进行控制操作,如图1 所示。发射部份包括键盘矩阵、编码调制、LED红外发送器;接收部份包括光、电转换放大器、解调、解码电路。LED编码调制键盘解码解调光/电放大图6 红外遥控系统框图HT6221 键码的形成:当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565m

17、s、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”。2 设计原理或方法2.1设计总体思路 本次课程设计的要求是利用红外遥控器控制,在16×16点阵的显示器件上循显示“武汉理工大学”6个汉字,控制项目:循环显示的速度可调,循环显示进入方向(从左至右、从右至左、从上到下、从下往上)。由于要用16*16点阵显示汉字,而80C51的I/O接口是8位的,我们可以用4个8*8点阵来组成。由于80C51的I/O口不多(只有4组,32个),为了节约I/O口,我们用4线-16译码器作为点阵的列驱动,P2口和P0口作为数据线。改变汉字移动的速度,可以通过用按键改变汉字在LED上的显示时

18、间来改变,通过改变的数值大小就可以改变汉字的移动速度。 题目所要求的用红外控制我们可以先用开关模拟达到要求,再将开关的功能用红外来实现,这样就可以基本上达到要求。通过红外接收器所解出来的码将其送到89C51的一个I/O口以达到开关的效果。这样就可以基本达到要求了。2.2与题目相关的具体设计汉字的显示:可以采用扫描的方式,先使一个I/O口产生一个选行(列)信号,先选中一行,对选中的行进行扫描,然后用另外2组I/O口输送数据,这样一个字的1/16就送到LED点阵上了,接着选下一行,这样经过16次就可以显示一个字了,再适当延时使显示的字清晰。汉字的移动:在LED上显示一个汉字并延时后,可以通过增加所

19、取表的地址(加2);这样下一次LED上显示的字就移动了一个点阵,可以通过适当的设计来控制汉字移动循环的的次数。汉字的左右上下移动:可以通过建立不同的表,来实现汉字的各种移动,或者改变查表的方式来实现。3.系统硬件线路设计图图7 仿真电路图4.程序框图开始系统初始化赋初值(控制移动速度)P3.2=0? 否是移动速度增加 移动速度减慢P3.7=0? 否 是 左移动 右移动上移动 下移动 图8 系统主程序流程图5.资源分配 P1.0到P1.3接4-16译码器给16*16点阵提列信号。P0.0到P0.7接16*16点阵的上半块作为数据线,给16*16点阵上部提供数据,点亮相应的LED,P2.0到P2.

20、7接16*16点阵的下半块作为数据线,给16*16点阵下部提供数据,点亮相应的LED。P3.2接开关,用于控制移动速度,P3.7接开关,用于控制汉字的显示的移动方向。表5资源分配表P1.0-P1.3接4-16译码器P0.0-P0.7接16*16点阵的上半块作为数据线P2.0-P2.7接16*16点阵的下半块作为数据线P3.2接开关控制移动速度P3.7接开关控制显示的移动方向6.源程序#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit key0=P37;sbit key1=P32;uch

21、ar zt,z,speed,flag;uchar code hanzi=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /" ",0x20,0x40,0x20,0xC0,0x24,0x7E,0x24,0x40,0x24,0x40,0xA4,0x3F,0x24,0x22,0x24,0x22,0x20,0x2

22、0,0xFF,0x03,0x20,0x0C,0x22,0x10,0x2C,0x20,0x20,0x40,0x20,0xF8,0x00,0x00, /"武",0x10,0x04,0x60,0x04,0x02,0x7C,0x0C,0x03,0xC0,0x80,0x02,0x80,0x1E,0x40,0xE2,0x20,0x02,0x13,0x02,0x0C,0x02,0x13,0xE2,0x20,0x1E,0x40,0x00,0x80,0x00,0x80,0x00,0x00, /"汉",0x04,0x20,0x84,0x60,0x84,0x20,0xFC,0

23、x1F,0x84,0x10,0x84,0x10,0x00,0x40,0xFE,0x44,0x92,0x44,0x92,0x44,0xFE,0x7F,0x92,0x44,0x92,0x44,0xFE,0x44,0x00,0x40,0x00,0x00, /"理", 0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0xFC,0x3F,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00

24、, /"工", 0x20,0x80,0x20,0x80,0x20,0x40,0x20,0x20,0x20,0x10,0x20,0x0C,0x20,0x03,0xFF,0x00,0x20,0x03,0x20,0x0C,0x20,0x10,0x20,0x20,0x20,0x40,0x20,0x80,0x20,0x80,0x00,0x00, /"大",0x40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,0x90,0x04,0x90,0x44,0x91,0x84,0x96,0x7E,0x90,0x06,0x90,0x05,0x98,0

25、x04,0x14,0x04,0x13,0x04,0x50,0x04,0x30,0x04,0x00,0x00, /"学",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /" ",;uchar code lie=0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7

26、, 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff;void delay(uchar x) /延时函数uchar i,j;for(i=0;i<x;i+)for(j=0;j<120;j+);void scanf_dir() /判断按键 if(key0=0) delay(3);if(key0=0) zt+; while(!key0); if(zt=4) zt=0; void left() /左移动uchar i,zishu,x;P1=0xff;for(zishu=0;zishu<6;zishu+) /6个字 P0=0xff; P2=0xff; fo

27、r(x=0;x<16;x+)/从左向右移动16次,(第一屏、第二屏。) if(zt!=0) break; for(z=0;z<speed;z+)/改变在z<的值可以调整移动速度for(i=0;i<16;i+)/16列循环显示 scanf_dir();if(zt!=0)break;P1=liei;P0=hanzi2*i+zishu*32+x*2;P2=hanzi2*i+zishu*32+x*2+1;delay(3); P0=0xff; P2=0xff; void showc(uchar c,uchar b,uchar n,uchar l)/右移动辅助函数 uchar i;

28、 for(i=0;i<n;i+) scanf_dir();if(zt!=1)break; P1=liei+l;P0=hanzic*32+i*2+b*2;P2=hanzic*32+i*2+1+b*2;delay(3);P0=0xff; P2=0xff; void right()/右移动uchar i,zishu;P1=0x00;for(zishu=0;zishu<6;zishu+) for(i=0;i<16;i+) if(zt!=1) break;for(z=0;z<speed;z+)/这个可以调整移动速度showc(zishu,0,16-i,i);showc(zishu

29、+1,15-i,i,0); void up()/上移动uchar i,zishu,y,n;uchar t1,t2,t3;P1=0x00;for(zishu=0;zishu<6;zishu+)P0=0xff;P2=0xff;for(n=0;n<2;n+) for(y=0;y<8;y+) if(zt!=2)break;for(z=0;z<speed;z+)/可以调整移动速度 for(i=0;i<16;i+) scanf_dir(); if(zt!=2)break; if(n=0)t1=hanzi2*i+zishu*32; t2=hanzi2*i+1+zishu*32;

30、 t3=hanzi2*i+zishu*32+32; else t1=hanzi2*i+1+zishu*32;t2=hanzi2*i+zishu*32+32;t3=hanzi2*i+1+zishu*32+32;P1=liei; P0=(t1>>y)|(t2<<(7-y); P2=(t2>>y)|(t3<<(7-y); delay(1); P0=0xff; P2=0xff; void down()/下移动uchar i,zishu,y,n;uchar t1,t2,t3;P1=0x00;for(zishu=0;zishu<6;zishu+)P0=

31、0xff;P2=0xff;for(n=0;n<2;n+) for(y=0;y<8;y+) if(zt!=3)break;for(z=0;z<speed;z+)/调整速度 for(i=0;i<16;i+) scanf_dir();if(zt!=3)break; if(n=0)t1=hanzi2*i+zishu*32; t2=hanzi2*i+1+zishu*32; t3=hanzi2*i+1+zishu*32+32; else t1=hanzi2*i+1+zishu*32+32;t2=hanzi2*i+zishu*32;t3=hanzi2*i+zishu*32+32;P1

32、=liei; P0=(t1<<y)|(t3>>(7-y); P2=(t2<<y)|(t1>>(7-y); delay(1); P0=0xff; P2=0xff; void main()zt=0;EA=1;EX0=1;IT0=1;speed=20;while(1) scanf_dir();switch(zt) case 0:if(zt=0) left(); case 1:if(zt=1) right(); case 2:if(zt=2) up(); case 4:if(zt=3) down(); default:break; void exint(

33、) interrupt 0flag+;if(flag=1)speed=3;else if(flag=2)speed=100;else if(flag=3)speed=20;flag=0;/红外程序void Ircordpro(void)/红外码值处理函数 unsigned char i, j, k; unsigned char cord,value; k=1; for(i=0;i<4;i+)/处理4个字节 for(j=1;j<=8;j+) /处理1个字节8位 cord=irdatak; if(cord>7)/大于某值为1 value=value|0x80; else valu

34、e=value; if(j<8) value=value>>1; k+; IRcordi=value; value=0; irpro_ok=1;/处理完毕标志位置1 7性能分析 程序通过keil软件编译生成.hex文件加载到protues软件的原理原理图中能够进行仿真,可以用开关控制汉字的移动速度和移动速度。系统开始显示后,汉字先左移,右移动,上移动,下移动。汉字显示很清晰明亮,效果很不错。由于PROTUES没有红外模块的仿真,所以用开关代替了红外,实现了相同的功能。用开关控制汉字的移动速度也比较明显。8.总结和心得 作为一名电信专业的大三学生,我觉得这个单片机是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识

温馨提示

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

评论

0/150

提交评论