led_keyboard.c
来自「自己的平时一些制作 现在整理一下 与大家一起分享」· C语言 代码 · 共 115 行
C
115 行
#include <reg51.h>
/******led 接口描述******/
//P0--->(a-g,dot) 显示
//选择使能控制段
//P2^3--->使能左第一个数码管 P2^2--->左第二个数码管
//P2^1--->左第三个数码管 P2^0--->左第四个数码管
/*********显示数据表 对应0-9 ,a-f*************/
unsigned char code table[16]={0x3f,6,0x5b,0x4f,
0x66,0x6d,0x7d,7,0x7f,0x6f,0x77,
0x7c,0x58,0x5e,0x79,0x71};
/**********显示选择表**********************/
unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};
/*****定义一个数组变量用于存放将要显示的值*******/
unsigned char d[4]={1,1,1,1}; //随意放入一些初始值
/*****定义一个全局变量 number******/
unsigned char number; //number 表示第几个显示 0-3
/******延时程序********/
void delay (dy)
{
while(--dy);
}
unsigned char getkey (void)
{
}
/******读取按键子程序 getkey()*************/
unsigned char getkey (void)
{ unsigned char k,tem,keytem;
keytem=0;
tem=P2 & 0xf0; //第一次读取按键值
if(tem!=0xf0) //如果继续,则表示有按键按下
{
for(k=0;k<40;k++)
delay(250); //延时一段时间
tem=P2 & 0xf0; //再次读取按键值
if(tem!=0xf0)
{ if(tem==0x70) keytem=1; //表示左第一个按键按下
else if(tem==0xb0) keytem=2; //表示左第二个按键按下
else if(tem==0xd0) keytem=3; //表示左第三个按键按下
else if(tem==0xe0) keytem=4; //表示左第四个按键按下
}
}
while(tem!=0xf0) tem=P2 & 0xf0; //等待按键释放
return(keytem); //返回按键值
}
/********定时器0中断服务程序***************/
void timer0(void) interrupt 1
{
TR0=0; //停止定时器0
TH0=(65536-1000)/256; //通过定时器定时延时大约1ms左右
TL0=(65536-1000)%256;
number=(number+1)%4;
P2=digit[number]; //选择第number个数码管显示
P0=table[d[number]]; //查表显示要显示的值
TR0=1; //启动定时器0
}
/******定时器初始化函数**********/
void Init_Timer (void)
{
TMOD=0x01; //
TH0=(65536-1000)/256; //通过定时器定时延时大约1ms左右
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
}
/********主函数************/
//效果就是用定时器服务程序的实现数码管动态..
//..显示且按键后对应的数码管数据加1
/*************************/
void main (void)
{
unsigned char keyboard; //存放按键值
Init_Timer(); //定时器初始化
while(1)
{
keyboard=getkey();
if (keyboard==1)
{
d[0]=(d[0]+1)%10;
}
else if(keyboard==2)
{
d[1]=(d[1]+1)%10;
}
else if(keyboard==3)
{
d[2]=(d[2]+1)%10;
}
else if(keyboard==4)
{
d[3]=(d[3]+1)%10;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?