LCM1602液晶屏显示实验程序
更新时间:2023-09-10 11:23:01 阅读量:1 教育文库 文档下载
- lcm1602是什么推荐度:
- 相关推荐
LCM1602液晶屏显示实验程序
文件:lcm16x2p.h
#ifndef LCM16X2_H #define LCM16X2_H
#define BUSYFLAG 0x80 #define BLINK 0x01 #define NOBLINK 0x00
unsigned char LCMReadState(void); void LCMDelay(int);
void LCMWriteCmd(unsigned char); void LCMWriteData(unsigned char); void LCMClear(void); void LCMInit(void);
void LCMGotoXY(unsigned char,unsigned char);
void LCMDisplayChar(unsigned char,unsigned char,unsigned char); void LCMDisplayString(unsigned char,unsigned char,unsigned char*); void LCMBlink(unsigned char,unsigned char,unsigned char);
#endif
文件:lcm16x2p.c
#include
#define LCM_DB P2
sbit LCM_RS = P1^0; sbit LCM_RW = P1^1; sbit LCM_E = P1^2; sbit LCM_BLC = P1^3;
unsigned int data DelayConst = 140;
/*******************************************************************************
函数名:LCMDelay
功 能:通过循环的方式延时
参 数:int,表示要延时的毫秒数 返 回:
作 者:倪晓军 2003-5-25 15:21
*******************************************************************************/
void LCMDelay(int ms) { unsigned int i,cnt; cnt = DelayConst * ms; for(i=0;i
/*******************************************************************************
函数名:LCMReadState
功 能:查询LCM的忙标志/当前AC地址 参 数:
返 回:BYTE,最高bit为1表示忙,为0表示闲 作 者:倪晓军 2003-5-25 15:24
*******************************************************************************/
unsigned char LCMReadState(void) { unsigned char state; LCM_E = 0; LCM_RS = 0; LCM_RW = 1; LCM_E = 1; _nop_(); _nop_(); state = LCM_DB; LCM_E = 0; return state; }
/*******************************************************************************
函数名:LCMClear 功 能:清屏 参 数: 返 回:
作 者:倪晓军 2003-5-25 15:25
*******************************************************************************/
void LCMClear(void) { LCMDelay(1); LCM_E = 0; LCM_RS = 0; LCM_RW = 0; LCM_DB = 0x01; LCM_E = 1; _nop_(); _nop_(); LCM_E = 0; LCMDelay(1); }
/*******************************************************************************
函数名:LCMWriteCmd 功 能:向LCM写入控制字
参 数:BYTE,命令字节。写入前不判断忙表示(因为初始化过程中不能判断) 返 回:
作 者:倪晓军 2003-5-25 15:26
*******************************************************************************/
void LCMWriteCmd(unsigned char cmd) { LCMDelay(1); LCM_E = 0; LCM_RS = 0; LCM_RW = 0; LCM_DB = cmd; LCM_E = 1; _nop_(); _nop_(); LCM_E = 0; }
/*******************************************************************************
函数名:LCMWriteData 功 能:向LCM写入数据
参 数:BYTE,将要写入的数据 返 回:
作 者:倪晓军 2003-5-25 15:27
*******************************************************************************/
void LCMWriteData(unsigned char dc) { while(LCMReadState() & BUSYFLAG); LCM_RS = 1; LCM_RW = 0; LCM_DB = dc; LCM_E = 1; _nop_(); _nop_(); LCM_E = 0; }
/*******************************************************************************
函数名:LCMInit 功 能:初始化LCM
参 数:DWORD,晶振频率(Hz),供计算延时常数 返 回:
作 者:倪晓军 2003-5-25 15:28
*******************************************************************************/
void LCMInit(void) { LCMDelay(60); // 延时60ms,等待LCM复位 LCMWriteCmd(0x38); // 功能设置:8位接口,2行,5x7字符点阵 LCMDelay(5); // 延时 LCMWriteCmd(0x38); // 第二次 LCMDelay(1); // 延时
LCMWriteCmd(0x38); // 此后可以通过监测忙标志判断指令执行情况 while(LCMReadState() & BUSYFLAG); LCMWriteCmd(0x08); // 关闭显示 while(LCMReadState() & BUSYFLAG); LCMWriteCmd(0x01); // 清屏 while(LCMReadState() & BUSYFLAG); LCMWriteCmd(0x06); // 显示地址自动增量,整体不移位 while(LCMReadState() & BUSYFLAG); LCMWriteCmd(0x0e); // 开显示,开光标,不闪烁 while(LCMReadState() & BUSYFLAG); }
/*******************************************************************************
函数名:LCMGotoXY
功 能:移动光标到X行,Y列
参 数:BYTE,x表示行(0,1),y表示列(横向,取值0~0x0f) 返 回:
作 者:倪晓军 2003-5-25 15:29
*******************************************************************************/
void LCMGotoXY(unsigned char x,unsigned char y) // x:行(0~1) y:列(0~F) { unsigned char cmd; if(x==0) { cmd = 0x80 | y;(设置显示缓冲区DDRAM地址命令D7=1,第0行第0列从00H开始) } else { cmd = 0x80 | 0x40 | y; (第1行第0列为40H开始) } LCMWriteCmd(cmd); while(LCMReadState() & BUSYFLAG); }
/*******************************************************************************
函数名:LCMDisplayChar
功 能:在指定位置显示一个字符
参 数:x表示行(0,1),y表示列(横向,取值0~0x0f),ch表示将要显示的字符(ASCII码) 返 回:
作 者:倪晓军 2003-5-25 15:31
*******************************************************************************/
void LCMDisplayChar(unsigned char x,unsigned char y,unsigned char ch) { LCMGotoXY(x,y); LCMWriteData(ch); }
/*******************************************************************************
函数名:LCMDisplayString
功 能:从指定的位置开始显示字符串
参 数:x表示行(0,1),y表示列(横向,取值0~0x0f),*str为指向将要显示的字符串的指针 返 回:
作 者:倪晓军 2003-5-25 15:32
*******************************************************************************/
void LCMDisplayString(unsigned char x,unsigned char y,unsigned char* str) { unsigned char ptr; ptr = 0; while(*(str+ptr) != 0) { LCMDisplayChar(x,(y+ptr),*(str+ptr)); ptr++; } }
/*******************************************************************************
函数名:LCMBlink
功 能:将指定位置显示的字符闪烁(同时关闭光标)
参 数:x表示行(0,1),y表示列(横向,取值0~0x0f),cmd=BLINK:闪烁,NOBLINK:不闪烁 返 回:
作 者:倪晓军 2003-5-25 15:33
*******************************************************************************/
void LCMBlink(unsigned char x,unsigned char y,unsigned char cmd) { LCMGotoXY(x,y); if(cmd == BLINK) { LCMWriteCmd(0x0d); } else { LCMWriteCmd(0x0c); } }
#include
#define OSC 11059200
unsigned char ucTH,ucTL,Ticks;
//******************************************************************************
// 函数名:T0ISR
// 功 能:50ms中断服务程序
// 作 者:倪晓军 2003-5-20 22:06 // 注 释:
//******************************************************************************
void T0ISR(void) interrupt 1 { TH0 = ucTH; TL0 = ucTL; TR0 = 1; Ticks ++; if(Ticks == 20) { Ticks = 0; LCM_BLC = !LCM_BLC; } }
void main(void) { // 初始化 EA = 0; // 停止所有中断 Ticks = 0; ucTH = (65536-OSC/12/20)/256; // 计算50ms定时的时间常数 ucTL = (65536-OSC/12/20)%6; TMOD = 0x01; // T0:模式1,16位定时器 TH0 = ucTH; TL0 = ucTL; ET0 = 1; // T0允许中断 TR0 = 1; // 启动定时器 EA = 1; // 打开总中断允许 LCMInit(); LCMClear(); LCMDisplayString(0,0,\ LCMDisplayString(1,0,\ LCMBlink(0,13,BLINK); while(1); }
#define OSC 11059200
unsigned char ucTH,ucTL,Ticks;
//******************************************************************************
// 函数名:T0ISR
// 功 能:50ms中断服务程序
// 作 者:倪晓军 2003-5-20 22:06 // 注 释:
//******************************************************************************
void T0ISR(void) interrupt 1 { TH0 = ucTH; TL0 = ucTL; TR0 = 1; Ticks ++; if(Ticks == 20) { Ticks = 0; LCM_BLC = !LCM_BLC; } }
void main(void) { // 初始化 EA = 0; // 停止所有中断 Ticks = 0; ucTH = (65536-OSC/12/20)/256; // 计算50ms定时的时间常数 ucTL = (65536-OSC/12/20)%6; TMOD = 0x01; // T0:模式1,16位定时器 TH0 = ucTH; TL0 = ucTL; ET0 = 1; // T0允许中断 TR0 = 1; // 启动定时器 EA = 1; // 打开总中断允许 LCMInit(); LCMClear(); LCMDisplayString(0,0,\ LCMDisplayString(1,0,\ LCMBlink(0,13,BLINK); while(1); }






正在阅读:
LCM1602液晶屏显示实验程序09-10
重点人群的确立和重点人群的管理服务之调研11-27
世界现代史名词解释01-05
电子科大16秋《EDA技术》在线作业306-16
美丽的银杏叶作文300字07-08
中国KTV点歌机行业市场前景分析预测年度报告(目录) - 图文10-10
2.附件2:贵阳中医学院研究生国家奖学金评审实施办法(2017年修订)09-13
财务管理复习题103-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 液晶屏
- LCM1602
- 实验
- 程序
- 显示
- 丰台高三语文一模答案2018
- 券商业务成互联网金融新战场 巨头图谋资管市场
- 《民族理论与民族政策》期末复习指导答案(第十三章)
- 广东省肇庆市实验中学高中政治11揭开货币的神秘面纱教案新人教版必修1
- 遗传病与优生优育微课稿
- 《西游记》500字读后感
- 2016年天津电机装配工:电工特种作业操作证模拟试题
- 2018年pep人教版小学英语四年级下学期复习资料
- CAD高级知识点
- 复旦大学面试题
- 通用会计科目英文翻译
- 苏科版七年级上第二章有理数拓展提优试卷(有答案)-(数学)
- 第四节 SS4改型电力机车常见故障处理
- 最新小学北师大版二年级上册数学期中考试卷打印Word文档下载
- 2016年专业技术人员继续教育必修课-《目标与时间管理》答案1课件
- 人教版初中语文 - 数学教学视频
- 自然拼读简单版 - 图文
- 收费站个人先进事迹
- 渡槽课程设计 三峡大学版
- 城市绿带控制之法国巴黎 - 图文