《实验5键盘输入与数码管显示实验(共11页).docx》由会员分享,可在线阅读,更多相关《实验5键盘输入与数码管显示实验(共11页).docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上班级 学号 姓名 实验组别 实验日期 室温 报告日期 成绩 报告内容:(目的和要求、原理、步骤、数据、计算、小结等)实验名称:实验5键盘输入与数码管显示实验一、实验目的学习键盘工作原理,掌握数据输入输出的方法。二、实验内容及原理矩阵键盘扫描原理:由处理器通过行线给某一行按键送入低电平信号,按键在未使用的情况下列线上拉高电平信号,处理器对行线输出相连的I/O口进行扫描,当扫描到低电平信号时证明对应的键被按下。本实验中采用的是2*8键盘,为了减少对处理器芯片I/O接口的直接引用,实验中使用了一片74HC595(U6)用来实验数据串并转换。三、实验原理图四、实验步骤1. 实
2、验连线74HC595(U6)时钟控制端接LPC2103总线接口模块的P0.19,数据输入端接总线接口模块的P0.20,选通端接总线接口模块的P0.21。数据输出端接按键行扫描输入端。按键8根行线接74HC595的数据输出端,2根列线分别接LPC2103总线接口模块的P0.17,P0.18.同时在列线上接入+3.3V电源和上拉电阻以确保在没有信号输入的情况下列线给处理器送入的是高电平信号。2仿真器的设置:一般选用JTAG调试,若使用RelInFlash生成目标时,编译连接生成的目标代码会将芯片加密。此时调试无法继续,须将硬件调成ISP模式进行全片擦除。3. 运行程序:keytest.hex4.
3、接通电源,按下按键并观察实验板上数码管的变化。五、流程图六、实验程序#include config.h#include Num show.h#include key.h#define SPI_IOCON 0xd0/0xd0/SPI接口的设置字/* 名称:main()* 功能:数据送入数码管显示*/int main(void) uint8 key_val=0,dis; uint8 str8=0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00; PINSEL0=0x;/设置所有引脚连接GPIO PINSEL1=0x; IODIR=SPI_IOCON; /设置LED为输出
4、其他为输入 /Num_show(str); while(1) key_val=get_key(); /取键值 if(key_val16) dis = key_val; if(dis10) str7=dis;str6=0;elsestr6=1;str7=dis%10;/for(m=0;m10;m+) /延时显示键值 Num_show(str); /显示改变后的数值 return (0);#include config.h#define SPI_CS 0x/P0.8#define SPI_CS1 111/P0.11#define SPI_DATA 0x/P0.6#define SPI_DATA1
5、0x/P0.7#define SPI_CLK 10;dly-) for(i=0;i5000;i+);/* 名称:HC595_SendDat()* 功能:向74HC595发送一个字节的数据* 入口参数:data要发送的数据* 出口参数:无* 说明:高位数据先发送*/void HC595_SendDat(uint8 dat) uint8 i; IOCLR = SPI_CS;/SPI_CS=0 for(i=0;i8;i+)/发送8位数据 IOCLR = SPI_CLK;/SPI_CLK=0 if(dat&0x80)!=0) IOSET = SPI_DATA; else IOCLR = SPI_DAT
6、A; dat=1; IOSET = SPI_CLK; /SPI_CLK=1 IOSET = SPI_CS; /SPI_CS=1,输出显示数据void HC595_SendDat1(uint8 dat) uint8 i; IOCLR = SPI_CS1;/SPI_CS=0 for(i=0;i8;i+)/发送8位数据 IOCLR = SPI_CLK;/SPI_CLK=0 if(dat&0x80)!=0) IOSET = SPI_DATA1; else IOCLR = SPI_DATA1; dat=1; IOSET = SPI_CLK; /SPI_CLK=1 IOSET = SPI_CS1; /SP
7、I_CS=1,输出显示数据/* 名称:Num_show()* 功能:显示收到的数据* 入口参数:str,要显示的数据*/int Num_show(uint8 str) const uint8 DISP_TAB18 = 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80; const uint8 DISP_TAB = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; /0-f 暗 亮 G P U r - uint8 i; / while(1) for(i=0
8、;i8;i+) HC595_SendDat(DISP_TABstri); HC595_SendDat1(DISP_TAB1i); DelayNS(1); HC595_SendDat(0xff); HC595_SendDat1(DISP_TAB1i); return(0);#include config.h#include Num show.h#define SPI_CS2 121/P0.21#define SPI_DATA2 120/P0.20#define SPI_CLK2 119/P0.19#define KEY1 117/ P0.17#define KEY2 118/ P0.18 /*
9、名称:HC595_SendDat2()* 功能:向74HC595发送一个字节的数据* 入口参数:data要发送的数据* 出口参数:无* 说明:高位数据先发送*/void HC595_SendDat2(uint8 dat) uint8 i; IOCLR = SPI_CS2;/SPI_CS2=0 for(i=0;i8;i+)/发送8位数据 IOCLR = SPI_CLK2;/SPI_CLK2=0 if(dat&0x80)!=0) IOSET = SPI_DATA2; else IOCLR = SPI_DATA2; dat=1; IOSET = SPI_CLK2; /SPI_CLK2=1 IOSET
10、 = SPI_CS2; /SPI_CS2=1,输出显示数据/* 名称:get_key()* 功能:按下按键取数值* 入口参数:无* 出口参数:键值* 说明:高位数据先发送*/uint8 get_key(void)uint8 key_value=16,i,j;uint8 k18=0,1,2,3,4,5,6,7;uint8 k28=8,9,10,11,12,13,14,15;const uint8 DISP_TAB28 = 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F; for(i=0;i8;i+) HC595_SendDat2(DISP_TAB2i);/扫描 if(IOPIN&KEY1)=0) DelayNS(10); if(IOPIN&KEY1)=0) while(IOPIN&KEY1)=0); key_value=k1i; break; if(key_value=16) for(j=0;j8;j+) HC595_SendDat2(DISP_TAB2j);/扫描 if(IOPIN&KEY2)=0) DelayNS(10); if(IOPIN&KEY2)=0) while(IOPIN&KEY2)=0); key_value=k2j; break; return key_value;专心-专注-专业