?? a.c
字號:
/*-------------說明--------------------------*/
//P0液晶數據
//P1矩陣鍵盤
//P2液晶功能端
/*-----------------------------------------------*/
#include <stdio.h>
#include <reg51.h>
#include<absacc.h>
#include<intrins.h>
unsigned char k=' ';
sbit rs = P1^0; //1=數據; 0=指令;
sbit rw = P1^1; //1=讀; 0=寫;
sbit e = P1^2; //1=使能;
#define PA XBYTE[0x1FFC]
#define PB XBYTE[0x1FFD]
#define PC XBYTE[0x1800]
#define COM XBYTE[0x1C00]
#define LCD XBYTE[0x2FFF]
#define unchar unsigned char
#define unint unsigned int
/*-------------鍵盤去抖動延時--------------------------*/
void delay1(void)
{
unsigned char i;
for(i=0;i<200;i++)
{}
}
/*-------------鍵盤掃描--------------------------*/
unsigned char keyscan(void)
{
unsigned char code_h;
unsigned char code_l;
COM=0x88;
PC=0xF0;
if((PC&0xF0)!=0xf0)
{
delay1();
if((PC&0xF0)!=0xf0)
{
code_h=0xfe;
while((code_h&0x10)!=0)
{
PC=code_h;
if((PC&0xF0)!=0xf0)
{
code_l=(PC&0xf0)|0x0f;
return((~code_h)+(~code_l));
}
else
code_h=(code_h<<1)|0x01;
}
}
}
return(0);
}
/*-------------鍵盤數字識別--------------------------*/
unsigned char identify(void)
{
unsigned char a;
a=keyscan();
switch(a)
{
case 0x11:k='1';break;
case 0x21:k='5';break;
case 0x41:k='9';break;
case 0x81:k='C';break;
case 0x12:k='2';break;
case 0x22:k='6';break;
case 0x42:k='0';break;
case 0x82:k='D';break;
case 0x14:k='3';break;
case 0x24:k='7';break;
case 0x44:k='A';break;
case 0x84:k='E';break;
case 0x18:k='4';break;
case 0x28:k='8';break;
case 0x48:k='B';break;
case 0x88:k='F';break;
default:break;
}
return(k);
}
/*-------------測忙延時--------------------------*/
void delay(unsigned char i) //225不穩定,確保安全230-250 約0.5ms
{
while(--i);
}
/*---------------寫數據------------------------*/
lcd_write_data(unsigned char c)
{
delay(250);
rs=1;
rw=0;
LCD=c;
e=1;
_nop_();
_nop_();
e=0;
}
/*---------------寫指令------------------------*/
lcd_write_comm(unsigned char c)
{
delay(250);
rs=0;
rw=0;
LCD=c;
e=1;
_nop_();
_nop_();
e=0;
}
/*------------------初始化-----------------*/
void init_lcd (void)
{
lcd_write_comm (0x30); //基本指令集
lcd_write_comm (0x01); //清屏,地址指針指向00H
lcd_write_comm (0x06); //光標的移動方向
lcd_write_comm (0x0c); //開顯示,關游標
}
/************************************************************************************************
lcd_write_sentence函數:
指定起始行,起始列,連續寫入字符串;注意:字符串長度必須小于8;行:1-4;列:0-7
*************************************************************************************************/
void lcd_write_sentence(unchar row,unchar col,unchar *string,unchar lenth)
{
unchar i=0;
lcd_write_comm (0x30);
switch(row)
{
case 1:
lcd_write_comm(0x80+col); //第一行
break;
case 2:
lcd_write_comm(0x90+col); //第二行
break;
case 3:
lcd_write_comm(0x88+col); //第三行
break;
case 4:
lcd_write_comm(0x98+col); //第四行
break;
default:
lcd_write_comm(0x80); //缺省為第一行
break;
}
while(lenth-->0)
{
lcd_write_data(string[i]); //寫入字符串
i++;
}
}
/*------------------主程序--------------------*/
void main ()
{
unsigned char buf1[20],i;
init_lcd ();
while (1)
{
for(i=0;i<3;i++)
{
buf1[i]=identify();
}
lcd_write_sentence(1,0,"鍵值:",6);
lcd_write_sentence(2,0,buf1,3);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -