当前位置: 首页 > news >正文

厦门做网站百度推广客户端

厦门做网站,百度推广客户端,域名申请而完成以后怎么做网站,网站建设 辉煌电商文章目录 一、介绍LCD1602介绍引脚以及应用电路内部结构框图存储器结构DDRAM数据显示区CGROM中字符码与字符关系表ASCII码对照表 时序结构LCD1602指令集LCD1602操作流程 二、重写显示函数关键函数写入命令与写入数据所有实现代码 注意 一、介绍LCD1602 介绍 引脚以及应用电路 …

文章目录

  • 一、介绍LCD1602
    • 介绍
    • 引脚以及应用电路
    • 内部结构框图
    • 存储器结构
      • DDRAM数据显示区
      • CGROM中字符码与字符关系表
      • ASCII码对照表
    • 时序结构
    • LCD1602指令集
    • LCD1602操作流程
  • 二、重写显示函数
    • 关键函数写入命令与写入数据
    • 所有实现代码
  • 注意


一、介绍LCD1602

介绍

在这里插入图片描述

引脚以及应用电路

在这里插入图片描述
在这里插入图片描述

内部结构框图

在这里插入图片描述

存储器结构

DDRAM数据显示区

在这里插入图片描述

CGROM中字符码与字符关系表

注意:与ASCII码表所对应的数据不完全一致

在这里插入图片描述

ASCII码对照表

在这里插入图片描述

时序结构

读操作
在这里插入图片描述
写操作
在这里插入图片描述

LCD1602指令集

在这里插入图片描述

LCD1602操作流程

本次案例要使用的流程如下

在这里插入图片描述
在这里插入图片描述

二、重写显示函数

关键函数写入命令与写入数据

根据上面指令集与时序结构写出写入命令与写入数据函数

/*** @brief		发送指令* @param		Command,指令值* @retval	无*/
void LCD_WriteCommand(unsigned char Command){LCD_RS = 0;LCD_WR = 0;							// 写入模式LCD_DataPort = Command;	// 写入引脚LCD_EN = 1;							// 允许写入LCD_Delayms(1);					// 等待指令写入LCD_EN = 0;							// 还原电平LCD_Delayms(1);
}
/*** @brief		发送数据* @param		Data,数据值* @retval	无*/
void LCD_WriteData(unsigned char Data){LCD_RS = 1;						// 读取模式LCD_WR = 0;							LCD_DataPort = Data;	// 写入引脚LCD_EN = 1;							// 允许写入LCD_Delayms(1);					// 等待指令写入LCD_EN = 0;							// 还原电平LCD_Delayms(1);
}

所有实现代码

LCD1602.c

#include <REGX52.H>
#include <intrins.h>
// 引脚声明
sbit LCD_RS = P2^6;
sbit LCD_WR = P2^5;
sbit LCD_EN = P2^7;
// 输入接口
#define LCD_DataPort P0// 延时函数
void LCD_Delayms(unsigned char x)	//@11.0592MHz
{unsigned char data i, j;while(x--){_nop_();i = 2;j = 199;do{while (--j);} while (--i);}
}
/*** @brief		发送指令* @param		Command,指令值* @retval	无*/
void LCD_WriteCommand(unsigned char Command){LCD_RS = 0;LCD_WR = 0;							// 写入模式LCD_DataPort = Command;	// 写入引脚LCD_EN = 1;							// 允许写入LCD_Delayms(1);					// 等待指令写入LCD_EN = 0;							// 还原电平LCD_Delayms(1);
}
/*** @brief		发送数据* @param		Data,数据值* @retval	无*/
void LCD_WriteData(unsigned char Data){LCD_RS = 1;						// 读取模式LCD_WR = 0;							LCD_DataPort = Data;	// 写入引脚LCD_EN = 1;							// 允许写入LCD_Delayms(1);					// 等待指令写入LCD_EN = 0;							// 还原电平LCD_Delayms(1);
}
/*** @brief		初始化函数* @param		无* @retval	无*/
void LCD_Init(void){LCD_WriteCommand(0x38);LCD_WriteCommand(0x0c);LCD_WriteCommand(0x06);LCD_WriteCommand(0x01);
}
/*** @brief		将行、列转换为DDRAM的地址并写入* @param		Row,行		Col,列* @retval	无*/
void LCD_SetAC(unsigned char Row,unsigned char Col){// 将行、列转换为DDRAM的地址if(Row == 1){LCD_WriteCommand(0x80 | (Col - 1));}else{LCD_WriteCommand((0x80 | (Col - 1)) + 0x40);}
}
/*** @brief		显示一个字符* @param		Row 行,Col 列,Char 显示的字符* @retval	无*/
void LCD_ShowChar(unsigned char Row,unsigned char Col,unsigned char Char){LCD_SetAC(Row,Col);LCD_WriteData(Char);
}
/*** @brief		显示一段字符串* @param		Row 行,Col 列,*String 显示的字符数组首地址* @retval	无*/
void LCD_ShowString(unsigned char Row,unsigned char Col,unsigned char* String){unsigned char i;LCD_SetAC(Row,Col);// 判断一位写一位,与AC(光标)同步跳转for(i = 0;String[i]!='\0';i++){LCD_WriteData(String[i]);}
}
/*** @brief		指数函数* @param		x 底数,y 指数* @retval	result 返回x的y次方*/
unsigned char Pow(unsigned char x,unsigned char y){unsigned char result = 1,i;for(i=0;i<y;i++){result *= x;}return result;
}
/*** @brief		显示一个数字* @param		Row 行,Col 列,Num 显示的数字,Length 显示的长度* @retval	无*/
void LCD_ShowNum(unsigned char Row,unsigned char Col,unsigned int Num,unsigned char Length){unsigned char i;LCD_SetAC(Row,Col);// 判断一位写一位,与AC(光标)同步跳转for(i = Length;i>0;i--){LCD_WriteData(0x30+Num/Pow(10,i-1)%10);	// 转化为ASCII码}
}
/*** @brief		显示一个有符号数* @param		Row 行,Col 列,Num 显示的数字,Length 显示的长度* @retval	无*/
void LCD_ShowSignedNum(unsigned char Row,unsigned char Col,int Num,unsigned char Length){unsigned char i;unsigned int Num1;LCD_SetAC(Row,Col);if(Num>=0){LCD_WriteData('+');Num1 = Num;}else{LCD_WriteData('-');Num1 = -Num;	// 最大负值取反后会栈溢出,使用定义一个无符号的数来接收}// 判断一位写一位,与AC(光标)同步跳转for(i = Length;i>0;i--){LCD_WriteData(0x30+Num1/Pow(10,i-1)%10);	// 转化为ASCII码}
}
/*** @brief		显示一个十六进制数* @param		Row 行,Col 列,Num 显示的数字,Length 显示的长度* @retval	无*/
void LCD_ShowHexNum(unsigned char Row,unsigned char Col,unsigned int Num,unsigned char Length){unsigned char i;unsigned char Num_Flag;LCD_SetAC(Row,Col);// 判断一位写一位,与AC(光标)同步跳转for(i = Length;i>0;i--){Num_Flag = Num/Pow(16,i-1)%16;if(Num_Flag<10){LCD_WriteData('0'+Num_Flag);}else{LCD_WriteData('A'+Num_Flag-10);}}
}
/*** @brief		显示一个二进制数* @param		Row 行,Col 列,Num 显示的数字,Length 显示的长度* @retval	无*/
void LCD_ShowBinNum(unsigned char Row,unsigned char Col,unsigned int Num,unsigned char Length){unsigned char i;LCD_SetAC(Row,Col);// 判断一位写一位,与AC(光标)同步跳转for(i = Length;i>0;i--){LCD_WriteData(0x30+Num/Pow(2,i-1)%2);		// 二进制转换}
}

注意

有符号和无符号数之间转换时要注意栈溢出问题,例如 1111 1111转化为有符号数,那么第一位就变成了符号位,相当于最大为-0111 1111,就会栈溢出

http://www.hkea.cn/news/821700/

相关文章:

  • 百度怎样做网站并宣传网站2023上海又出现疫情了
  • wordpress后台登录慢阳山网站seo
  • 深圳网站建设企网络推广运营途径
  • 给自己女朋友做的网站yandex搜索引擎
  • 购物网站建设教程怎么在网上做广告宣传
  • 冠县做网站推广网站怎么制作
  • 开封 网站建设苹果被曝开发搜索引擎对标谷歌
  • 东莞虎门高铁站百度客户端电脑版下载
  • 建网站怎么挣钱的学seo推广
  • 自如网站做的好 服务哪个网站学seo是免费的
  • 国外网站阻止国内访问怎么做竞价推广工具
  • 建设一个网站需要哪些方面的开支百度人工客服
  • 品牌网站建设-建站之路最新疫情新闻100字
  • 东莞网站优化科技有限公司怀柔网站整站优化公司
  • 郑州网站建设联系方式外链是什么意思
  • 用wordpress做网站教程电脑优化大师有用吗
  • 佛山企业网站制作今日热点新闻事件
  • 企业网站网络推广黑帽seo培训
  • 欧美做的爱爱网站有哪些广告推广赚钱
  • 泉州网站建设工作室谷歌seo价格
  • 国建设委员会网站百度推广一天烧几千
  • 做网站 花园路国贸营销推广方案包括哪些内容
  • 做商城网站哪里买口碑营销属于什么营销
  • 鞋子 东莞网站建设真正的免费建站在这里
  • 网站上微信的链接怎么做项目平台
  • 做网站后有人抢注关键词网络营销方案策划论文
  • 苏州网站建设网站seo优化的方法
  • 设计网装修seo顾问服
  • 网站ip拦截免费网站搭建平台
  • 深圳企业网站建设公司快速申请免费个人网站