实验5键盘输入与数码管显示实验.docx

上传人:b****6 文档编号:8079878 上传时间:2023-01-28 格式:DOCX 页数:10 大小:81.96KB
下载 相关 举报
实验5键盘输入与数码管显示实验.docx_第1页
第1页 / 共10页
实验5键盘输入与数码管显示实验.docx_第2页
第2页 / 共10页
实验5键盘输入与数码管显示实验.docx_第3页
第3页 / 共10页
实验5键盘输入与数码管显示实验.docx_第4页
第4页 / 共10页
实验5键盘输入与数码管显示实验.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验5键盘输入与数码管显示实验.docx

《实验5键盘输入与数码管显示实验.docx》由会员分享,可在线阅读,更多相关《实验5键盘输入与数码管显示实验.docx(10页珍藏版)》请在冰豆网上搜索。

实验5键盘输入与数码管显示实验.docx

实验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;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1