//测试列
GPIO_KEY=0X0F; switch(GPIO_KEY) {
case(0X07):
检测 }
void Delay10ms(unsigned int c) //误差 0us {
unsigned char a, b;
//--c已经在传递过来的时候已经 }
}
{ }
Delay10ms(1); a++;
KeyValue=0;break;
case(0X0b):
KeyValue=4;break;
case(0X0d):
KeyValue=8;break;
case(0X0e):
KeyValue=12;break;
} //测试行
GPIO_KEY=0XF0; switch(GPIO_KEY) {
case(0X70):
赋值了,所以在for语句第一句就不用赋值了--// for (;c>0;c--) }
附1:lcd.c(包含main函数中lcdinit
&&
函数) #include\
20
{
for (b=38;b>0;b--) {
for (a=130;a>0;a--);
KeyValue=KeyValue+3;break;
case(0Xb0):
KeyValue=KeyValue+2;break;
case(0Xd0):
}
KeyValue=KeyValue+1;break;
case(0Xe0):
}
KeyValue=KeyValue;break;
}
while((a<50)
(GPIO_KEY!=0xf0)) //检测按键松手
void Lcd1602_Delay1ms(uint c) //误差 0us {
uchar a,b; }
#ifndef LCD1602_4PINS
//当没有
for (; c>0; c--) { }
for (b=199;b>0;b--) {
for(a=1;a>0;a--); }
LCD1602_E = 1; //写入
时序
Lcd1602_Delay1ms(5); //保持
时间 } #else
void LcdWriteCom(uchar com) 写入命令 {
LCD1602_E = 0; //使能清零 LCD1602_RS = 0; //选择写入
//
LCD1602_E = 0;
命令
LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = com;
定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com) 写入命令 {
LCD1602_E = 0; //使能 LCD1602_RS = 0; //选择发
//
//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); LCD1602_E = 0; Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com << 4; Lcd1602_Delay1ms(1);
送命令 入
LCD1602_DATAPINS
=
LCD1602_RW = 0; //选择写
com;
//放入命令
Lcd1602_Delay1ms(1);
//等
//发送低四位
21
Lcd1602_Delay1ms(1);
待数据稳定
LCD1602_E = 1; //写入时序
}
Lcd1602_Delay1ms(5); LCD1602_E = 0;
数据
//
LCD1602_DATAPINS = dat; //因4LCD1602_RW = 0; //选择写入
#endif
#ifndef LCD1602_4PINS
位的接线是接到P0口的高四位,传送高四位不用改
Lcd1602_Delay1ms(1);
void LcdWriteData(uchar dat) 写入数据 { 据
LCD1602_E = 0; //使能清零
LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); LCD1602_E = 0;
LCD1602_RS = 1; //选择输入数
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat << 4;
LCD1602_DATAPINS = dat; //写入//写入低四位
LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); LCD1602_E = 0; Lcd1602_Delay1ms(1);
数据 间 } #else
void LcdWriteData(uchar dat) 写入数据 {
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); //保持时
}
LCD1602_E = 0; #endif #ifndef
LCD1602_4PINS
void LcdInit()
//
//LCD初始化子程序 {
LcdWriteCom(0x38); //开显示 LcdWriteCom(0x0c); //开显示不
LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //选择写入
22
显示光标
LcdWriteCom(0x06); //写一个指/**当使用的是4位数据传输的时候定义,使用8位取消这个定义**/ #define LCD1602_4PINS /**包含头文件**/ #include
针加1
LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据
指针起点 } #else void LcdInit()
#define uchar unsigned char #endif
//LCD初始化子程序 {
LcdWriteCom(0x32); //将8位总线
#ifndef uint
#define uint unsigned int #endif
#define LCD1602_DATAPINS P0 sbit LCD1602_E=P2^7; sbit LCD1602_RW=P2^5; sbit LCD1602_RS=P2^6;
void Lcd1602_Delay1ms(uint c); //误差 0us
/*LCD1602写入8位命令子函数*/ void LcdWriteCom(uchar com); /*LCD1602写入8位数据子函数*/ void LcdWriteData(uchar dat) ; /*LCD1602初始化子程序*/ void LcdInit(); #endif
转为4位总线
LcdWriteCom(0x28); //在四位线
下的初始化
LcdWriteCom(0x0c); //开显示不
显示光标
LcdWriteCom(0x06); //写一个指
针加1
LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据
指针起点 } #endif
附2:lcd.h(上述两个程序引用的头文件)
#ifndef __LCD_H_ #define __LCD_H_
23
3、 实验连线
将程序下载到单片机中,连接液晶显示器,可以看到按下不同键,1602显示出不同的键值,实验完成。
矩阵键盘实验
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库单片机实验报告-史昊卿杨 - 图文(5)在线全文阅读。
相关推荐: