1、二、CPLD(EPM240T100C5):具有丰硕的I/O口、内部逻辑和连线资源、运行速度快、能够显示大量的信息,但CPLD实现运算功能复杂,在该系统中,需要显示的信息量较少,可是操纵和运算功能较多,用CPLD实现一些运算功能复杂。3、STC89C52:CPU采纳低本钱、多功能的STC89C52单片机。STC89C52是一种低功耗、高性能CMOS 8位微操纵器,具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗按时器,内置4KB EEPROM,MAX810复位电路,3个16 位按时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中
2、断结构),全双工串行口。该单片机性价比很高,且相对容易操纵,大体能够实现所需功能。经比较,选择STC89C52作为主控芯片。2.2 光笔检测的选择与比较1、光敏电阻:光谱响应范围宽,体积小,但灵敏度低,响应速度慢,受温度阻碍大,很难确信点亮点坐标。2、光敏二极管(2CU2B):光电流小,响应时刻短,利用于要求光电流与照度成线性关系或要求工作频率高的电路,但其灵敏度较低,光电流较小,不易判定所在处LED在点阵屏中的坐标。光敏三极管(3DU35C):光电流大,响应时刻短,且其灵敏度超级高,易判定所在处LED在点阵屏中的坐标。经比较,选择光敏三极管作为光笔检测灵敏器件。2.3 LCD显示屏的选择考虑
3、到有系统低功耗的要求,采纳价钱低廉的1602液晶作为显示。LCD功耗比较低,不需要循环扫描,且信息量大,能灵活多变的显示多种信息。2.4 键盘输入模块的选择键盘采纳44标准矩阵键盘,用8个I/O口操纵16个键,4个I/O口接4行,另外4个接4列,通过行列扫描取得按键值。2.5 1616点阵屏模块的选择由4块88单色LED点阵(红色)模块组合成1616的LED点阵屏。用红外光电三极管自制光笔。在检测时依次点亮红色LED,当点亮到某个LED时,若是此光阴笔放在该LED时,这时红外光电三极管的阻值会发生转变,通过相应的检测电路能够得出一个高低电平的转变,单片机检测到信号转变时就能够够判定光笔的当前位
4、置。 该方案简单易行,对光笔位置判断的灵敏度较高,抗外界干扰能力强。采用红色点阵和红外光电三极管能够有效地减少环境可见光对光笔中光电三极管的干扰。三、系统简述利用具有价廉易购的STC89C52单片机编程操纵,通过修改程序可方便实现系统升级。系统的框图结构如下: 四、硬件设计图1 系统原理框图系统要紧部件包括88的LED点阵屏、STC89C52RC单片机、方向可控的八路缓冲器74HC24五、38译码器74HC138、P沟道的增强型场效应管APM4953、移位寄放器74HC59五、液晶显示器1602,双电压比较器LM393,光敏三极管3DU5C。辅助元件包括电阻、电容、晶振、电源、按键等。41 系
5、统各器件简介4.1.1 STC89C52RC单片机STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机械周期和6时钟/机械周期能够任意选择。图STC89C52RC引脚图STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每一个引脚能驱动8个TTL负载,对端口P0写入“1”时,能够作为高阻抗输入。在访问外部程序和数据存储器时,P0口也能够提供低8位地址和8位数据的复用总线。现在,P0口内部上
6、拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,那么输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0P1.7,18引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口利历时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流()。P2端口(P2.0P2.7,2128引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器能够驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的
7、上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口利历时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些操纵信号。P3端口(P3.0P3.7,1017引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口利历时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流(在对Flash ROM编程或程序校验时,P3还接收一些操纵信号。P3口除作为一样I/O口外,还
8、有其他一些复用功能,如下表所示: P3口引脚复用功能引脚号复用功能RXD(串行输入口)TXD(串行输出口)(外部中断0)(外部中断1)T0(定时器0的外部输入)T1(定时器1的外部输入)(外部数据存储器写选通)(外部数据存储器读选通)XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器反相放大器的输入端。4.1.2 方向可控的八路缓冲器74HC245 总线收发器,典型的CMOS型三态缓冲门电路。由于单片机或CPU的数据/地址/操纵总线端口都有必然的负载能力,若是负载超过其负载能力,一样应加驱动器。要紧用于实现数据总线的双向异步通信。为了爱惜脆弱的主
9、控芯片,通常在主控芯片的并行接口与外部受控设备的并行接口间添加缓冲器。当主控芯片与受控设备之间需要实现双向异步通信时,自然就得选用双向的八路缓冲器了,245确实是面向这种需求的。常见于同并口液晶屏、并口打印机、并口传感器或通信模块等设备的接口上。 图3 74HC595引脚图引脚概念: 第1脚DIR,为输入输出端口转换用,DIR=“1”高电平常信号由“A”端输入“B”端输出,DIR=“0”低电平常信号由“B”端输入“A”端输出。 第29脚“A”信号输入输出端,A0=B0,A7=B7,A0与B0是一组,若是DIR=“1”OE=“0”那么A1输入B1输出,其它类同。若是DIR=“0”OE=“0”那么
10、B1输入A1输出,其它类同。 第1118脚“B”信号输入输出端,功能与“A”端一样,再也不描述。第19脚OE,使能端,假设该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也确实是起到开关的作用。第10脚GND,电源地。第20脚VCC,电源正极。 真值表控制输入运行GDIRLB 数据到A 总线HA 数据到B 总线X隔开H=高电平 L=低电平 =不定4.1.3 38译码器74HC13874HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。可同意3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0
11、至Y7)。74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,不然74HC138将维持所有输出为高。 图4 74HC138引脚图4.1.4 P沟道的增强型场效应管APM4953 行驱动管,功率管。每一显示行需要的电流是比较大的,要利用行驱动管,每片4953能够驱动2个显示行。其内部是两个CMOS管,一、3脚VCC,二、4脚操纵脚,2脚操纵7、8脚的输出,4脚操纵五、6脚的输出,只有当二、4脚为“0”时,7、八、五、6才会输出,不然输出为高阻状态。 图5 4953引脚图及内部结构4.1.5 移位寄放器74HC595 74HC595是硅结构
12、的CMOS器件, 兼容低电压TTL电路。具有8位移位寄放器和一个存储器,三态输出功能。移位寄放器和存储器是别离的时钟。 数据在SHcp的上升沿输入到移位寄放器中,在STcp的上升沿输入到存储寄放器中去。若是两个时钟连在一路,那么移位寄放器老是比存储寄放器早一个脉冲。 移位寄放器有一个串行移位输入(Ds),和一个串行输出(Q7),和一个异步的低电平复位,存储寄放器有一个并行8位的,具有三态的总线输出,当使能OE时(为低电平),存储寄放器的数据输出到总线。8位串行输入/输出或并行输出移位寄放器,具有高阻关断三态。 图6 74HC595引脚图 表2 74HC595功能表输入输出功能SHCPSTCPO
13、EMRDSQ7QnNCMR为低电平时仅仅影响移位寄存器空移位寄存器到输出寄存器Z清空移位寄存器,并行输出为高阻状态Q6逻辑高电平移入移位寄存器状态0,包含所有的移位寄存器状态 移入Qn移位寄存器的内容到达保持寄存器并从并口输出Q6移位寄存器内容移入,先前的移位寄存器的内容到达保持寄存器并出4.1.6 液晶显示器1602 液晶显示器以其微功耗、体积小、显示内容丰硕、超薄轻巧的诸多优势,在各类仪表和低功耗系统中取得普遍的应用。功能:位数多,可显示32位;显示内容丰硕,可显示所有数字和大、小写字母;程序简单,若是用数码管动态显示,会占用很多时刻来刷新显示,而1602自动完成此功能。4.1.7 双电压
14、比较器LM393 LM393 是双电压比较器集成电路。 该电路的特点如下: 工作温度范围:0C - +70C;工作电源电压范围宽,单电源、双电源都可工作,单电源:236V,双电源:118V;消耗电流小, ICC=0.8mA;输入失调电压小, VIO=2mV;共模输入电压范围宽, VIC=0VCC-1.5V;输出与TTL,DTL,MOS,CMOS 等兼容;输出能够用开路集电极连接“或”门。 图7 LM393内部结构图4.1.8 硅光敏三极管3DU5C 结构:NPN扩散型光敏三极管是具有放大能力的光电转换三极管,普遍应用与各类高空电路中。在无光照射时,光敏三极管处于截止状态,无电信号输出。当有光信
15、号照射其基极(受光窗口)时,光敏三极管导通,从发射极或集电极输出放大后的电信号。 其要紧技术参数为:反向击穿电压:15V;最高工作电压:10V;暗电流:0.3uA;1mA;功耗:30mW;峰值波长:880nm。 图8 光敏三极管等效电路42各部份电路设计4.2.1 主控模块 主控模块包括LCD液晶显示,键盘扫描模块及CPU操纵模块。通过通过编程,当按下相应按键时,LCD模块实现相应功能及LED扫描点坐标的显示。操纵模块有晶振电路及复位电路组成。图94.2.2 LED点阵显示模块LED模块为本设计的要紧模块。由锁存器、行驱动及列驱动组成。其中,所有了LED灯驱动信号由操纵模块P2口送出,经锁存器
16、74HC245锁存再送至4块移位寄放器74HC595的4个公共操纵端,驱动列;锁存器的另外三个输出接至38译码器74HC138,经译码后的信号通过P沟道的增强型场效应管APM4953驱动相应的行。图104.2.3 光笔模块 光笔模块要紧由光敏三极管3DU5C及电压比较器LM393组成。 用红外光电三极管自制光笔,光笔检测电路如下图。图中Q1是用红外光电三极管,用来完成对1616点阵红色LED灯点亮或熄灭的检测;R4、R6用于对Q2进行限流,另外还能够调剂R6来提高或减小输出的电压值;R一、R3是用于给U1(比较器)的同相端提供基准电压值,通过它跟搜集信息输出来的电压值进行比较(U2U3,Uou
17、t=Umin),R2是U1的输出上拉电阻。工作原理如下:当红光照到红外光电三极管上时,红外光电三极管的电阻变小,其射极电压升高,现在2脚电压比3脚电压高,比较器1端输出为低电平。当电容C1充电一段时刻以后,比较器2脚电压比3脚电压低,比较器1端输出为高电平。由此,当检测到光信号时,该电路将产生一个脉冲信号。由于在电路中加了耦合电容,可有效地避免环境对光笔的阻碍。图11五、软件设计程序采纳模块化编程方式,分为主程序,按键扫描程序,LED扫描程序,LCD1602液晶显示程序,延时程序,点亮模式程序,反显模式程序,整屏擦除及显示自概念字符程序。5.1 主程序主程序中要紧执行键盘扫描程序。5.2 键盘
18、扫描程序在键盘扫描程序中进行键盘扫描,当键盘扫描到某个按键按下时,1602显示相应功能模式,同时对应模式的LED点阵执行相应功能。5.3 1602液晶显示程序 要紧为液晶的初始化,及概念相关模式显示。5.4 延时程序 将所有全局变量及数组的概念全都放在那个.h文件中,同时概念50us延时和50ms延时。5.5 点亮模式程序 按行逐列扫描(即点亮),当光笔检测到信号时,停止扫描,依照具体功能将现在的点延时显示相应时刻(操纵扫描速度),并将此点的行列值赋给全局变量x一、x2,用于1602中的坐标显示。5.6 画线模式程序检测信号方式同点亮模式。此模式中点显示为50ms,实现快速扫描的要求。先概念4
19、个全局数组liea,lieb,liec,lied保留列值,初值全设为0xff(即相应列灭),当扫描到信号时,将扫描到的点赋给相应的全局数组(即检测到的信号保留在这四个数值中)。此程序用用按时器中断来计时检测光笔信号,进入中断时开始计时count0,当光笔检测到信号时,计时count0清零(即光笔画线为完成),不然当count0计时到100(即5秒,说明光笔已完成画线)时显示检测到的信号,延时显示3s,只有当键盘检测到整屏擦除功能按键按下时才终止并清除检测到的信号以便下一次的画线。5.7 整屏擦除模式程序 当键盘检测到整屏擦除功能按键按下时清除画线模式下检测检测到的信号并显示“NO”。5.8 反
20、显模式程序 在画线模式下,将检测到的信号点反显。5.9 自概念字符显示程序 相应键按下时显示相应字符。六、安装调试52单片机,将单片机插入到目标板中,连好线。在各模式下,大体能实现相应功能,光笔检测到信号时1602实时显示亮点坐标。测试结果说明,本系统实现了预期功能。附录1 程序流程图图12 主程序流程图附录2 源程序/* .h头文件 */LED点阵书写显示屏/1.延时/ #ifndef _DELAY_H_#define _DELAY_H_ #define uchar unsigned char#define uint unsigned int extern uchar x1,x2; /行列坐
21、标点extern uchar keyx; /用于判定键盘是不是有按下,在超时关显示用extern uchar code dot; /保存哪一列亮,作扫描用extern uchar liea; /保存扫描到的列,作显示用extern uchar lieb;extern uchar liec;extern uchar lied; void delay_50us(uint t);void delay_50ms(uint t);#endif#ifndef _LCD1602_H_#define _LCD1602_H_#include delay.hsbit rs=P23;sbit rw=P32;sbit
22、 elcd=P33;void init(void); /lcd初始化函数void wr_1602com(uchar com); /1602写指令函数void wr_1602dat(uchar dat); /1602写数据函数#ifndef _LED_H_#define _LED_H_sbit aled=P20;sbit bled=P21;sbit cled=P22;sbit ser=P24;sbit srclk=P25;sbit eled=P26;sbit rclk=P27;sbit gb=P37;void display_595();/送显示void wr_595(uchar);/写数据 v
23、oid ledscan1(void);#ifndef _KEYBOARD_H_#define _KEYBOARD_H_void key_scan(void);void xianshi(uchar *p1,uchar *p2);void display_zb(void);/整屏擦除/#ifndef _eraall_H_#define _eraall_H_void eraall(void);void dis_led(uchar p9);/反显/ #ifndef _ECHO_H_#define _ECHO_H_void e_cho(void);#ifndef _LIGHT_H_#define _LI
24、GHT_H_led.hvoid lie0(uchar z,uchar x,uchar y);void light(uchar k); /延时函数/void delay_50us(uint t) /延时50us函数 uchar j; for(;t0;t-) for(j=19;jj-);void delay_50ms(uint t) /延时50ms函数 uint j; for(j=6245; /lcd声明部份/ #include lcd1602.hvoid init(void) /lcd初始化函数 delay_50us(30); wr_1602com(0x38); delay_50us(10); wr_1602com(0x08); wr_1602com(0x01); wr_1602com(0x06); wr_1602com(0x0c);void wr_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1