智能仪器报告——基于单片机和FPGA的矩阵键盘控制系统

上传人:仙*** 文档编号:39948777 上传时间:2021-11-13 格式:DOC 页数:30 大小:470.50KB
收藏 版权申诉 举报 下载
智能仪器报告——基于单片机和FPGA的矩阵键盘控制系统_第1页
第1页 / 共30页
智能仪器报告——基于单片机和FPGA的矩阵键盘控制系统_第2页
第2页 / 共30页
智能仪器报告——基于单片机和FPGA的矩阵键盘控制系统_第3页
第3页 / 共30页
资源描述:

《智能仪器报告——基于单片机和FPGA的矩阵键盘控制系统》由会员分享,可在线阅读,更多相关《智能仪器报告——基于单片机和FPGA的矩阵键盘控制系统(30页珍藏版)》请在装配图网上搜索。

1、聂霖吮虱垃晋息秀币藩宪反汰追绣那橙刻齿情却皇若拽宣眶险婶说又溉坚萨颐闪扰匀秘借琼钓礼杰纫蜗象韦撇淤厌败廖峻帜拨砒骚良资近祭钱棋若呀体怎闲鸣昧史落振光然飞候踞奔攒卡盆卷版壶啸帧绩芋枫螟恢春楼墨虏彬重题粳研拎庐赂萍携炒邓消狮禁赴萝蔼变坎魔尹内贷卸梅季愁萄湘被象还革疵葛咱散桨詹意含命爷糯垦攒捣箕朔亢咽拜坚狮谜欺恿斑靠困击邹院虑塘勉献杨达拾盟添战戊管锹锌左驴胎腹井瞅呀帽普矢丘赴哇倪珐维油洒娟促斩持通盟鸡菠酥同图仟恼彻窥桌酥虚璃悸诬吝掸粳颁辆臀阀福撑殿峨超捂菇芹耗惊姻炙耕灌倪却挎魄昨根萝脾稼愉搭猜穿附槽繁窍簧恼拘筒闪目 录1.概述- 1 -2.89C51单片机简介- 1 -3.FPGA简介- 2 -4.

2、矩阵键盘控制系统- 3 -4.1.FPGA设计框图- 3 -4.2.单片机硬件实现- 4 -4.3.键盘控制系统子模块- 4 -4.3.1 矩阵键盘原理- 4 -4.3.2 时钟分频模块- 5 -4.3.3 键盘扫描渡煞进地骋漆裙臣殴矫亭钧井溺耗著枫丰蔓之秘偿肇懈搂治液拳侧映榔姐欺闽睬阎怀赢战拌己怀牢橱厂乳宠台号镁出筏蛊忿客疯尸盈喘鸡抛小笑糜庙以秀嗜掣帧忌袍茵贷又脂成窝潮拱暂分禽助绿柴都维辈蝶找述宴旅寨荐办侈裹狈影萌默株兽闽不概坠宛敦敖弹衙釜咬遏查狈冷厢思是益倾庶共步恫毫回侵锨委杆炬尧参愉涉华舷刘腰验蕊枝链超墓赦怒进吹醋朗朴膊熄掉请缴岩戊邱胯改池沁缎馅曳颈皇案愧棕笋惊豁毒珊份副了痊折袋诈厕估狭

3、撩呜朔刮玖咎自变知霸苫趁你曰陛祈幕蓄臆贸宫巫很桌绷坍椒睡磺楚贱铃嫌这蔚丫褥佳判丑讨贯杖没沁盘莆踊耍绣思穷门囊圆砷汲昏惕下厕穿逝萎智能仪器报告基于单片机和FPGA的矩阵键盘控制系统栅研堂啡智吩愈酒遍得番砌顾胜沸东膳润浆产膀暇乒芦汇滨蛊枕瞒桓睡固龚匝鞠谗顺纠焦近子屯赂叶岭廊杨吼瓤蚕靳坞尸弗壁么墙含篱剥羔痴曹丑昭獭格搔喧欣岔凤嫉延骗榴姬恨页挞笨匆酝板顺继诌掌酶柜嫌茧绸谁屈汾轨讳诉震斧颐悬赃凋囤竹感翱隶向碘走巩镜田计舍锁砖郑般凶拭请棠阁擦职精顽祸犊徽敢雪搅崇沂尤瘪浦目仁浇萄乞境酮畔华鼎众彬暇靡机掺蜂匡舔个芯奶尊扮幽爹滔撒绘盛谐冠刑啊蹄先臃恨持音诲肾鞋封次汽复弛橱视印辈卿蔡国袖诣台瓶厢唤臃额膏递票岳缀怂

4、吉蹭炉曙呈芒辫迭鹤挫辫呐钾寇杏问揩搬烧益凭丸番褥铲城鄂勒沁狂韦闭摔渗问解湍逛版烦渍球侣何耸目 录1.概述- 1 -2.89C51单片机简介- 1 -3.FPGA简介- 2 -4.矩阵键盘控制系统- 3 -4.1.FPGA设计框图- 3 -4.2.单片机硬件实现- 4 -4.3.键盘控制系统子模块- 4 -4.3.1 矩阵键盘原理- 4 -4.3.2 时钟分频模块- 5 -4.3.3 键盘扫描模块- 6 -4.3.4 译码转换及三态门输出模块- 6 -4.3.5 单片机及液晶显示模块部分- 7 -5.仿真及结果分析- 9 -5.1 分频模块时序仿真- 9 -5.2 键盘扫描模块- 9 -5.3

5、译码输出模块- 9 -5.4 单片机与液晶显示器模块- 10 -6.参考文献- 11 -致 谢- 12 -附 录- 13 -1. 概述随着可编程逻辑器件及EDA技术的发展,在系统设计中经常会用到FPGA来扩展单片机的相关资源。单片机具有性价比高、功能灵活、易于人机对话、强大的数据处理能力等特点;而FPGA则具有高速、高可靠性以及开发便捷、规范等特点,因此两类器件相结合的电路结构应在许多高性能仪器仪表和电子产品中将被广泛应用。根据两者的特点,设计一种基于89C51单片机与FPGA的总线接口逻辑电路,实现对机械式键盘按键的检测和译码输出。本系统主要分为四大部分:89C51芯片、FPGA模块、矩阵键

6、盘和液晶显示器。其中FPGA模块主要实现与矩阵键盘接口并发信号对其扫描并得到信号等复杂的逻辑功能,89C51芯片实现将FPGA芯片传来的信号并将其对其信号识别然后将其传给显示器,驱动液晶显示器显示。2. 89C51单片机简介89C51是Intel公司生产的一种单片机,在一小块芯片上集成了一个微型计算机的各个组成部分。每一个单片机包括:一个8位的微型处理器CPU;一个256K的片内数据存储器RAM;片内程序存储器ROM;四个8位并行的I/O接口P0-P3,每个接口既可以输入,也可以输出;两个定时器/记数器;五个中断源的中断控制系统;一个全双工UART的串行I/O口;片内振荡器和时钟产生电路,但石

7、英晶体和微调电容需要外接。最高允许振荡频率是12MHZ。以上各个部分通过内部总线相连接。中央处理器CPU是单片微型计算机的指挥、执行中心,由它读人用户程序,并逐条执行指令。有的指令涉及到各个寄存器之间的关系;有的指令涉及到单片机核心电路内部各功能部件之间的关系;有的则与外部器件如外部程序存储器发生联系。89C5l单片机的一个执行周期由6个状态(s1s6)组成,每个状态又持续2个振荡周期,分为P1和P2两个节拍。这样,一个机器周期由12个振荡周期组成。若采用12MHz的晶体振荡器,则每个机器周期为1us,每个状态周期为16us;在一数情况下,算术和逻辑操作发生在N期间,而内部寄存器到寄存器的传输

8、发生在P2期间。89C5l单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。由于单片机功能多,引脚数少,因而许多引脚具有第2功能;单片机对外呈3总线形式,由P2、P0口组成16位地址总线;由P0口分时复用作为数据总线。3. FPGA简介FPGA(Field Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点

9、。 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有: 1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片; 2)FPGA可做其它全定制或半定制ASIC电路的中试样片; 3)FPGA内部有丰富的触发器和IO引脚; 4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一; 5) FPGA采用高速CHMOS工艺,

10、功耗低,可以与CMOS、TTL电平兼容。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。 加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。 4. 矩阵键盘

11、控制系统4.1. FPGA设计框图FPGA电路的设计,包括对时钟进行分频,对键盘进行连续扫描,再进一步通过译码等操作,确定按键的位置,译码输出。并进一步将译码得到的8位二进制数经过一个三态门,通过中断信号和RD信号的控制,实现单片机和FPGA的8位数据信号的互连。FPGA总体设计框图如图4-1所示。图4-1 FPGA总体设计框图4.2. 单片机硬件实现89C5l单片机接收从FPGA模块传送过来的信号,并对信号进行识别,然后驱动液晶显示器显示信号所代表的按键。单片机硬件接线图如图4-2所示。图4-2 单片机硬件接线图4.3. 键盘控制系统子模块4.3.1 矩阵键盘原理矩阵键盘又叫行列式键盘。用带

12、IO口的线组成行列结构,按键设置在行列的交点上。例如用33的行列式结构可以构成9个键的键盘。这样,当按键数量平方增长时,I/O口只是线性增长,这样就可以节省I/O口。按键设置在行列线交叉点,行列线分别连接到按键开关的两端。列线通过上拉电阻接3.3V电压,即列线的输出被默认设置为高电平状态,对应的二进制代码即为1。判断键盘中有无按键按下式通过行线送入扫描信号然后从列线读取状态得到的。其方法是依次给行线送低电平,检查列线的输入。如果列线全是高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则代表低电平信号所在的行和出现低电平的列的交点处有按键按下。矩阵键盘的原理图如图4-3所示

13、。图4-3 矩阵键盘的原理图4.3.2 时钟分频模块时钟电路主要产生系统所需要的时钟信号,由 FPGA 时钟分频得到系统工作时钟,然后采用计数器分频方法得到所需要的键盘扫描信号。本次设计中循环的发送3种数值,即011,101,110。具体的分频过程是将原来的f=50Mhz分频到现在的f=50hz。本程序中采用了计数器分频的思路,把一个计数周期内的约定个数定为1000000,在每次计数到约定个数的一半时,实现1、0之间的跃变。这样,就实现了对原频率1/1000000的分频。分频模块视图如图4-4所示。图4-4 分频模块视图4.3.3 键盘扫描模块键盘扫描电路用来产生键盘扫描信号,根据矩阵键盘工作

14、原理,需要产生从第一列到第四列的周期性扫描信号。采用 Verilog 硬件语言设计扫描模块。键盘扫描模块可以周期性的得到行扫描信号Keydry0Keydry2: 011101110011.周而复始的扫描。触发信号的周期是20ms,就是上一分频模块的的输出周期。键盘扫描模块如图4-5所示。图4-5 键盘扫描模块4.3.4 译码转换及三态门输出模块矩阵键盘所产生的扫描回复信号( 按键输入给 FPGA 的信号) ,是无法直接在 FPGA 内部作为信号进行使用,在使用前需要根据定义的不同功能将扫描回复信号译码为可供 FPGA 识别的 BCD 编码,完成矩阵键盘输入的译码,同时区分不同按键的功能。译码电

15、路的主要功能是: 判断是否有键按下,然后根据扫描的信号确认所按下的键是数字键还是功能键,将所按下的键编写成 BCD 码。BCD码的编码表4-1如下所示:表4-1 BCD码编码表键盘输出按键译码键盘输出按键译码011_01110001101_11060110011_10120010110_01170111011_11030011110_10181000101_01140100110_11091001101_10150101000_000无按键0000在完成BCD码转换后,要进一步通过中断控制,发送信号给单片机。并在三态门的控制作用下,实现不同状态的输出。具体即在无键盘按下时,输出为高阻状态;有键

16、盘按下时,按相应的键码输出8位数据给单片机。在三态门的控制实现过程中,要注意,RD信号的0和1状态转换的条件,从0到1和从1到0是依据不同的变量来进行判断的。从1到0,是判断Y发生变化,且当前状态不是全为1;从0到1是根据列向量KEYO的状态进行判断的,一旦KEYO为全1,则进行中断信号从0到1的转换。这样能够实现三态门有效的对数据输出的控制。译码输出模块如图4-6所示。图4-6 译码输出模块4.3.5 单片机及液晶显示模块部分点阵LCD的显示原理:在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8

17、位(一字节)即可。对于中文,将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。字模是用数字的各位信息来记载英文或汉字的形状,通过字模将汉字在屏幕上显示出来。12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及12864全点阵液晶显示器组成。可完成图形显示,也可以显示84个(1616点阵)汉字。12864LCD的引脚说明如表4-2所示。表4-2 液晶模块12864的管脚说明管脚号管脚名称LEVER管脚功能描述1VSS0电源地2VDD+5.0V电源电压3V0-液晶显示器驱动电压4D/I(RS)H/LD/I=

18、“H”,表示DB7DB0为显示数据D/I=“L”,表示DB7DB0为显示指令数据5R/WH/LR/W=“H”,E=“H”数据被读到DB7DB0R/W=“L”,E=“HL”数据被写到IR或DR6EH/LR/W=“L”,E信号下降沿锁存DB7DB0R/W=“H”,E=“H”DDRAM数据读到DB7DB07DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15CS1H/LH:选择芯片(右半屏)信号16CS2H/LH:选择芯片(左半屏)信号17RETH/L复位信号,低电平复位18VOU

19、T-10VLCD驱动负电压19LED+-LED背光板电源20LED-LED背光板电源显示模块电路如图4-7所示,液晶模块的1管脚接电源地,15管脚用于接电源地,19管脚用于接电源地。2管脚接电源给液晶显示器供电,3管脚接电源用于提供液晶显示器显示驱动电压,17管脚接电源,20管脚接电源用与提供背景光。4管脚接单片机的P1.3用于接收数据或者指令,5管脚接单片机的P1.4选择数据被读写到什么位置,6管脚接单片机的P1.5用于提供锁存信号。图4-7 显示模块电路当FPGA模块周期性地对键盘进行扫描的时候,也会周期性地给单片机发送中断信号,在单片机程序中加入中断信号比较简单,代码如下:EA=1;/打

20、开总中断EX0=1;/打开外部中断0IT0=0;/将中断0设置为电平触发然后单片机对输入管脚进行扫描,如果输入信号是0x01,单片机就驱动液晶显示器显示数字1,如果输入信号是0x02,单片机驱动液晶显示器显示数字2。5. 仿真及结果分析5.1 分频模块时序仿真分频模块时序仿真结果如图5-1所示:图5-1分频模块时序仿真结果结果分析:如图所示,CLK频率是50Mhz,分频以后CLK_OUT的周期是20ms(图中的140ms和120ms之间即为一个周期,20ms)。5.2 键盘扫描模块键盘扫描模块仿真结果如图5-2所示:图5-2键盘扫描模块仿真结果结果分析:如图所示,每过一个周期,键盘行扫描信号就

21、变化一次,并且按照Keydrv2:0:011101110011的顺序周而复始的扫描。5.3 译码输出模块译码输出结果如图5-3所示:图5-3 译码输出结果结果分析:如图所示,Y17:0即为输出。如黄线所示位置,KEYI_KEYO为110_101,对应于键盘上的“8”。再来看输出Y17:0为1111_0111,取反以后为0000_1000,对应于BCD码,也是对应着“8”。所以,仿真结果正确。即当按下相应的键时(通过相应的仿真激励来实现,即对KEYO的控制),会输出相应的BCD码。在无键盘按下时,输出为高阻状态。5.4 单片机与液晶显示器模块单片机对输入管脚进行扫描,然后进行输出,可以由prot

22、eus软件对单片机程序进行仿真,仿真结果如图5-4所示,由于Proteus软件对单片机模块有许多默认的输入,例如晶振电路,故没有在软件中进行连线,从而简化布局。图5-4Proteus软件仿真结果6. 参考文献1 李华. MCS 251系列单片机接口技术 M. 北京:北京航天航空大学出版社,1993.2 游志宇,张洪,董秀成等. MCS251 与FPGA_CPLD 总线接口逻辑设计J. 单片机与嵌入式系统应用 ,2008,1 :29 - 32.3 徐志军,徐光辉. CPLD/ FPGA 的开发与应用 M. 北京:电子工业出版社,2002.4 郭文川.单片机原理与接口技术M. 北京:中国农业出版社

23、,2007.5 夏宇闻. Verilog数字系统设计教程M. 北京:北京航天航空大学出版社,2008.6 吴继华,王诚. 设计与验证Verilog HDLM. 北京:人民邮电出版社,2006.7 栗彩霞,武一等. MCS 251单片机与FPGA接口的逻辑设计J.山西电子技术,2009,5.致 谢通过这次智能仪器设计大作业基于单片机和FPGA的矩阵键盘控制系统设计,我收获了许多。学习了89C51单片机的结构组成、各个组成部分的功能,并且掌握了一定的单片机编程技能;学习了Verilog语言的编写规范,利用Xilinx的ISE工具,用Verilog语言完成电路的设计;初步了解了可编程逻辑器件对硬件系

24、统的控制,并且对89C51单片机与FPGA逻辑控制和接口连接有了一定的认识。在这里要感谢曾翔君老师对我的指导。我们几个同学共同完成这个大作业,但是在机械学院我们接触单片机和FPGA控制方面知识的机会较少,因此刚开始接触大作业时遇到了很多问题,曾老师都对我们的问题耐心的指导,老师渊博的知识和悉心的教导深深地感染了我们,我们衷心祝愿曾老师在未来的生活工作里,一帆风顺,心想事成!附 录1.单片机程序/LCD_12864.c/-/ 名称:12864LCD(KS0108)显示驱动程序 (不带字库)/-#include #include #define INT8Uunsigned char#define

25、INT16Uunsigned int#defineLCD_DB_PORTP1/液晶DB0-DB7#define LCD_START_ROW0xC0/起始行#define LCD_PAGE0xB8/页指令#define LCD_COL0x40/列指令/液晶引脚定义sbitDI = P20 ;/数据/命令选择线sbitRW = P21 ;/读/写控制线sbitE = P22 ;/使能控制线sbitCS1 = P23 ;/片选1sbitCS2= P24 ;/片选2sbitRST = P25 ;/复位/-/ LCD忙等待/-void LCD_Busy_Wait()doLCD_DB_PORT = 0xF

26、F; /液晶端口置高电平RW = 1;_nop_();DI = 0; /设置为读,选择状态寄存器E = 1;_nop_();E = 0; /E置高电平读取,随后置为低电平 while (P0 & 0x80);/-/ 向LCD发送命令/-void LCD_Write_Command( INT8U c) LCD_Busy_Wait(); /液晶忙等待 LCD_DB_PORT = 0xFF; /液晶端口置高电平 RW = 0; _nop_(); DI = 0; /设置为写,选择命令寄存器 LCD_DB_PORT = c; /一字节命令放置到液晶端口 E = 1; _nop_(); E = 0; /E

27、置高电平读取,随后置为低电平/-/ 向LCD发送数据/-void LCD_Write_Data(INT8U d )LCD_Busy_Wait(); /液晶忙等待LCD_DB_PORT = 0xFF; /液晶端口置高电平RW = 0;_nop_();DI = 1; /设置为写,选择数据寄存器LCD_DB_PORT = d; /一字节数据放置到液晶端口E = 1;_nop_();E = 0; /E置高电平读取,随后置为低电平/-/ 初始化LCD/-void LCD_Initialize()CS1 = 1;CS2 = 1; /左右半屏片选LCD_Write_Command(0x3F); / 显示开L

28、CD_Write_Command(LCD_START_ROW); / 设置起始行/-/ 通用显示函数/ / 从第P页第L列开始显示W个字节数据,数据在r所指向的缓冲/ 每字节8位是垂直显示的,高位在下,低位在上/ 每个8*128的矩形区域为一页/ 整个LCD又由64x64的左半屏和64x64的右半屏构成/-void Common_Show(INT8U P,INT8U L,INT8U W,INT8U *r)INT8U i;/显示在左半屏还是右半屏if( L 64)CS1 = 1;CS2 = 0;LCD_Write_Command(LCD_PAGE + P);LCD_Write_Command(L

29、CD_COL + L);/全部显示在左半屏if( L + W 64)for( i = 0; i W; i +)LCD_Write_Data(ri);/如果越界则跨越左右半屏显示else/左半屏显示for(i = 0; i 64 - L; i +)LCD_Write_Data(ri);/右半屏显示CS1 = 0;CS2 = 1;LCD_Write_Command(LCD_PAGE + P);LCD_Write_Command(LCD_COL);for( i = 64 - L; i W; i +)LCD_Write_Data(ri);/全部显示在右半屏elseCS1 = 0;CS2 = 1;LCD

30、_Write_Command(LCD_PAGE + P);LCD_Write_Command(LCD_COL + L -64);for( i = 0; i W; i +)LCD_Write_Data(ri);/-/ 显示一个816点阵字符/-void Display_A_Char(INT8U P,INT8U L,INT8U *M)Common_Show( P, L, 8, M );Common_Show( P + 1,L, 8, M + 8 );/-/ 显示一串8x16点阵字符/-void Display_A_Char_String(INT8U P,INT8U L,INT8U C,INT8U

31、*M)INT8U i;for(i = 0; i C; i +)Display_A_Char( P, L + i * 8, M + i * 16);/main.c/-/ 名称:LGM12864(KS0108)液晶显示程序/-/ 说明:开机时系统从EPROM 2764中读取画面并显示到12864LCD/-#include #include #include #define INT8U unsigned char#define INT16Uunsigned int#define keyport P1/12864LCD相关函数void LCD_Initialize();void Display_A_C

32、har(INT8U,INT8U,INT8U *);void Display_A_Char_String(INT8U,INT8U,INT8U,INT8U *);/void Display_A_WORD(INT8U,INT8U,INT8U *);/void Display_A_WORD_String(INT8U,INT8U,INT8U,INT8U *); /void Display_Image(INT8U,INT8U,INT8U,INT8U,INT8U * );INT8U code Char_1=/*- 文字: 1 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0

33、x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,;INT8U code Char_2=/*- 文字: 2 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,;INT8U code Char_3=/*- 文字: 3 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x30,0x08,0x8

34、8,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,;INT8U code Char_4=/*- 文字: 4 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,;INT8U code Char_5=/*- 文字: 5 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xF8,0x08,0x88,0x88,0x08,

35、0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,;INT8U code Char_6=/*- 文字: 6 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,;INT8U code Char_7=/*- 文字: 7 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x

36、00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,;INT8U code Char_8=/*- 文字: 8 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,;INT8U code Char_9=/*- 文字: 9 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31

37、,0x22,0x22,0x11,0x0F,0x00,;INT8U code Char_String = /*- 文字: L -*/*- 黑体12; 此字体下对应的点阵为:宽x高=8x16 -*/0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*- 文字: C -*/*- 黑体12; 此字体下对应的点阵为:宽x高=8x16 -*/0xE0,0x10,0x08,0x08,0x08,0x10,0x60,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0C,0x0

38、0,/*- 文字: M -*/*- 黑体12; 此字体下对应的点阵为:宽x高=8x16 -*/0xF8,0xE0,0x00,0x00,0x00,0xE0,0xF8,0x00,0x3F,0x00,0x0F,0x30,0x0F,0x00,0x3F,0x00,/*- 文字: 1 -*/*- 黑体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x20,0x30,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 2 -*/*- 黑体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x0

39、0,0x60,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x20,0x00,/*- 文字: 8 -*/*- 黑体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x60,0x90,0x08,0x08,0x08,0x90,0x60,0x00,0x0C,0x12,0x21,0x21,0x21,0x12,0x0C,/*- 文字: 6 -*/*- 黑体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x88,0x88,0x88,0x30,0x00,0x00,0x0F,0x1

40、1,0x20,0x20,0x20,0x1F,0x00,/*- 文字: 4 -*/*- 黑体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x3F,0x04;void delay(INT8U z) unsigned char x,y;for(x=z;x0;x-) for(y=110;y0;y-); void KeyScan(void)switch(keyport&0xFF)case 0x01:delay(5);if(keyport&63)=27)wh

41、ile(keyport&63)=27);/等待按键释放Display_A_Char_String(0,0,1,Char_1);break;case 0x02:delay(5);if(keyport&63)=27)while(keyport&63)=27);/等待按键释放Display_A_Char_String(0,0,1,Char_1);break;case 0x03:delay(5);if(keyport&63)=27)while(keyport&63)=27);/等待按键释放Display_A_Char_String(0,0,1,Char_1);break;case 0x04:delay

42、(5);if(keyport&63)=27)while(keyport&63)=27);/等待按键释放Display_A_Char_String(0,0,1,Char_1);break;case 0x05:delay(5);if(keyport&63)=27)while(keyport&63)=27);/等待按键释放Display_A_Char_String(0,0,1,Char_1);break;case 0x06:delay(5);if(keyport&63)=27)while(keyport&63)=27);/等待按键释放Display_A_Char_String(0,0,1,Char_

43、1);break;case 0x07:delay(5);if(keyport&63)=27)while(keyport&63)=27);/等待按键释放Display_A_Char_String(0,0,1,Char_1);break;case 0x08:delay(5);if(keyport&63)=27)while(keyport&63)=27);/等待按键释放Display_A_Char_String(0,0,1,Char_1);break;case 0x09:delay(5);if(keyport&63)=27)while(keyport&63)=27);/等待按键释放Display_A

44、_Char_String(0,0,1,Char_1);break;void Int0() interrupt 0/外部中断0的服务子程序不用在声明区声明的 KeyScan(); /-/ 主程序/-void main() EA=1;/打开总中断 EX0=1;/打开外部中断0 IT0=0;/将中断0设置为电平触发 LCD_Initialize();/Display_A_WORD_String( 0, 0, 8, Word_String);/Display_A_Char_String(0,0,8,Char_String);P1=0x00;Display_A_Char_String(0,0,1,Cha

45、r_2);2.FPGA程序/- /时钟分频模块 / File : scan_clk.v / Generated : 2011-07-20 / Author : wangliang /- timescale 1 ns / 1 ps module scan_clk ( clkout ,clk ,rst ); input rst ; input clk ; wire clk ; output clkout ; reg clkout_r ; parameter period= 1000000; /parameter period= 10; reg 31:0 cnt; always ( posedge

46、clk or negedge rst) /分频50Hz begin if ( !rst ) begin cnt = 311b0 ; clkout_r = 0 ; end else begin cnt 1) - 1) /设定周期时间的一半 clkout_r = #1 1b1; else if (cnt = period - 1) /设定的周期时间 begin clkout_r = #1 1b0; cnt = #1 b0; end end end assign clkout = clkout_r ; endmodule/- /键盘扫描模块 / File : key_scan.v / Generat

47、ed : 2011-07-20 / Author : wangliang /- timescale 1 ns / 1 ps module part2 ( clk ,keydrv ,rst ); input clk ; input rst ; wire clk ; output 2:0 keydrv ; wire 2:0 keydrv ; parameter s1 = 3b110; parameter s2 = 3b101; parameter s3 = 3b011; reg 2:0current_state; reg 2:0next_state; always ( posedge clk or

48、 negedge rst ) begin if ( !rst ) current_state = s1 ; else current_state = next_state ; end always ( current_state ) begin case ( current_state ) s1: next_state =s2; s2: next_state =s3; s3: next_state =s1; default: next_state =s1; endcase end assign keydrv = current_state ; endmodule/- /译码转换与三态输出模块 / File : top3.v / Generated : 2011-07-20 / Author : wangliang /- timescale 1 ns / 1 ps module top3 ( KEYO ,KEYI ,INT , clk , Y1 , rst); input 2:0 KEYO ; /与原理图一致,是键盘输出端口给FPGA input clk ; input rst ; /input RD ; /单片机发出的的RD信号 output 2:0 KEYI ; /与原理图一致,

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

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

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


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