📄 key.c
字号:
//============================================================================
//按键测试程序.按下S1-S4,在LCD上分别显示1-4
//实验时短接J17的1,2引脚(LCD电源控制引脚)
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f310.h> // SFR declarations
#include <INTRINS.H>
#include <stdio.h>
sbit key1=P2^1;
sbit key2=P2^2;
sbit key3=P2^3;
sbit key4=P2^6;
unsigned long q;
//--------------------------------
void YJ_Init(void);
void SPI0_Init (void);
void Write_CHAR(unsigned char yjchar);
unsigned char key_in(void);
//-----------------------------------------------------
void delay(void)
{
int a=1000;
while(a!=0)
{
a--;
}
}
/*----------------------------------------------------*/
//按键连接到p2.0、p2.1、p2.2、P2.3,均为开漏输出
unsigned char key_in(void)
{
XBR0 =0X00;
P2=0xff;
if(key1==0)
{
key1=1;
delay();//延时
if(key1==0)
{
while(key1==0);
XBR0 =0X02;
return(0x32);//返回字符"1"表示按键SW1按下
}
}
if(key2==0)
{
key2=1;
delay();//延时
if(key2==0)
{
while(key2==0);
XBR0 =0X02;
return(0x33);//返回字符"3"表示按键SW1按下
}
}
if(key3==0)
{
key3=1;
delay();//延时
if(key3==0)
{
while(key3==0);
XBR0 =0X02;
return(0x34);//返回字符"3"表示按键SW1按下
}
}
if(key4==0)
{
key4=1;
delay();//延时
if(key4==0)
{
while(key4==0);
XBR0 =0X02;
return(0x31);//返回字符"4"表示按键SW1按下
}
}
XBR0 =0X02;
return(0);//返回0,表示没有按键按下
}
//---------------------------------------------
void main(void)
{
unsigned char data1;
PCA0MD &= ~0x40; // WDTE = 0 (watchdog timer enable bit)
OSCICN |= 0x03; // Set internal oscillator to highest
// setting (24500000)
/* XBR0 = 0x00; // XBAR0: Initial Reset value
XBR1 = 0x40; // XBAR1: Initial Reset value
P2MDOUT = 0xf0; // Output configuration for P2
P3MDOUT = 0x1f; // Output configuration for P3
*/
P0SKIP = 0xFE;
P1SKIP = 0x7F;
XBR0 = 0x02; // Enable SMBus pins
XBR1 = 0x40; // Enable crossbar and weak pull-ups
P0MDOUT = 0xFF; // All P0 pins open-drain output
P2MDOUT = 0xFF;
P3MDOUT |= 0x04; // P3.3 push-pull output
P2 |=0X01;
SPI0_Init ();
YJ_Init();
while(1)
{
data1=key_in(); //读按键
if(data1!=0) //有按键按下,显示对应的按键
{
YJ_Init(); //LCD初始化
//准备送数据
for(q=0;q<1000;q++);
Write_CHAR(data1); //控制LCD
for(q=0;q<1000;q++);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -