#include <LPC213X.H>
#define Hang 16
#define Lie 20
#define SDI_BIT (6)
#define SRCLK_BIT (4)
#define RCLK_BIT (19)
#define G_BIT (18)
#define HC595_SDI (1 << SDI_BIT)
#define HC595_SRCLK (1 << SRCLK_BIT)
#define HC595_RCLK (1 << RCLK_BIT)
#define HC595_G (1 << G_BIT)
unsigned char const LEDSEG[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00}; //共阴数码管段码,
unsigned char const LEDDEG[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//共阴数码管位选
unsigned char Display_Buffer[] = {1,2,3,4,5,6,7,8};//显示缓存
void Send_Two_byte(unsigned int Data);
void Delay_us(unsigned long int temp);
int keyscan(void);
void HardwareInit(void);
int main (void)
{
unsigned char i;
unsigned char KyNum = 0;
HardwareInit();
while (1)
{
KyNum = keyscan();
if( (KyNum >= 0) & ( KyNum < 16 ))
{
Display_Buffer[0]=KyNum/10;
Display_Buffer[1]=KyNum%10;
}
for(i=0;i<2;i++)
{ Send_Two_byte((LEDDEG[i]<< 8)+LEDSEG[Display_Buffer[i]]);
Delay_us(1000);
}
}
}
void HardwareInit(void)
{
IO0DIR |= HC595_SDI;
IO0DIR |= HC595_SRCLK;
IO0DIR |= HC595_RCLK;
IO0DIR |= HC595_G;
IO1DIR |= ( 0xf0 << 16 ); //8 9 10 11脚输入 , 12 13 14 15脚输出
}
void Send_Two_byte(unsigned int Data)
{ long i;
IO0CLR = (IO0CLR & ~(1 << G_BIT))|(1 << G_BIT);
for(i=0;i<16;i++)
{ if((Data & (1 << 15)) == (1 << 15))
IO0SET = (1 << SDI_BIT);
else
IO0CLR = (1 << SDI_BIT);
Delay_us(1);
IO0SET = (1 << SRCLK_BIT);
Delay_us(1);
IO0CLR = (1 << SRCLK_BIT);
Delay_us(1);
Data <<= 1;
}
IO0SET = (1 << RCLK_BIT);
Delay_us(1);
IO0CLR = (1 << RCLK_BIT);
//IO0SET = (1 << G_BIT); //屏蔽此句数码管的亮度最亮
}
void Delay_us(unsigned long int temp)
{ temp = temp*10;
while(temp > 0)
{ temp--;
}
}
int keyscan(void)
{
unsigned char H_code[4]={0x0e,0x0d,0x0b,0x07};
unsigned long int input=0;
unsigned char i; //行
unsigned char j; //列
IO1CLR |= 0x0f<<Lie; // 设置管脚连接GPIO
Delay_us(1000);
input = ((IO1PIN & ( 0x0f<<Hang ))>>Hang);
for( i=0 ; i<4 ;i++ )
{
if( H_code[i] == input )break;
if(i>=3)return -1;
}
for( j=0 ; j<4 ; j++ )
{
IO1SET |= H_code[j]<<Lie;
input = ((IO1PIN & ( 0x0f<<Hang ))>>Hang);
if( input == H_code[i] )
{
IO1CLR |= 0x0f<<Lie; // 设置管脚连接GPIO
while( (IO1PIN & ( 0x0f<<Hang )) != 0x0f0000 ); //等待按键松开
return (4*i+(3-j));
}
IO1CLR |= (0xff<<Hang);
Delay_us(500);
}
return -1;
}
GPIO_DIG.rar_GPIO_DIG_dig
版权申诉
108 浏览量
2022-09-24
16:32:05
上传
评论 1
收藏 1KB RAR 举报
我虽横行却不霸道
- 粉丝: 72
- 资源: 1万+
最新资源
- STM8L101F3P6单片机+CC1100模块433M遥控器设计硬件(原理图+PCB)工程文件.zip
- 上传下载铁人下载系统 Liuxing 1.0-liuxing1.0.rar
- 南京邮电大学数学实验实力雄厚,凭借其优秀的师资力量、丰富的实践教学资源和卓越的科研成果,成为国内一流的数学实验教学和科研基地
- 【火爆朋友圈的今天吃什么源码 v1.0】随机的为用户带来每一天的用餐选择和推荐.rar
- MPU6050中文版数据手册
- 上传下载手机电影下载-mobiledy.rar
- 响应式旅游网站源码下载 马尔代夫旅游网站.rar
- CMS小涴熊漫画连载系统漫画网站源码 带采集API.rar
- 福袋点点.apk
- 基于STM32的电子秤采用0.96寸OLED显示UI界面源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0