实验5键盘输入与数码管显示实验Word格式.docx
《实验5键盘输入与数码管显示实验Word格式.docx》由会员分享,可在线阅读,更多相关《实验5键盘输入与数码管显示实验Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
按键8根行线接74HC595的数据输出端,2根列线分别接LPC2103总线接口模块的P0.17,P0.18.同时在列线上接入+3.3V电源和上拉电阻以确保在没有信号输入的情况下列线给处理器送入的是高电平信号。
2.仿真器的设置:
一般选用JTAG调试,若使用RelInFlash生成目标时,编译连接生成的目标代码会将芯片加密。
此时调试无法继续,须将硬件调成ISP模式进行全片擦除。
3.运行程序:
keytest.hex
4.接通电源,按下按键并观察实验板上数码管的变化。
五、流程图
六、实验程序
#include"
config.h"
Numshow.h"
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);
}
#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
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)
IOCLR=SPI_CS1;
{
=0)IOSET=SPI_DATA1;
elseIOCLR=SPI_DATA1;
IOSET=SPI_CS1;
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-
//while
(1)
i++)
HC595_SendDat(DISP_TAB[str[i]]);
HC595_SendDat1(DISP_TAB1[i]);
DelayNS
(1);
HC595_SendDat(0xff);
}
return(0);
#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()
voidHC595_SendDat2(uint8dat)
IOCLR=SPI_CS2;
//SPI_CS2=0
IOCLR=SPI_CLK2;
//SPI_CLK2=0
=0)IOSET=SPI_DATA2;
elseIOCLR=SPI_DATA2;
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;
HC595_SendDat2(DISP_TAB2[i]);
//扫描
if((IOPIN&
KEY1)==0)
{DelayNS(10);
if((IOPIN&
{while((IOPIN&
KEY1)==0);
key_value=k1[i];
break;
if(key_value==16)
for(j=0;
j<
j++)
HC595_SendDat2(DISP_TAB2[j]);
KEY2)==0)
{
while((IOPIN&
KEY2)==0);
key_value=k2[j];
break;
}
returnkey_value;