標(biāo)題:
單片機(jī)程序 16個按鍵+1個數(shù)碼管+Uart通信
[打印本頁]
作者:
wukouyyq
時間:
2022-4-17 16:17
標(biāo)題:
單片機(jī)程序 16個按鍵+1個數(shù)碼管+Uart通信
/*此函數(shù)為按鍵發(fā)送 ,同時在數(shù)碼管上顯示
/*功能:單片機(jī)向PC發(fā)送按鍵字符,0-9 英文
// 上下左右對錯,U,D,L,R,Y,N
// 按一下,發(fā)送一個,不按不發(fā)送,
// 長按一直發(fā)送
// 數(shù)碼管上顯示0-9 ABCDEF
//日期:2022-4-14AM
***********************************************/
#include <reg52.h>
#include "key16-2.h"
typedef unsigned int u16;
sbit led=P2^2;
u8 temp,n;
void delay(u16 n)
{
while(n--);
}
void UART_init(void)
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
//ES = 1;
//EA = 1;
}
void Uart_send(u8 dat)
{
SBUF = dat;
while(!TI);
}
main()
{
UART_init();
led=0;
while(1)
{
temp=key_scan();
if(temp!=0xff)
{
Uart_send(temp);
switch (temp)
{
case 'Y': temp=11;break;
case 'N': temp=10;break;
case 'L': temp=12;break;
case 'D': temp=13;break;
case 'U': temp=14;break;
case 'R': temp=15;break;
}
P0=~num[temp]; //加“~”是因?yàn)槲业拇a表是共陰數(shù)碼的,而板
delay(30000); //子上是共陽的
}
}
}
復(fù)制代碼
#ifndef _KEY16_H_
#define _KEY16_H_
typedef unsigned char u8;
sbit hang1=P1^7;
sbit hang2=P1^6;
sbit hang3=P1^5;
sbit hang4=P1^4;
sbit lie1=P1^3;
sbit lie2=P1^2;
sbit lie3=P1^1;
sbit lie4=P1^0;
u8 code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
u8 key_val=0xff;
void key_delay()
{
u8 x,y;
for(x=200;x>0;x--)
for(y=220;y>0;y--);
}
u8 key_scan()
{
hang1=0;
hang2=1;
hang3=1;
hang4=1;
if(lie1==0) //right 15
{
key_delay();
if(lie1==0)
{
return 'R'+'\0';
}
while(lie1==0);
}
if(lie2==0) //up 14
{
key_delay();
if(lie2==0)
{
return 'U'+'\0';
}
while(lie2==0);
}
if(lie3==0) //down 13
{
key_delay();
if(lie3==0)
{
return 'D'+'\0';
}
while(lie3==0);
}
if(lie4==0) //left 12
{
key_delay();
if(lie4==0)
{
return 'L'+'\0';
}
while(lie4==0);
}
hang1=1;
hang2=0;
hang3=1;
hang4=1;
if(lie1==0) //ok
{
key_delay();
if(lie1==0)
{
return 'Y'+'\0';
}
while(lie1==0);
}
if(lie2==0) //9
{
key_delay();
if(lie2==0)
{
return 9;
}
while(lie2==0);
}
if(lie3==0) //3
{
key_delay();
if(lie3==0)
{
return 3;
}
while(lie3==0);
}
if(lie4==0) //6
{
key_delay();
if(lie4==0)
{
return 6;
}
while(lie4==0);
}
hang1=1;
hang2=1;
hang3=0;
hang4=1;
if(lie1==0) //0
{
key_delay();
if(lie1==0)
{
return 0;
}
while(lie1==0);
}
if(lie2==0) //8
{
key_delay();
if(lie2==0)
{
return 8;
}
while(lie2==0);
}
if(lie3==0) //2
{
key_delay();
if(lie3==0)
{
return 2;
}
while(lie3==0);
}
if(lie4==0) //5
{
key_delay();
if(lie4==0)
{
return 5;
}
while(lie4==0);
}
hang1=1;
hang2=1;
hang3=1;
hang4=0;
if(lie1==0) //ESC
{
key_delay();
if(lie1==0)
{
return 'N'+'\0';
}
while(lie1==0);
}
if(lie2==0) //7
{
key_delay();
if(lie2==0)
{
return 7;
}
while(lie2==0);
}
if(lie3==0) //1
{
key_delay();
if(lie3==0)
{
return 1;
}
while(lie3==0);
}
if(lie4==0) //4
{
key_delay();
if(lie4==0)
{
return 4;
}
while(lie4==0);
}
return 0xff;
}
#endif
復(fù)制代碼
作者:
wukouyyq
時間:
2022-4-17 16:26
定義按鍵和按鍵掃描函數(shù)在include文件里
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1