实验5键盘输入与数码管显示实验.docx
- 文档编号:8079878
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:10
- 大小:81.96KB
实验5键盘输入与数码管显示实验.docx
《实验5键盘输入与数码管显示实验.docx》由会员分享,可在线阅读,更多相关《实验5键盘输入与数码管显示实验.docx(10页珍藏版)》请在冰豆网上搜索。
实验5键盘输入与数码管显示实验
班级学号姓名实验组别
实验日期室温报告日期成绩
报告内容:
(目的和要求、原理、步骤、数据、计算、小结等)
实验名称:
实验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"Numshow.h"
#include"key.h"
#defineSPI_IOCON0x003809d0//0x000003d0//SPI接口的IO设置字
/****************************************************************************
*名称:
main()
*功能:
数据送入数码管显示
****************************************************************************/
intmain(void)
{
uint8key_val=0,dis;
uint8str[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"
#defineSPI_CS0x00000100//P0.8
#defineSPI_CS11<<11//P0.11
#defineSPI_DATA0x00000040//P0.6
#defineSPI_DATA10x00000080//P0.7
#defineSPI_CLK1<<4//P0.4
/****************************************************************************
*名称:
DelayNS()
*功能:
长软件延时
*入口参数:
dly 参数越大延时越久
*出口参数:
无
****************************************************************************/
voidDelayNS(uint32dly)
{
uint32i;
for(;dly>0;dly--)
for(i=0;i<5000;i++);
}
/****************************************************************************
*名称:
HC595_SendDat()
*功能:
向74HC595发送一个字节的数据
*入口参数:
data 要发送的数据
*出口参数:
无
*说明:
高位数据先发送
****************************************************************************/
voidHC595_SendDat(uint8dat)
{
uint8i;
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;
elseIOCLR=SPI_DATA;
dat<<=1;
IOSET=SPI_CLK;//SPI_CLK=1
}
IOSET=SPI_CS;//SPI_CS=1,输出显示数据
}
voidHC595_SendDat1(uint8dat)
{
uint8i;
IOCLR=SPI_CS1;//SPI_CS=0
for(i=0;i<8;i++)//发送8位数据
{
IOCLR=SPI_CLK;//SPI_CLK=0
if((dat&0x80)!
=0)IOSET=SPI_DATA1;
elseIOCLR=SPI_DATA1;
dat<<=1;
IOSET=SPI_CLK;//SPI_CLK=1
}
IOSET=SPI_CS1;//SPI_CS=1,输出显示数据
}
/****************************************************************************
*名称:
Num_show()
*功能:
显示收到的数据
*入口参数:
str[],要显示的数据
****************************************************************************/
intNum_show(uint8str[])
{
constuint8DISP_TAB1[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80};
constuint8DISP_TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//0--f暗亮GPUr-
uint8i;
//while
(1)
{
for(i=0;i<8;i++)
{
HC595_SendDat(DISP_TAB[str[i]]);
HC595_SendDat1(DISP_TAB1[i]);
DelayNS
(1);
HC595_SendDat(0xff);
HC595_SendDat1(DISP_TAB1[i]);
}
}
return(0);
}
#include"config.h"
#include"Numshow.h"
#defineSPI_CS21<<21//P0.21
#defineSPI_DATA21<<20//P0.20
#defineSPI_CLK21<<19//P0.19
#defineKEY11<<17//P0.17
#defineKEY21<<18//P0.18
/****************************************************************************
*名称:
HC595_SendDat2()
*功能:
向74HC595发送一个字节的数据
*入口参数:
data 要发送的数据
*出口参数:
无
*说明:
高位数据先发送
****************************************************************************/
voidHC595_SendDat2(uint8dat)
{
uint8i;
IOCLR=SPI_CS2;//SPI_CS2=0
for(i=0;i<8;i++)//发送8位数据
{
IOCLR=SPI_CLK2;//SPI_CLK2=0
if((dat&0x80)!
=0)IOSET=SPI_DATA2;
elseIOCLR=SPI_DATA2;
dat<<=1;
IOSET=SPI_CLK2;//SPI_CLK2=1
}
IOSET=SPI_CS2;//SPI_CS2=1,输出显示数据
}
/****************************************************************************
*名称:
get_key()
*功能:
按下按键取数值
*入口参数:
无
*出口参数:
键值
*说明:
高位数据先发送
****************************************************************************/
uint8get_key(void)
{
uint8key_value=16,i,j;
uint8k1[8]={0,1,2,3,4,5,6,7};
uint8k2[8]={8,9,10,11,12,13,14,15};
constuint8DISP_TAB2[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
for(i=0;i<8;i++)
{
HC595_SendDat2(DISP_TAB2[i]);//扫描
if((IOPIN&KEY1)==0)
{DelayNS(10);
if((IOPIN&KEY1)==0)
{while((IOPIN&KEY1)==0);
key_value=k1[i];
break;
}
}
}
if(key_value==16)
{
for(j=0;j<8;j++)
{
HC595_SendDat2(DISP_TAB2[j]);//扫描
if((IOPIN&KEY2)==0)
{DelayNS(10);
if((IOPIN&KEY2)==0)
{
while((IOPIN&KEY2)==0);
key_value=k2[j];
break;
}
}
}
}
returnkey_value;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 键盘输入 数码管 显示