实验5键盘输入与数码管显示实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级学号姓名实验组别
实验日期室温报告日期成绩
报告内容:(目的和要求、原理、步骤、数据、计算、小结等)
实验名称:实验5键盘输入与数码管显示实验
一、实验目的
学习键盘工作原理,掌握数据输入输出的方法。
二、实验内容及原理
矩阵键盘扫描原理:由处理器通过行线给某一行按键送入低电平信号,按键在未使用的情况下列线上拉高电平信号,处理器对行线输出相连的I/O口进行扫描,当扫描到低电平信号时证明对应的键被按下。本实验中采用的是2*8键盘,为了减少对处理器芯片I/O接口的直接引用,实验中使用了一片74HC595(U6)用来实验数据串并转换。
三、实验原理图
四、实验步骤
1. 实验连线
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.hex
4. 接通电源,按下按键并观察实验板上数码管的变化。
五、流程图
主程序显示子程序键盘扫描六、实验程序
#include "config.h" #include "Num show.h" #include "key.h"
#define SPI_IOCON 0x003809d0//0x000003d0//SPI 接口的IO设置字
/**************************************************************************** * 名称:main()
* 功能:数据送入数码管显示
****************************************************************************/
int main(void)
{
uint8 key_val=0,dis;
uint8 str[8]={0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; PINSEL0=0x00000000;//设置所有引脚连接GPIO PINSEL1=0x00000000;
IODIR=SPI_IOCON; //设置LED为输出其他为输入
//Num_show(str);
while(1)
{
key_val=get_key(); //取键值
if(key_val<16)
{
dis = key_val;
if(dis<10)
{
str[7]=dis;
str[6]=0;
}
else
{
str[6]=1;
str[7]=dis%10;
}
//for(m=0;m<10;m++) //延时显示键值
}
Num_show(str);
//显示改变后的数值
}
return (0);
}
#include "config.h"
#define SPI_CS 0x00000100//P0.8
#define SPI_CS1 1<<11//P0.11
#define SPI_DATA 0x00000040//P0.6
#define SPI_DATA1 0x00000080//P0.7
#define SPI_CLK 1<<4//P0.4
/**************************************************************************** * 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly参数越大延时越久
* 出口参数:无
****************************************************************************/ void DelayNS(uint32 dly)
{
uint32 i;
for(;dly>0;dly--)
for(i=0;i<5000;i++);
}
/**************************************************************************** * 名称:HC595_SendDat()
* 功能:向74HC595发送一个字节的数据
* 入口参数:data要发送的数据
* 出口参数:无
* 说明:高位数据先发送
****************************************************************************/ void HC595_SendDat(uint8 dat)
{
uint8 i;
IOCLR = SPI_CS;//SPI_CS=0
for(i=0;i<8;i++)//发送8位数据
{
IOCLR = SPI_CLK;//SPI_CLK=0
if((dat&0x80)!=0) IOSET = SPI_DATA;
else IOCLR = SPI_DA TA;
dat<<=1;
IOSET = SPI_CLK; //SPI_CLK=1
}
IOSET = SPI_CS; //SPI_CS=1,输出显示数据
}
void HC595_SendDat1(uint8 dat)