合肥学院第八届电子设计竞赛
sbit EN = P2^6; #define RS_CLR RS=0 #define RS_SET RS=1 #define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0 #define EN_SET EN=1 #define DataPort P0 判忙函数 bit LCD_Check_Busy(void) {
#ifdef CHECK_BUSY DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET;
return (bit)(DataPort & 0x80); #else return 0; #endif }
写入命令函数
void LCD_Write_Com(unsigned char com) {
while(LCD_Check_Busy()); //忙则等待 RS_CLR; RW_CLR; EN_SET;
21
合肥学院第八届电子设计竞赛
DataPort= com; _nop_(); EN_CLR; }
写入数据函数
void LCD_Write_Data(unsigned char Data) {
while(LCD_Check_Busy()); //忙则等待 RS_SET; RW_CLR; EN_SET;
DataPort= Data; _nop_(); EN_CLR; }
清屏函数 void LCD_Clear(void) {
LCD_Write_Com(0x01); DelayMs(5); }
写入字符串函数
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { while (*s) {
LCD_Write_Char(x,y,*s); s ++; x++; } }
22
合肥学院第八届电子设计竞赛
写入字符函数
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) {
LCD_Write_Com(0x80 + x); } else { LCD
}
_Write_Com(0xC0 + x); LCD_Write_Data( Data); }
初始化函数void LCD_Init(void) {
LCD_Write_Com(0x38); /* DelayMs(5);
LCD_Write_Com(0x38); DelayMs(5);
LCD_Write_Com(0x38); DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /* LCD_Write_Com(0x01); /* LCD_Write_Com(0x06); /* DelayMs(5);
LCD_Write_Com(0x0C); /* }
#include \
显示模式设置*/ 显示关闭*/ 显示清屏*/
显示光标移动设置*/ 显示开及光标设置*/ 23
合肥学院第八届电子设计竞赛
void DelayUs2x(unsigned char t) {
while(--t); }
void DelayMs(unsigned char t) {
while(t--) {
//大致延时1mS DelayUs2x(245); } }
DelayUs2x(245);
8.3 矩阵键盘程序
#include
unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法 {
unsigned char cord_h,cord_l;//行列值中间变量 KeyPort=0x0f; //行线输出全为0 cord_h=KeyPort&0x0f; //读入列线值 if(cord_h!=0x0f) //先检测有无按键按下 {
DelayMs(10); //去抖 if((KeyPort&0x0f)!=0x0f) {
24
合肥学院第八届电子设计竞赛
cord_h=KeyPort&0x0f; //读入列线值 KeyPort=cord_h|0xf0; //输出当前列线值 cord_l=KeyPort&0xf0; //读入行线值
while((KeyPort&0xf0)!=0xf0);//等待松开并输出 return(cord_h+cord_l);//键盘最后组合码值 }
}return(0xff); //返回该值 }
unsigned char KeyPro(void) {
switch(KeyScan()) {
case 0x7e:return '1';break;//0 按下相应的键显示相对应的码值 case 0x7d:return '2';break;//1 case 0x7b:return '3';break;//2 case 0x77:return '+';break;//3 case 0xbe:return '4';break;//4 case 0xbd:return '5';break;//5 case 0xbb:return '6';break;//6 case 0xb7:return '-';break;//7 case 0xde:return '7';break;//8 case 0xdd:return '8';break;//9 case 0xdb:return '9';break;//a case 0xd7:return 'x';break;//b case 0xee:return '0';break;//c case 0xed:return '.';break;//d case 0xeb:return '=';break;//e case 0xe7:return '/';break;//f default:return 0xff;break;
25