最新实验十二SOPC的键盘与LCD显示控制实验
FPGA实验十一 PS2键盘控制LCD显示实验
高性能软件无线电平台X6-面向高性能SoC验证和科学仿真主要特性支持PCI Express® Gen2 ×8 (但IP另配)搭载DDR3 SDRAM SO-DIMM系统搭载FMC连接器,可使用大部分RocketI/O(GTX)利用FMC可选基板能够对应各种接口提供PCI Express和DMA等参考设计无限扩展行业应用下一代软件无线电平台微软研究院软件无线电(Sora)是一种新型基于PC 的可编程无线电平台架构。
Sora 结合了可编程性和通用处理器(GPP )平台的性能和灵活性,同时使用的硬件和软件技术,以满足高性能的无线通信算法的计算挑战。
Sora 平台提供 Soft WiFi 开源代码。
SoftWiFi 目前支持率的802.11a/b/g 全部协议,无缝地与商业802.11网卡实现互操作,并达到商业网卡相当的性能。
Sora 是第一平台真正的软件无线电平台,支持用户开发的802.11a/b/g ,如物理层和MAC ,软件完全是标准PC 架构。
典型应用: White Spaces Mobile Phones Public Safety Radio Land MobileBroadcast TV and FM Radio Satellite navigationCovers 6 Amateur Radio Bands 射频部分主要特性: Dull-duplex Transceiver50 MHz to 5.8 GHz coverage50-100mW (17-20dBm) from 50 MHz to 1.2 GHz 30-70mW (15-18dBm) from 1.2 GHz to 2.2 GHz25+ dB Output power control range under software control Receive Specs:Noise figure of 5-7 dBIIP3 of 5-10 dBm;IIP2 of 40-55 dBm全频带射频收发模块实验十一 PS/2键盘显示LCD 实验一 实验目的1掌握PS/2键盘控制端口协议;2通过编写程序实现PS/2键盘控制LCD 的显示。
按键及显示实验
一、实验原理及电路1、LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。
因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。
,2、由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。
驱动模块具有八位数据总线,外加一些电源接口和控制信号。
而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。
由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。
实验电路图二、功能说明设计并实现一4×4键盘的接口,键盘与1602显示单元连接,编写实验程序扫描键盘输入,并将扫描结果送1602显示,键盘采用4×4键盘。
将键盘进行编号记作0—F当按下其中一个按键时将该按键对应的编号在一个1602显示出来,当按下下一个按键时便将这个按键的编号1602上显示出来实验框图四、实验代码#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define lcd_data P3sbit lcd_EN=P2^2;sbit lcd_RW=P2^1;sbit lcd_RS=P2^0;uchar key,a;uchar sys_time1[]="good";uchar sys_time2[]="morning!";uchar sys_time3[]="play";uchar sys_time4[]="basketball!";uchar sys_time5[]="study";uchar sys_time6[]="hard!";unsigned char code key_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xB7,0x77 };void delayms(uint ms){uchar t;while(ms--){for(t=0;t<120;t++);}}void delay_20ms(void){uchar i,temp;for(i = 20;i > 0;i--){temp = 248;while(--temp);temp = 248;while(--temp);}}void delay_38us(void){ uchar temp;temp = 18;while(--temp);}void delay_1520us(void){ uchar i,temp;for(i = 3;i > 0;i--){temp = 252;while(--temp);}}uchar lcd_rd_status( ) /*读取lcd1602的状态,主要用于判断忙*/{uchar tmp_sts; //声明变量tmp_stslcd_data = 0xff; //初始化P3口lcd_RW = 1; //RW =1 读lcd_RS = 0; //RS =0 命令,合起来表示读命令(状态)lcd_EN = 1; //EN=1,打开EN,LCD1602开始输出命令数据,100nS 之后命令数据有效tmp_sts = lcd_data; //读取命令到tmp_stslcd_EN = 0; //关掉LCD1602lcd_RW = 0; //把LCD1602设置成写return tmp_sts; //函数返回值tmp_sts}void lcd_wr_com(uchar command ) /*写一个命令到LCD1602*/{while(0x80&lcd_rd_status()); //写之前先判断LCD1602是否忙,看读出的命令的最高位是否为1,为1表示忙,继续读,直到不忙lcd_RW = 0;lcd_RS = 0; //RW=0,RS=0 写命令lcd_data = command; //把需要写的命令写到数据线上lcd_EN = 1;lcd_EN = 0; //EN输出高电平脉冲,命令写入}void lcd_wr_data(uchar wdata ) /*写一个显示数据到lcd1602*/{while(0x80&lcd_rd_status()); //写之前先判断lcd1602是否忙,看读出的命令的最高位是否为1,为1表示忙,继续读,直到不忙lcd_RW = 0;lcd_RS = 1; //RW=0,RS=1 写显示数据lcd_data = wdata ; //把需要写的显示数据写到数据线上lcd_EN = 1;lcd_EN = 0; //EN输出高电平脉冲,命令写入lcd_RS = 0;}void Init_lcd(void) /*初始化lcd1602*/{delay_20ms(); //调用延时lcd_wr_com(0x38); //设置16*2格式,5*8点阵,8位数据接口delay_38us(); //调用延时lcd_wr_com(0x0c); //开显示,不显示光标delay_38us(); //调用延时lcd_wr_com(0x01); //清屏delay_1520us(); //调用延时lcd_wr_com(0x06); //显示一个数据后光标自动+1}void show(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time1[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time1[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time2[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time2[i]); //送显示数据}}void show1(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time3[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time3[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time4[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time4[i]); //送显示数据}}void show2(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time5[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time5[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time6[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time6[i]); //送显示数据}}uchar rdkey() //键盘扫描函数{uchar scan1,scan2,keycode,j;P1=0x0f; //列线置低电平,行线输入状态scan1=P1; //读入行值if((scan1&0x0f)!=0x0f) //判断是否有按键按下{delayms(30); //调用延时程序去抖动scan1=P1; //读入行值if((scan1&0x0f)!=0x0f) //二次判断是否有按键按下{P1=0xf0; //列线作输入,行线置低电平scan2=P1; //读入列值keycode=scan1|scan2; //组合成键编码for(j=0;j<=15;j++) //循环16次{if(keycode== key_code[j])//查表得键值{key=j; //算出最后键值return(key); //返回键值}}}}else P1=0xff;return (16);}void main(){while(1){P1=0x0f;if((P1&0x0f)!=0x0f) //判断是否有键按下{a=rdkey(); //调用键盘扫描函数switch (a){case 0: show(); break;case 1: show1();break;case 2: show2();break;}}}}五、实验过程本实验仪提供了一个4×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
lcd控制实验报告
lcd控制实验报告标题:LCD控制实验报告摘要:本实验旨在探究液晶显示屏(LCD)的控制原理和操作方法。
通过实验,我们成功实现了对LCD的控制,并了解了LCD的基本工作原理和控制方式。
本文将详细介绍实验的步骤、结果和分析。
引言:LCD是一种广泛应用于电子产品中的显示器件,它具有低功耗、高分辨率和薄型轻便等优点,因此得到了广泛的应用。
了解LCD的控制原理和操作方法对于电子工程师和学生来说是非常重要的。
本实验旨在帮助学生掌握LCD的基本控制方法,并加深对LCD工作原理的理解。
实验目的:1. 了解LCD的基本工作原理2. 掌握LCD的控制方法3. 实现对LCD的基本控制实验步骤:1. 连接LCD显示屏和控制器2. 编写控制程序3. 调试程序并观察LCD显示效果4. 分析实验结果实验结果:通过实验,我们成功实现了对LCD的控制。
在编写控制程序并调试后,LCD显示屏能够按照我们的指令显示相应的内容,包括文字、图形等。
实验结果表明,我们掌握了LCD的基本控制方法,并能够灵活地应用于实际项目中。
实验分析:通过本次实验,我们深入了解了LCD的基本工作原理和控制方法。
LCD的显示效果受到控制程序的影响,因此编写高效的控制程序对于实现理想的显示效果至关重要。
此外,LCD的控制还涉及到对显示屏的初始化、数据传输等细节,需要我们仔细调试和优化。
结论:本实验成功实现了对LCD的控制,并加深了我们对LCD的工作原理和控制方法的理解。
通过实验,我们掌握了LCD的基本控制方法,并能够灵活地应用于实际项目中。
这对于我们的学习和工作都具有重要意义。
致谢:感谢实验室的老师和同学们在实验中的帮助和支持。
也感谢本次实验给我们提供了一个很好的学习机会,让我们更加深入地了解了LCD的控制原理和操作方法。
按键及显示实验
一、实验原理及电路1、LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。
因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。
,2、由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。
驱动模块具有八位数据总线,外加一些电源接口和控制信号。
而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。
由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。
实验电路图二、功能说明设计并实现一4×4键盘的接口,键盘与1602显示单元连接,编写实验程序扫描键盘输入,并将扫描结果送1602显示,键盘采用4×4键盘。
将键盘进行编号记作0—F当按下其中一个按键时将该按键对应的编号在一个1602显示出来,当按下下一个按键时便将这个按键的编号1602上显示出来实验框图四、实验代码#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define lcd_data P3sbit lcd_EN=P2^2;sbit lcd_RW=P2^1;sbit lcd_RS=P2^0;uchar key,a;uchar sys_time1[]="good";uchar sys_time2[]="morning!";uchar sys_time3[]="play";uchar sys_time4[]="basketball!";uchar sys_time5[]="study";uchar sys_time6[]="hard!";unsigned char code key_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xB7,0x77 };void delayms(uint ms){uchar t;while(ms--){for(t=0;t<120;t++);}}void delay_20ms(void){uchar i,temp;for(i = 20;i > 0;i--){temp = 248;while(--temp);temp = 248;while(--temp);}}void delay_38us(void){ uchar temp;temp = 18;while(--temp);}void delay_1520us(void){ uchar i,temp;for(i = 3;i > 0;i--){temp = 252;while(--temp);}}uchar lcd_rd_status( ) /*读取lcd1602的状态,主要用于判断忙*/{uchar tmp_sts; //声明变量tmp_stslcd_data = 0xff; //初始化P3口lcd_RW = 1; //RW =1 读lcd_RS = 0; //RS =0 命令,合起来表示读命令(状态)lcd_EN = 1; //EN=1,打开EN,LCD1602开始输出命令数据,100nS 之后命令数据有效tmp_sts = lcd_data; //读取命令到tmp_stslcd_EN = 0; //关掉LCD1602lcd_RW = 0; //把LCD1602设置成写return tmp_sts; //函数返回值tmp_sts}void lcd_wr_com(uchar command ) /*写一个命令到LCD1602*/{while(0x80&lcd_rd_status()); //写之前先判断LCD1602是否忙,看读出的命令的最高位是否为1,为1表示忙,继续读,直到不忙lcd_RW = 0;lcd_RS = 0; //RW=0,RS=0 写命令lcd_data = command; //把需要写的命令写到数据线上lcd_EN = 1;lcd_EN = 0; //EN输出高电平脉冲,命令写入}void lcd_wr_data(uchar wdata ) /*写一个显示数据到lcd1602*/{while(0x80&lcd_rd_status()); //写之前先判断lcd1602是否忙,看读出的命令的最高位是否为1,为1表示忙,继续读,直到不忙lcd_RW = 0;lcd_RS = 1; //RW=0,RS=1 写显示数据lcd_data = wdata ; //把需要写的显示数据写到数据线上lcd_EN = 1;lcd_EN = 0; //EN输出高电平脉冲,命令写入lcd_RS = 0;}void Init_lcd(void) /*初始化lcd1602*/{delay_20ms(); //调用延时lcd_wr_com(0x38); //设置16*2格式,5*8点阵,8位数据接口delay_38us(); //调用延时lcd_wr_com(0x0c); //开显示,不显示光标delay_38us(); //调用延时lcd_wr_com(0x01); //清屏delay_1520us(); //调用延时lcd_wr_com(0x06); //显示一个数据后光标自动+1}void show(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time1[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time1[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time2[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time2[i]); //送显示数据}}void show1(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time3[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time3[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time4[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time4[i]); //送显示数据}}void show2(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time5[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time5[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time6[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time6[i]); //送显示数据}}uchar rdkey() //键盘扫描函数{uchar scan1,scan2,keycode,j;P1=0x0f; //列线置低电平,行线输入状态scan1=P1; //读入行值if((scan1&0x0f)!=0x0f) //判断是否有按键按下{delayms(30); //调用延时程序去抖动scan1=P1; //读入行值if((scan1&0x0f)!=0x0f) //二次判断是否有按键按下{P1=0xf0; //列线作输入,行线置低电平scan2=P1; //读入列值keycode=scan1|scan2; //组合成键编码for(j=0;j<=15;j++) //循环16次{if(keycode== key_code[j])//查表得键值{key=j; //算出最后键值return(key); //返回键值}}}}else P1=0xff;return (16);}void main(){while(1){P1=0x0f;if((P1&0x0f)!=0x0f) //判断是否有键按下{a=rdkey(); //调用键盘扫描函数switch (a){case 0: show(); break;case 1: show1();break;case 2: show2();break;}}}}五、实验过程本实验仪提供了一个4×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
lcd控制实验报告
lcd控制实验报告LCD控制实验报告引言:液晶显示技术(Liquid Crystal Display,简称LCD)是一种通过控制液晶分子排列来实现图像显示的技术。
在本次实验中,我们将学习如何使用控制器来控制LCD显示屏,并通过实际操作来理解其原理和应用。
一、实验目的本次实验的目的是掌握LCD控制器的基本原理和操作方法,了解液晶显示技术的工作原理,并通过实际操控LCD显示屏来展示图像。
二、实验装置和材料1. Arduino开发板2. LCD显示屏3. 连接线4. 电脑三、实验步骤1. 连接电路将Arduino开发板与LCD显示屏通过连接线连接起来,确保连接正确无误。
2. 编写程序使用Arduino开发环境,编写程序来控制LCD显示屏。
首先,需要包含LiquidCrystal库,然后定义LCD屏幕的引脚连接。
接下来,可以使用库提供的函数来控制LCD的显示内容,例如显示文本、清除屏幕、设置光标位置等。
3. 上传程序将编写好的程序上传到Arduino开发板中,确保程序能够正确运行。
4. 测试LCD显示屏通过编写的程序,控制LCD显示屏显示指定的内容。
可以试验不同的显示效果,例如显示不同的文本、改变文本颜色等。
四、实验结果与分析在实验中,我们成功地控制了LCD显示屏显示指定的内容。
通过编写程序,我们可以实现文本的显示、光标的控制以及屏幕的清除。
这些功能可以广泛应用于各种显示设备中,例如计算器、电子钟表、温度计等。
在实验过程中,我们还发现LCD显示屏的分辨率对显示效果有着重要的影响。
较高的分辨率可以显示更多的细节,而较低的分辨率则会导致图像模糊不清。
因此,在实际应用中,我们需要根据具体的需求选择适合的LCD显示屏。
此外,LCD显示屏还具有低功耗、视角广、反应速度快等优点,使其成为目前应用最广泛的显示技术之一。
随着科技的不断发展,LCD显示屏的应用领域也在不断扩大,未来有望取代传统的显示技术,成为主流。
五、实验总结通过本次实验,我们深入了解了LCD控制器的原理和应用。
键盘及LED显示实验
实验三键盘及LED显示实验一、实验内容利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INT0,INT1),单片机扫描键盘,并把按键输入的键码一位LED 显示器显示出来。
二、实验目的及要求(一)实验目的通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力。
(二)实验要求1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。
2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。
三、实验条件及要求计算机,C51语言编辑、调试仿真软件及实验箱50台套。
四、实验相关知识点1.C51编程、调试。
2.扩展8255芯片的原理及应用。
3.键盘扫描原理及应用。
4.LED显示器原理及应用。
5.外部中断的应用。
五、实验说明本实验仪提供了8位8段LED显示器,学生可选用任一位LED显示器,只要按地址输出相应的数据,就可以显示所需数码。
六、实验原理图P1口桥接。
八、实验参考流程图1.主程序流程图2.外中断服务程序流程图外部中断0 外部中断1定时器0中断程序,用于消抖动:3.LED显示程序流程图九、C51语言参考源程序#include "reg52.h"unsigned char KeyResult; //存放键值unsigned char buffer[8]; //显示缓冲区bit bKey; //是否有键按下xdata unsigned char P_8255 _at_ 0xf003; //8255的控制口xdata unsigned char PA_8255 _at_ 0xf000; //8255的PA口xdata unsigned char PB_8255 _at_ 0xf001; //8255的PB口xdata unsigned char PC_8255 _at_ 0xf002; //8255的PC口code unsigned char SEG_TAB[] = { //段码0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0};sbit bLine0 = P3^2;sbit bLine1 = P3^3;//延时1msvoid Delay1ms(){unsigned char i;i = 0;while (--i);}//显示void Display(){unsigned char i = 0x7f;unsigned char j;for (j = 0; j < 8; j++){PA_8255 = i; //扫描PB_8255 = SEG_TAB[buffer[j]]; //段数据i = i / 2 + 0x80;Delay1ms();}}//更新显示缓冲区数据void RefurbishData(){char i;for (i = 7; i >0; i--)buffer[i] = buffer[i-1];buffer[0] = KeyResult;}void Int0Int() interrupt 0{unsigned char i = 0x80;unsigned char KeyResult0 = 0x0;EX0 = 0; //关外部中断0P_8255 = 0x89; //PC口输入bLine0 = 0; //P3.2作行输出while (i){if ((PC_8255 & i) == 0)break;KeyResult0++;i >>= 1;}P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0;bLine0 = 1;if (i){TH0 = 60; //定时中断计数器初值TL0 = 176; //定时50msTR0 = 1;KeyResult = KeyResult0;}IE0 = 0; //清除中断EX0 = 1; //开外部中断0}void Int1Int() interrupt 2{unsigned char i = 0x80;unsigned char KeyResult0 = 8;EX1 = 0; //关外部中断0P_8255 = 0x89; //PC口输入bLine1 = 0; //P3.2作行输出while (i){if ((PC_8255 & i) == 0)break;KeyResult0++;i >>= 1;}P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0;bLine1 = 1;if (i){TH0 = 60; //定时中断计数器初值TL0 = 176; //定时50msTR0 = 1;KeyResult = KeyResult0;}IE1 = 0; //清除中断EX1 = 1; //开外部中断0}//50ms中断服务程序void INT_Timer0(void) interrupt 1{if (((KeyResult < 8) && !bLine0) ||((KeyResult >= 8) && !bLine1)){bKey = 1; //有键按下,键值在KeyResult中}TR0 = 0;}void main(){char i;bKey = 0; //没有键按下TMOD = 1; //定时器0:方式一P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0x0;ET0 = 1; //开定时器0中断EX0 = 1; //开外部中断0EX1 = 1; //开外部中断1IT0 = 1; //边沿触发IT1 = 1; //边沿触发EA = 1; //允许中断for (i = 0; i < 8; i++)buffer[i] = 0x10;// TR0 = 1; //开定时器T0// bRefurbish = 1;while (1){if (bKey){bKey = 0;RefurbishData();}Display(); //调用显示}}十、实验实施步骤1.仔细阅读实验内容及要求,编写C51源程序。
键盘与数码管显示实验
R72 10K
S14 SW-PB S18 SW-PB S22 SW-PB S26 SW-PB
R73 10K
S15 SW-PB S19 SW-PB S23 SW-PB S27 SW-PB
D2 Diode
D3 Diode
D4 Diode
D5 Diode
J33 1 2 3 4 5 6 7 8
Header 8
R94
R95
Res1
Res1
Res1
Res1
Res1
Res1
Res1
Res1
330R
330R
330R
330R
330R
330R
330R
330R
DS1
11 7 4 2 1 10 5 3
a b DIG1 c d e f g DP
HDSP-B09G
DIG2 DIG3
DP3
DP2
K1 DIG4 K2
K3 K4
9 GND COM D 10
ULN2803A GND
VCC
Pad_DS_K1 Pad_DS_K2 Pad_DS_K3 Pad_DS_K4
Pad_DS_K5
Pad_DS_K6
Pad_DS_K7
Pad_DS_K8 J37
S8550
R80 Res1 10K Q20
S8550
R81 Res1 10K Q21
键盘与数码管显示
一、4X4键盘 二、LED显示器的基本结构 三、实验箱原理图 四、STC15 I/O口 工作模式配置 五、实验要求
一、4X4键盘
5V
行线(输出)
•键特征值的判断
列线(输入)
•键盘控制方式:扫描、中断
键盘LED实验(精)
键盘 LED 显示实验一实验目的:通过此次实验让用户进一步了解、熟悉和掌握 CPLD\FPGA开发软件的使用方法及 VERILOG HDL 的编程方法,熟悉以 VERILOG HDL 文件为顶层模块的设计。
学习体会分支条件语句 CASE 的使用方法及 FPGA I\O口的输出控制。
本实验要求在 SMARTSOPC 实验箱上完成对 8个键盘 KEY1— KEY8进行监控,一旦有键输入判断其键值, 并点亮相应个发光二极管, 如若 KEY3按下去, 则点亮 LED1— LED3发光二极管。
二实验原理:根据所学硬件描述语言知及本实验要求,编程如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY keyled isPORT(key:IN STD_LOGIC_VECTOR(7 DOWNTO 0;led: OUT STD_LOGIC_VECTOR(7 DOWNTO 0;end;architecture selected_key of keyled isbeginwith key selectled<="11111110" when "11111110","11111100" when "11111101","11111000" when "11111011","11110000" when "11110111","11100000" when "11101111","11000000" when "11011111","10000000" when "10111111","00000000" when "01111111","11111111" when others;end selected_key;以上程序通过 WHEN 特定并行语句实现 LED 显示灯在按到按键后相继点亮, 整个程序较简单,过程也很清晰。
基于SOPC的LCD显示模块的设计与实现
21 0 2年 8月
液ቤተ መጻሕፍቲ ባይዱ 晶 与 显 不
Vo . . . 1 27 NO 4 A u ., 01 g 2 2
C i e eJ u n lo iui y t l nd Dipl y h n s o r a fI q d Cr s a sa s a s
103788yjyxs201227040508犇犲狊犻犵狀犪狀犱犐犿狆犾犲犿犲狀狋犪狋犻狅狀狅犳犔犆犇犕狅犱狌犾犲犅犪狊犲犱狅狀犛犗犘犆wanghaixiawuyi犛犮犺狅狅犾狅犳犐狀犳狅狉犿犪狋犻狅狀犈狀犵犻狀犲犲狉犻狀犵犎犲犫犲犻犝狀犻狏犲狉狊犻狋狔狅犳犜犲犮犺狀狅犾狅犵狔犜犻犪狀犼犻狀300401犆犺犻狀犪犈犿犪犻犾
Ke r s OP e h oo y; o arx LCD; a t s Ⅱ; o 1 ywo d :S C t c n lg d tm ti Qu r u Nis 1
士 丘
信号 和数据 信号 。还 可 以根 据 不 同的微处 理器 设
计 出对应 的接 1部 , = 1 适用 于不 同的操 作 , 通过一 些 电路 的设 计在 很 大程 度 上 减 轻微 处 理 器 的负 担 。
文 章 编 号 : 0 72 8 ( 0 2 0 — 5 8 0 1 0 — 7 0 2 1 ) 40 0 — 7
基于 S P O C的 L D显示模块的设计与实现 e
王 海 霞 ,武
( 河北 工业 大 学 信 息 工程 学 院 , 津 天 3 00 , — i h i9 i 13 cr) 0 4 1E mal a9 xa 6 .o : @ n
Ch ne e wor t c nd En ih wor t k w e e d s rb d An a plc ton pr gr m x m pl i s d s o k a gls d s oc r e c i e . p ia i o a e a e o a hia s l y w a lo p ovde . The d sgn c n a n e t e u h a g y r la lt fgr p c ldip a sa s r i d e i o t i s f a ur ss c shi hl e ibiiy
实验十二SOPC的键盘与LCD显示控制实验4页
实验3 SOPC的键盘与LCD显示控制实验【实验目的】1.熟悉矩阵键盘的工作特性。
2.学会使用VHDL语言描述一个矩阵键盘的电路功能。
3.了解字符型液晶显示控制器。
4.掌握1602液晶的操作方法。
5.学会使用VHDL语言描述一个1602液晶控制的电路功能。
【实验内容】1.使用VHDL语言描述一个矩阵键盘的电路功能,程序实现的功能是测试4X4矩阵按键;具体的键值通过FPGA核心板上的数码管来显示。
如按下K1,数码管就显示0,按下K16,数码管就显示F。
2.使用VHDL语言描述一个1602液晶显示屏控制的电路功能,使1602液晶屏可以显示你自己的名字(拼音)。
【实验器材】1. HS-EDA5.1实验箱2.USB-BLASTER烧写器3. Quartus II 8.0【实验原理】本实验需要使用VHDL语言描述一个矩阵键盘以及1602液晶控制的电路功能,下面我们先来介绍一下矩阵键盘和1602液晶显示屏。
1.矩阵键盘:键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘.而靠软件编程来识别的称为非编码键盘;在一般常用系统中,用的最多的是非编码键盘。
也有用到编码键盘的。
非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。
矩阵键盘结构图如上图矩阵键盘的读取都经历一个扫描的过程,程序先将L1输出低电平,,即端口输入11111110,即十六进制0FEH,然后读回端口的数据,此时如果 L1 上的四个按键没有按下,读到的P0 口的数据还是11111110,如按下了按键 8,H2 便被拉成低电平,读回的端口数据11011110(十六进制:0DEH),程序就根据读回的数据来判断某个按键按下了,如果没有按键按下,则再将 L2 输出低电平(P0=11111101,十六进制:0FDH),然后也一样读回端口数据,判断有按键按下否,如此下去,到 L4 的完成,为一个扫描过程。
基于SOPC的ps2-lcd控制器
基于SOPC的键盘及lcd控制器学院:电子工程学院专业班级:电路11级03班姓名:朱潮勇学号:05116079完成日期:2014年6月20日一、设计要求 (1)二、规范说明 (1)三、顶层设计结构图 (1)四、模块详细设计 (2)1 功能说明 (2)2 端口定义 (2)3 设计代码 (2)4 激励代码 (10)5 仿真结果 (17)五、结论和问题: (17)六、团队成员分工:..................................................................................... 错误!未定义书签。
一、设计要求编写verilog程序以及c语言程序实现标准键盘到LCD显示器的通信。
二、规范说明将标准键盘输入的阿拉伯数字以及26个大写字母显示在LCD上。
要求采用FPAG数字逻辑接收键盘串口数据,并转换成并口数据。
NiosII处理器IO口读取此数字或大写字母,需要9bit输入口,8bit为数据,1bit表示状态(是否有新数据?复位时此位为0,键盘有新数据并转换成并口数据此位置1,产生上升沿,并在sopc中定义该标志为外部中断,NiosII判断中断来临、读取数据,并将此位清0)。
读取键盘值、判断状态为和LCD显示,均由NiosII完成。
每次可以连续键入16个数字或大写字母,并具备手动清屏功能。
三、顶层设计结构图四、模块详细设计1 功能说明串并转换模块将标准键盘的串行数据转换成8位并行数据Key_to_lcd模块是nios核,将按键码值转换成lcd显示。
2 端口定义3 设计代码Verilog代码`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer://// Create Date: 19:42:30 04/16/2014// Design Name:// Module Name: PS2_key// Project Name:// Target Devices:// Tool versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments://////////////////////////////////////////////////////////////////////////////////// module key_lcd(input clk,input rst_n,input ps2_clk,input ps2_data,output [7:0] LED,output reg key_pressed,output lcd_rw,output lcd_rs,output lcd_en,output lcd_on,output lcd_blon,output [7:0] lcd_data);reg [7:0] ps2_byte;reg [2:0] key_val;reg key_released;reg [3:0] count;reg ps2_clk_r0, ps2_clk_r1;reg [7:0] ps2_data_reg;wire ps2_clk_n = (~ps2_clk_r0) & ps2_clk_r1;assign lcd_blon = 1'b1;assign lcd_on = 1'b1 ;always @ (posedge clk or negedge rst_n)beginif (!rst_n)beginps2_clk_r0 <= 1'b0;ps2_clk_r1 <= 1'b0;endelsebeginps2_clk_r0 <= ps2_clk;ps2_clk_r1 <= ps2_clk_r0;endendalways @ (posedge clk or negedge rst_n) beginif(!rst_n) begincount <= 4'd0;ps2_data_reg <= 8'd0;endelse if(ps2_clk_n) begincase (count)4'd0: count <= count+1'b1;4'd1: begincount <= count+1'b1;ps2_data_reg[0] <= ps2_data;end4'd2: begincount <= count+1'b1;ps2_data_reg[1] <= ps2_data;end4'd3: begincount <= count+1'b1;ps2_data_reg[2] <= ps2_data;end4'd4: begincount <= count+1'b1;ps2_data_reg[3] <= ps2_data;end4'd5: begincount <= count+1'b1;ps2_data_reg[4] <= ps2_data;end4'd6: begincount <= count+1'b1;ps2_data_reg[5] <= ps2_data;end4'd7: begincount <= count+1'b1;ps2_data_reg[6] <= ps2_data;end4'd8: begincount <= count+1'b1;ps2_data_reg[7] <= ps2_data;end4'd9: begincount <= count+1'b1;end4'd10: begincount <= 4'd0;enddefault: ;endcaseendendalways @ (posedge clk or negedge rst_n) beginif(!rst_n) beginkey_released <= 1'b0;key_pressed<= 1'b0;endelse if(count==4'd10) beginif(ps2_data_reg == 8'hf0) key_released <= 1'b1;else beginif(!key_released) beginkey_pressed <= 1'b1;ps2_byte <= ps2_data_reg;endelse beginkey_pressed <= 1'b0;key_released<= 1'b0;endendendendassign LED = ps2_byte;key_to_lcd (// 1) global signals:.clk(clk),.reset_n(rst_n),// the_key_data.in_port_to_the_key_data(ps2_byte),// the_key_press.in_port_to_the_key_press(key_released),// the_lcd_data.out_port_from_the_lcd_data(lcd_data),// the_lcd_en.out_port_from_the_lcd_en(lcd_en),// the_lcd_rs.out_port_from_the_lcd_rs(lcd_rs),// the_lcd_rw.out_port_from_the_lcd_rw(lcd_rw)// the_pio_b//.out_port_from_the_pio_b());EndmoduleNios C语言代码/*********************************************************************** ** rs 寄存器选择端1 数据寄存器0 指令寄存器* en 使能端由高到低的调变液晶执行指令* rw 读写信号线高写低读* ***********************************************************************/ //将库函数包含进入#include "system.h"//SOPC生成的系统库函数#include "alt_types.h"//类型定义库函数#include <io.h> //io端口库函数#include "altera_avalon_pio_regs.h"//io端口寄存器库函数#include <unistd.h>#include <sys/alt_irq.h>//中断库函数typedef unsigned char Boolean ;typedef unsigned int uint ;#define KEY_DATA *(alt_u8 *)KEY_DATA_BASE //将按键接口寄存器的按键值取得const Boolean key_data[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39, 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a};const Boolean key_table[] = {0x16,0x1E,0x26,0x25,0x2E,0x36,0x3D,0x3E,0x46,0x1C,0x32,0x21,0x23,0x24,0x2B,0x34,0x33,0x4 3,0x3B,0x42,0x4B,0x3A,0x31,0x44,0x4D,0x15,0x2D,0x1B,0x2C,0x3C,0X2A,0x1D,0x22,0x35,0x12}; void LCD_Write_Command(Boolean Command); //写命令void LCD_Write_data(Boolean Data);void Init_LCD(void);static void KEY_OK_ISR( alt_u32 id)//按键中断服务程序。
实验五 键盘、LED、LCD应用实验
一、实验目的:
1.熟练运用嵌入式开发系统环境、C语言及调试方式; 2.理解行扫描工作原理; 3. 理解LED动态显示原理 3.理解LCD显示原理 二、实验要求:
1.仔细阅读本实验指导书。 2.复习有关的章节。 3.熟悉键盘、LED、LCD模块的原理及编程方法。 4.根据实验内容要求编写好程序,为实验做充分地准备。
三.实验设备及其连接 1.PC机 2.飞思卡尔嵌入式实验开发系统
一台
四.实验内容
1.理解并运行样例程序 (1)KL25 SD13-01 EVB板板上的lcd显示Wait
Receiving..Soochow 2013.01. (2)键盘按键数据显示在LCD上面 (3)led上显示0235 2. 设计实验
(1)将键盘按键数据送PC机显示(利用串口调试工具) (2)LED上显示2016
PC机显示的内容
六.实验报告要求 1.按实验报告格式认真完成实验报告 .实验报告上填写的程序
1)样例中的isr.c和mai.c 2)设计实验中的isr.c和mai.c
SOPC按键控制LED灯亮灭实验报告
课程设计报告设计课题:SOPC按键控制LED灯亮灭按键控制LED灯泡亮灭一、设计任务与要求1.实现按键控制小灯泡的亮灭;2.学习并掌握Quartus II 9.0软件3.学会SOPC和FPGA电路设计方法二、方案设计与论证在Quartus II 9.0软件里利用Nios II完成对软核CPU的设计,设计完成后再搭建外围电路,后在Nios II IDE里完成代码的编写,最后将设计的电路和编写的代码下片后观察实验现象并调试直至成功。
方案一:1.新建一个New Quartus II Project,并命名为led_lab2.选择Cyclone III系列的EP3C25F324C8芯片3.CPU内核的设计:3.1新建一个SOPC Builder System,并命名为lab_led3.2将所要设计的CPU模块添加进来,并选择Nios II/e核心3.3再添加jtag和on-chip memory,并将内存设置为20KB3.4添加两个PIO(并行输入输出),将其中一个设置为Output ports only,并命名为led_pio,用作输出模块,另一个设置为Input ports only,并命名为key_pio,用作输入模块3.5保存好设计编译后无误4.外围电路的设计4.1新建一个Block Diagram/Schematic File文件,并命名为led_lab4.2将上一步设计好的CPU模块添加进来4.3自动生成好管脚后进行编译4.4对输入输出管脚进行分配,完成后再次进行编译5.Nios II代码控制CPU5.1点击Nios II IDE,新建一个lab_led.c文件5.2编写能够实现按键控制LED灯的代码,后编译、调试6.打开SOPC实验箱,将设计好的电路和编写好的代码下片,观察实验现象并调试四、总原理图及子模块结构图1.CPU内核的设计2.外围电路的搭建3.电路管脚的分配4.实验代码的编写及调试五、综合与调试最终实验代码:#include "sys/alt_stdio.h"#include "system.h"#include "altera_avalon_pio_regs.h"#include "alt_types.h"#include<unistd.h>alt_u8 K;int main(void){alt_putstr("\n Lab2_2 - LED key polling!\n");while(1){K= IORD_ALTERA_A VALON_PIO_DATA(KEY_PIO_BASE);IOWR_ALTERA_A VALON_PIO_DA TA(LED_PIO_BASE,K); usleep(10000);}return 0;}六、结果性能分析当按下KEY1后第一个LED点亮,松开后第一个LED熄灭当按下KEY2后第二个LED点亮,松开后第二个LED熄灭当按下KEY3后第三个LED点亮,松开后第三个LED熄灭当按下KEY4后第四个LED点亮,松开后第四个LED熄灭七、设计作品图片[八、结论与心得]因为有了前两次实验的经验和教训,所以这次实验并没有遇到多少障碍。
微机原理键盘控制与显示实验报告
微机原理键盘控制与显⽰实验报告专业:电⽓⼯程及其⾃动化姓名: _________实验报告学号: _______⽇期: ___ _____地点: ____ ________课程名称: ________微机原理(实验)___________指导⽼师: ____徐习东 _______成绩:__________________实验名称: ______ 键盘控制与显⽰_______实验类型: _____软件实验 ______同组学⽣姓名:__________⼀、实验⽬的和要求(必填)⼆、实验内容和原理(必填)三、主要仪器设备(必填)四、操作⽅法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、⼼得【实验⽬的】1.通过实验掌握 TMS320F2812 通⽤输⼊ / 输出管脚直接控制外围设备的⽅法2.了解发光⼆极管的控制编程⽅法。
3.了解 SPI 的使⽤。
4.了解如何使⽤ GpioA ⼝进⾏数据的锁存5.通过实验掌握 TMS320F2812 的扩展端⼝接收外围设备信息的⽅法6.了解键盘的使⽤原理及编程⽅法【实验内容】1.按键显⽰程序,对按键记录次数,以⼆进制显⽰在16 个 LED 上。
2.定时器编程,并⽤按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812数字信号处理器与学⽣⽤集成板。
【实验步骤】1.撰写代码2.调试代码3.实现功能【实验代码】⼀、定时器①宏定义和全局变量定义然后同时定义了全局变量,包括时、分、分析:这段代码是初始宏定义,⽤于定义按键对应的编码与地址,秒,按键编码, LED 编码和控制位。
②共阳字形码分析:由于这次实验要⽤到数码管,所以我们要定义⼀个数码管共阳端字形码,使每⼀个代码对应⼀种显③SPI 初始化⼦程序分析:这⼀段是本次实验的重点,就是SPI 初始化。
1 )SPICCR :⽤于控制SPI 的状态,上下降沿发送,还有⼏位的数据。
其中第7 位,即 SPICCR.6 是控制SPI 在上下沿发送, 1 代表下降沿,2 代表上升沿;第8 位,即 SPICCR.7 是控制复位的,0 代表为复位状态;低 4 位控制数据长度,长度等于n+1 。
基于DSP芯片的键盘控制LCD显示
****大学***********学院《课程设计报告》题目:基于DSP芯片的键盘控制LCD显示专业:通信工程班级:一班姓名: *******学号: ************指导教师: ******年月日信息与电气工程学院课程设计任务书20 15 —20 16 学年第一学期专业:学号:姓名:课程设计名称: DSP原理与应用设计题目:基于DSP芯片的键盘控制LCD显示完成期限:自 2015 年 12 月 21 日至 2015 年 12 月 25 日共 1 周设计依据、要求及主要内容(可另加附页):一、设计依据通过4 * 4的行列式键盘,TMS320F2407的8个I / O口与之相连,用扫描法来进行按键识别。
使行线一直处于高电平,在某一时刻只让一条列线处于低电平,而其余列线处于高电平。
那么按下键的那列电平就会拉成低电平,判断出哪列为低电平就可以判断出按键号码。
二、设计要求1.要求正确掌握CCS2000的安装和调试方法,以及DSP实验箱下载调试的步骤;2.要求正确掌握键盘信号的输入和DSP I/O的使用;3.要求键盘信号之间的时序能正确识别和引入。
三、主要内容1.根据行列式键盘的特点,进行键盘控制系统的整体研究与设计;2.熟练掌握CCS2000软件的使用,并能够按要求对设计的电路进行仿真,实现相应的功能;3.LCD液晶显示屏实时显示按键的信息;4.采用软件编程的方法实现按键信息的提取和显示。
指导教师(签字):批准日期:年月日摘要随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。
电子行业的发展从长远来看很重要,但最主要的还是科技问题。
行列式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。
是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。
行列式键盘乃是当今使用最为广泛的键盘模式之一,该系统以8个端口连接控制4*4个按键,即时在LCD数码管上。
键盘显示控制器实验课程设计
键盘显示控制器实验课程设计一、引言键盘显示控制器是一种常见的控制器设备,用于输入和输出设备之间的信息传输。
本文旨在设计一个键盘显示控制器的实验课程,让学生通过实际操作了解键盘显示控制器的原理和应用,并培养其实验实践能力。
二、实验课程设计1. 实验目的本实验旨在使学生掌握以下知识和技能:•了解键盘显示控制器的基本原理;•掌握键盘输入和显示输出的相关接口和信号;•能够使用键盘显示控制器进行输入和输出操作;•培养学生的动手能力和实验思维能力。
2. 实验器材和软件•实验器材:键盘、显示屏、微控制器开发板、连接线等;•实验软件:Keil C 编译器、仿真调试工具等。
3. 实验内容3.1 实验准备1.搭建实验平台:将键盘、显示屏和微控制器开发板连接起来;2.配置开发环境:安装 Keil C 编译器并配置正确的编译器和目标设备。
3.2 实验步骤3.2.1 键盘输入1.编写键盘初始化函数:配置键盘接口和相关的中断设置;2.实现键盘扫描函数:通过轮询或中断方式扫描键盘的输入;3.设计键盘输入处理函数:根据键盘输入的信息进行相应的处理。
3.2.2 显示输出1.编写显示屏初始化函数:配置显示屏接口和相关的参数;2.实现显示输出函数:将需要显示的信息发送到显示屏上。
3.2.3 整合测试1.编写主函数:初始化键盘和显示屏,并进入主循环;2.在主循环中实现键盘输入和显示输出的交互操作;3.进行实验现场测试和调试,确保键盘输入和显示输出正常工作。
4. 预期结果通过本实验的设计和实施,预期达到以下结果:•学生能够正确搭建实验平台,并能进行相关的配置和调试;•学生能够编写键盘输入和显示输出的相关函数;•学生能够编写主函数,实现键盘输入和显示输出的交互操作;•学生能够进行实验现场测试和调试,确保键盘输入和显示输出正常工作。
三、实验总结通过本次实验课程的设计和实施,学生们对键盘显示控制器的原理和应用有了更深入的了解,并通过实际操作培养了自己的实验实践能力。
微机原理键盘控制与显示实验报告
课程名称: __________ 微机原理(实验) _________________ 指导老师: _徐习东 _______________ 成绩: _______________________ 实验名称: _________ 键盘控制与显示 ___________ 实验类型: _______ 软件实验 __________ 同组学生姓名: _______________ 七、讨论、心得【实验目的】1. 通过实验掌握TMS320F2812 通用输入/输出管脚直接控制外围设备的方法2. 了解发光二极管的控制编程方法。
3. 了解SPI 的使用。
4. 了解如何使用GpioA 口进行数据的锁存5. 通过实验掌握TMS320F2812 的扩展端口接收外围设备信息的方法6.了解键盘的使用原理及编程方法【实验内容】1. 按键显示程序,对按键记录次数,以二进制显示在16个LED 上。
2.定时器编程,并用按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812 数字信号处理器与学生用集成板。
【实验步骤】1. 撰写代码2. 调试代码3.实现功能別f 尹丿占实验报告专业: 姓名:学号: 日期: 地点:电气工程及其自动化 一、实验目的和要求(必填) 三、主要仪器设备(必填) 五、实验数据记录和处理 二、实验内容和原理(必填) 四、操作方法和实验步骤 六、实验结果与分析(必填)【实验代码】 、疋时器① 宏定义和全局变量定义R 犍蛊控制曲钟nclude "DSP281x_De (vic« .h" 卍枝键对应值Uint16 LEEReg;UintlS KeyReg 1:Uitit321 = 0;Uint16Ctrl ; int 16Sec=0;1 Tltl6M IL =0;int 16 Hor-Cl ; UintlSLight[3];秒,按键编码,LED 编码和控制位。
② 共阳字形码O K jOOO.Oxf 900, OxA4OO J .0iBDOO,0x9900,0x5200, OMfl^OD^OxFSOD, O K B000y0x9000.0zBBOO,Oz3300,OxcEDO,Oxa IDO,OxB&OD^OssEciOO , 0x5G (J0,Uxbf DU,Osa7UQ,OzffOa,0x4000,CK79Da,DM240D r Dx^ 000, 0 itl900, O K ISOQ, 0s DEOO,Oz 7000,030000,0x1000);分析:由于这次实验要用到数码管,所以我们要定义一个数码管共阳端字形码,使每一个代码对应一种显 示状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十二S O P C的键盘与L C D显示控制实
验
实验3 SOPC的键盘与LCD显示控制实验
【实验目的】
1.熟悉矩阵键盘的工作特性。
2.学会使用VHDL语言描述一个矩阵键盘的电路功能。
3.了解字符型液晶显示控制器。
4.掌握1602液晶的操作方法。
5.学会使用VHDL语言描述一个1602液晶控制的电路功能。
【实验内容】
1.使用VHDL语言描述一个矩阵键盘的电路功能,程序实现的功能是测试
4X4矩阵按键;具体的键值通过FPGA核心板上的数码管来显示。
如按下K1,数码管就显示0,按下K16,数码管就显示F。
2.使用VHDL语言描述一个1602液晶显示屏控制的电路功能,使1602液晶
屏可以显示你自己的名字(拼音)。
【实验器材】
1. HS-EDA5.1实验箱
2.USB-BLASTER烧写器
3. Quartus II 8.0
【实验原理】
本实验需要使用VHDL语言描述一个矩阵键盘以及1602液晶控制的电路功能,下面我们先来介绍一下矩阵键盘和1602液晶显示屏。
1.矩阵键盘:键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器
实现,并产生键编码号或键值的称为编码键盘,如计算机键盘.而靠软件编程来识别的称为非编码键盘;在一般常用系统中,用的最多的是非编码键盘。
也有用到编码键盘的。
非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。
矩阵键盘结构图如上图
矩阵键盘的读取都经历一个扫描的过程,程序先将L1输出低电平,,即端口输入11111110,
即十六进制0FEH,然后读回端口的数据,此时如果 L1 上的四个按键没有按下,读到的P0 口的数据还是11111110,如按下了按键 8,H2 便被拉成低电平,读回的端口数据11011110(十六进制:0DEH),程序就根据读回的数据来判断某个按键按下了,如果没有按键按下,则再将 L2 输出低电平(P0=11111101,十六进制:0FDH),然后也一样读回端口数据,判断有按键按下否,如此下去,到 L4 的完成,为一个扫描过程。
刚才按键 8 按下读回的数值是 0DEH,如果做为简单的程序,可以直接用0DEH 来认定是 8 键的键值码,也可以认为它是一个无名键的键值码,所以上面写的 8 不是特定的,而只是序号,你怎么排列键序都可以,甚至认为是游戏手柄的上下左右出拳踢腿键都没问题,问题是按下某下按键后,你知道读回的键值是多少就可以了,键值才有用。
2.1602液晶显示屏:工业字符型液晶,能够同时显示16x02即32个字符,每个字符是5X7的点阵。
1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,实验可以用ASCII码直接赋值。
管脚说明如下图
时序图
地址映射图
主要时序结构如下图:
【实验步骤】
1.打开Quartus II 软件,建立一个key44的工程.。
并将keyboarddeco.v和
led_disp的文件加入到工程中,并新建一个Block Diagram的文件。
(软件代码过长,程序附在主机上)
2.在Project Navigator框中选择file栏,右键点击keyboarddeco.v选择create
symbol files for current file生成symbol,也对led_disp.vhdl生成symbol,生成以后我们就能在图形界面编程时就能选择我们自定义的接口程序。
如
图:
3.在图形编程中编译如下:
(图中的管脚标注是定义pins后编译在图中生成)
4.点击processing/start compilation编译文件。
定义管脚如下:
5.点击processing/start compilation编译生成文件,下载至FPGA,具体的键值
就能通过板上的数码管来显示。
按下K1就显示0,K2就显示1。
6.建立一个新的工程,并将div_256.v,div16.v ,ps2_keyboard.v和lcd.v文件
加入工程,并create symbol files for current file。
7.建立图形编程界面如下:
8.编译并定义管脚如下图:
9.编译生成文件,下载至FPGA,ps/2键盘输入,稍等可以在lcd1602上显示
输入的字符。
【实验要求】
1.掌握4x4矩阵键盘的扫描方法。
2.掌握1602的操作方式。
3.进一步学习VHDL语言编写程序。
4.完成思考题。
【思考题】
1.分析电路原理图,思考如果要用SOPC板上的ps/2接口,应该如何定义
pins?
2.尝试采用Verilog HDL语言编写程序。
(选做)。