单片机用c语言怎么把i/o数据显示到lcd1602上,单片机lcd1602程序,通用型51单片机lcd1602驱动代码...
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效。
而LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。经常会有人问单片机的lcd1602程序是,这篇文章给了一篇用型51单片机lcd1602驱动代码很实用,希望对大家有用。
通用型51单片机lcd1602驱动代码
文件:lcd_1602.h
#ifndef _LCD1602_TRAVELER_H_
#define _LCD1602_TRAVELER_H_
/*************************待配置项*******************************/
#define DATA_LCD P0 //液晶与MCU 数据口
sbit RS_LCD = P2^5; // 液晶的RS、RW、E 端在 MCU端的连线
sbit RW_LCD = P2^6;
sbit E_LCD = P2^7;
/****************************************************************/
void lcdInit(void);
//lcdInit() 液晶初始化、所有对液晶的操作之前均需要调用此函数
void lcdDelayMs(const unsigned char ms);
// lcdDelayMs(ms) 液晶内部使用的毫秒级延时函数 如不需要请自行删除
// 该驱动函数须在不超过12MHz的晶振频率下才能正常工作
void lcdDelayUs(const unsigned char us);
// lcdDelayMs(ms) 液晶内部使用的微秒级延时函数 如不需要请自行删除
// 该驱动函数须在不超过12MHz的晶振频率下才能正常工作
void lcdWriteCmd(const unsigned char cmd);
// lcdWriteCmd(cmd) 向液晶写命令字函数
void lcdWriteChar(const unsigned char chr);
// lcdWriteChar(chr) 向液晶写字符函数
void lcdWriteData(const unsigned char pos,const unsigned char dat);
//lcdWriteData(pos,dat)向液晶板上指定位置写字符函数
void lcdWriteString(const unsigned char line,unsigned char *str,const unsigned char offset);
//lcdWriteString(line,*str,offset) 向液晶面板指定行、写字符串 可指定首字符偏移量 所显示的区域限制在当前行内
bit lcdReadBusy();
//读lcd的忙标志 忙 返回1 不忙 返回0
void lcdWriteUint(unsigned char line,unsigned int c,unsigned char offset);
//lcdWriteUint(unsigned char line,unsigned int c,unsigned char offset)写无符号整形数 到lcd (占位 5 字符)
//line 指明所在行、c要写的数据、offset 距首列偏移量
#endif
——————————————————
文件:lcd_1602.c
#include
#include “lcd_1602.h”
/*************************************************************************/
/***********************12MHz晶振下微秒级延时*****************************/
void lcdDelayUs(const unsigned char us){
unsigned char cin = us》》1; //prepare for clause while calculaTIng TIme
cin++;
while(--cin);// ‘dec cin’ and ‘jnz cin’ 2 circles
}
/*************************************************************************/
/***********************12MHz晶振下毫秒级延时*****************************/
void lcdDelayMs(const unsigned char ms){
unsigned char cin = ms+1;
while(--cin){
lcdDelayUs(250);
lcdDelayUs(250);
lcdDelayUs(250);
lcdDelayUs(250);
}
}
/*************************************************************************/
/**************************写命令字***************************************/
void lcdWriteCmd(const unsigned char cmd){
while(lcdReadBusy());
E_LCD = 0;
RS_LCD = 0;
RW_LCD = 0;
DATA_LCD = cmd;
lcdDelayUs(40);
E_LCD = 1;
lcdDelayUs(250);
E_LCD = 0;
lcdDelayUs(250);
}
/*************************************************************************/
/************************写字符********************************************/
void lcdWriteChar(const unsigned char chr){
while(lcdReadBusy());
E_LCD = 0;
RS_LCD = 1;
RW_LCD = 0 ;
DATA_LCD = chr;
lcdDelayUs(40);
E_LCD = 1;
lcdDelayUs(250);
E_LCD = 0;
lcdDelayUs(250);
}
/*************************************************************************/
/*******************向指定位置写字符**************************************/
void lcdWriteData(const unsigned char pos,const unsigned char dat){
unsigned char p;
if(pos》=16) p = 0xb0 + pos ;
else p = 0x80 + pos ;
lcdWriteCmd(p);
lcdWriteChar(dat);
}
/*************************************************************************/
/**************************写字符串***************************************/
void lcdWriteString(const unsigned char line,unsigned char *str,const unsigned char offset){
unsigned char p;
unsigned char curlineend = (line)?32:16; //每次写字符串最多允许写完单行,不允许跨行写
unsigned char i=0;
if(line) p = 16;else p = 0;
p = p + offset;
while(p!=curlineend){
if(!str[i])break;//如果到字符尾则退出
lcdWriteData(p++,str[i++]);
}
}
/*************************************************************************/
/************************初始化液晶***************************************/
void lcdInit(void){
lcdDelayMs(15);
lcdWriteCmd(0x38);
lcdWriteCmd(0x38);
lcdWriteCmd(0x38);
lcdWriteCmd(0x06);
lcdWriteCmd(0x0c);
lcdWriteCmd(0x01);
lcdWriteData(1,‘ ’);//此为驱动的bug,未消除bug之前请勿删除此行及下行两行
lcdWriteCmd(0x0c);
}
/*************************************************************************/
bit lcdReadBusy(){
bit i = 1;
E_LCD = 0;
RS_LCD = 0;
RW_LCD = 1;
E_LCD = 1;
i = DATA_LCD & 0x80;
return i;
}
//lcdWriteUint(unsigned char line,unsigned int c,unsigned char offset)写无符号整形数 到lcd (占位 5 字符)
//line 指明所在行、c要写的数据、offset 距首列偏移量
void lcdWriteUint(unsigned char line,unsigned int c,unsigned char offset){
unsigned char i,j;
unsigned char arrTmp[6] = {“ ”};
j = 0;
do{
i = c % 10;
arrTmp[4 - j] = i + ‘0’;
j ++ ;
c /= 10;
}while(c);
lcdWriteString(line,arrTmp,offset);
}
单片机用c语言怎么把i/o数据显示到lcd1602上,单片机lcd1602程序,通用型51单片机lcd1602驱动代码...相关推荐
- 单片机c 语言0-99,单片机“0~99”加法计数器程序的设计51单片机原理及应用.doc...
单片机"0~99"加法计数器程序的设计51单片机原理及应用 课 程 设 计 课程名称51单片机原理及应用题目名称单片机"0~99"加法计数器程序设计专业班级学生 ...
- 51单片机串口通讯c语言程序,如何使用51单片机实现串口通信
描述 STC51单片机一般带有1个串口,有的带有2个串口,串口一般用于下载程序和串口通信.串口通信特别适合控制设备,所以工控机的电脑上一般都带有串口. 51单片机的串口引脚为P3.0引脚与P3.1引脚 ...
- SGP30传感器示例程序(基于51单片机、IO模拟I2C)
SGP30传感器示例程序(基于51单片机.IO模拟I2C) SGP30传感器I2C地址:0x58 说明:这里采用使用IO模拟的方式来实现I2C 点击这里下载SGP30测试源码及数据手册 /*SGP30 ...
- 51单片机c语言程序执行顺序,51单片机程序执行流程详细分析
这里是一个循环,根据DJNZ指令的功能:每执行一次DJNZ RO, IDATALOOP就将R0的值减1,若R0的值不为0则就跳到IDATALOOP地址去.很显然这是一个循环,那么RO的值是多少呢,在以 ...
- ds18b20c语言显示小数位,DS18B20多点测温(读序列,匹配序列,51单片机C程序,1602显示)...
DS18B20多点测温(读序列,匹配序列,51 C程序,1602显示) 程序一:单个读序列号.程序二,匹配并且读两个DS18B20,当然,读多个与读两个基本原理一样,只要加上其序列号等即可.本程序所有 ...
- at89c52串口通信c语言程序,AT89C52DEMO 基于51单片机的(89C51/52)C语言源码例程 - 下载 - 搜珍网...
例程与源码/12864带字库测试程序/12864 例程与源码/12864带字库测试程序/12864.hex 例程与源码/12864带字库测试程序/12864.lnp 例程与源码/12864带字库测试程 ...
- 单片机定时报警C语言程序,求一个51单片机定时闹钟程序。要C语言。能够调时间...
我来发一个C语言211351单片机时钟程序,希望5261能帮到你/* 程序功能:4102带定时闹铃时钟 *//*------- ...
- c语言编程单片机中的sbit,用sbit定义可位寻址的特殊功能寄存器时的地址转换-51单片机C编程...
80C51单片机C编程时中,用sbit定义可位寻址的特殊功能寄存器的位变量(感觉说是常量更确切)时,编译器会进行处理,把sbit 后面给的地址值 转换成 相应的可进行位寻址的特殊功能寄存器 bit位 ...
- c语言pID程序怎么设计,51单片机PID的算法实现程序C语言
#include typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long int uint32; ...
- 直流电机调速c语言程序,分享一个51单片机直流电机调速源程序
/*******************************************************************/ /* 程序名:PWM直流电机调速 */ /* 晶振:11.0 ...
最新文章
- 如何利用PyTorch中的Moco-V2减少计算约束
- 关于“做一个聊天+信息分享客户端”的设想(SNS?)
- 牛客国庆集训派对Day2 F、平衡二叉树 【构造+记忆化搜索】
- weblogic cluster error-----Could not= open connection with host: 127.0.0.1
- 【转】Maya Mel – Search String in String
- mysql storm_flume+kafka+storm+mysql架构设计
- 【数据库的备份与还原】 .
- ES 6理解 let
- java证书验证失败_Java 跳过 HTTPS 请求过程中证书验证问题
- [Search Engine] 搜索引擎技术之倒排索引
- 全新外卖侠cps5.6全套微信小程序源码下载(内附加2.7.5版本微擎)
- 冲刺倒计时,复习核心是什么?
- 中国止血分析仪行业市场供需与战略研究报告
- 四参数旋转角异常,平面坐标方位角不准确的问题
- 辽宁科技大学计算机与软件工程学院调剂,辽宁科技大学2019年硕士研究生调剂信息...
- linux udp 端口测试,RAKsmart:Linux下TCP/UDP 端口测试及验证方法说明
- 如何正确控制springboot中bean的加载顺序总结
- Windows Azure Virtual Network (13) 跨数据中心之间的虚拟网络点对点连接VNet Peering
- Request和Response的使用以及html连接java同步到数据的实例
- python源代码打包成为exe文件