#include<reg52.h>
#include"lcd1602.h"
/*********************************************************
Function: static void DelayN40us(unsigned int n)
Description: 延时函数,延时40us的整数倍,传入值n代表延时
时间到n *40us,不能实现准确延时,只能实现大
概时间的延时,利用的是指令实现延时功能。不允
许外部调用。
Calls: 没有调用其它函数
Called By: void LCDWriteCommand(unsigned char dat);
void LCDWriteData(unsigned char dat);
Input: unsigned int n --- 用于延时时间的确定,取值、
为1~65535
Output: 无
Return: 无
***********************************************************/
static void DelayN40us(unsigned int n)
{
unsigned int i;
unsigned char j;
for(i=n;i>0;i--)
for(j=0;j<2;j++);
}
/*********************************************************
Function: void LCDInit(void);
Description: 液晶初始化函数,对LCD1602进行初始化操作,
在每一次实用液晶前必须用到的,外部可调用
函数。
Calls: void LCDWriteCommand(unsigned char dat);
DelayN40us(unsigned int n);
Called By: main();或其他
Input: 无
Output: 无
Return: 无
***********************************************************/
void LCDInit(void)
{
LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/
LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/
LCDWriteCommand(0x38);/*设置8位格式,2行,5x7,有的液晶做的不好,写三遍保险!!!!*/
LCDWriteCommand(0x0c);/*整体显示,关光标,不闪烁*/
LCDWriteCommand(0x06);/*设定输入方式,增量不移位*/
LCDWriteCommand(0x01);/*清除屏幕显示*/
DelayN40us(100); /*清屏延时*/
}
/*********************************************************
Function: static void LCDWriteCommand(unsigned char dat);
Description: 写命令函数,对LCD1602内部寄存器进行操作,
不允许外部调用
Calls: DelayN40us(unsigned int n);
Called By: void LCDInit(void);
void LCDDispChar(unsigned char x,unsigned char y,unsigned char dat);
void LCDDispNum(unsigned char x,unsigned char y,unsigned char dat);
Input: unsigned char dat --- 写入的命令
Output: 无
Return: 无
***********************************************************/
static void LCDWriteCommand(unsigned char dat)
{
LCD_DB=dat;
LCD_RS=0;/*选择写指令*/
LCD_RW=0;/*写入指令值*/
LCD_E=1; /*使能LCD1602*/
LCD_E=0;
DelayN40us(1);/*写命令延时*/
}
/*********************************************************
Function: static void LCDWriteData(unsigned char dat);
Description: 写数据函数,将数据写入LCD1602中,不允许外
部调用
Calls: DelayN40us(unsigned int n);
Called By: void LCDInit(void);
void LCDDispChar(unsigned char x,unsigned char y,unsigned char dat);
void LCDDispNum(unsigned char x,unsigned char y,unsigned char dat);
Input: unsigned char dat --- 写入的数据
Output: 无
Return: 无
***********************************************************/
static void LCDWriteData(unsigned char dat) //写数据函数
{
LCD_DB=dat;
LCD_RS=1;/*选择写数据*/
LCD_RW=0;/*写入数据值*/
LCD_E=1; /*使能LCD1602*/
LCD_E=0;
DelayN40us(1);/*写数据延时*/
}
/*********************************************************
Function: void LCDDispChar(unsigned char x,unsigned char y,unsigned char dat);
Description: 在某个屏幕位置上(x,y)位置显示一个字符,可外部调用。
Calls: LCDWriteCommand(unsigned char dat);
void LCDWriteData(unsigned char dat);
Called By: main();及其他
Input: X(0-15),y(1-2),dat为显示字符‘a’形式。
Output: 无
Return: 无
***********************************************************/
void LCDDispChar(unsigned char x,unsigned char y,unsigned char dat)
{
unsigned char address;
if(y==1)
address=0x80+x; /*显示在第一排的时候的x的地址*/
else
address=0xc0+x; /*显示在第二排的时候的x的地址*/
LCDWriteCommand(address); /*输入地址*/
LCDWriteData(dat); /*输入数据*/
}
/*********************************************************
Function: void LCDDispNum(unsigned char x,unsigned char y,unsigned char dat);
Description: 在某个屏幕位置上(x,y)位置显示一个数字,可外部调用。
Calls: LCDWriteCommand(unsigned char dat);
void LCDWriteData(unsigned char dat);
Called By: main();及其他
Input: X(0-15),y(1-2),dat(0-9)。
Output: 无
Return: 无
***********************************************************/
void LCDDispNum(unsigned char x,unsigned char y,unsigned char dat)
{
unsigned char address;
if(y==1)
address=0x80+x; /*显示在第一排的时候的x的地址*/
else
address=0xc0+x; /*显示在第二排的时候的x的地址*/
LCDWriteCommand(address); /*输入地址*/
LCDWriteData(dat+48); /*输入数据*/
}
/*********************************************************
Function: void LCDDispString(unsigned char x,unsigned char y,unsigned char *string)
Description: 在屏幕上显示一串字符,考虑到我的数值均存储于数组中,为方便而作,允许外部调用
Calls: void LCDDispChar(unsigned char x,unsigned char y,unsigned char dat);
Called By: main();及其他
Input: X(0-15),y(1-2),string为任意字符串,但是必须以0结尾。
Output: 无
Return: 无
***********************************************************/
void LCDDispString(unsigned char x,unsigned char y,unsigned char *string)
{
while(*string != 0) /*没有检测到字符串结尾时*/
{
LCDDispChar(x,y,*string++);/*逐个显示字符串*/
x++; /*行地址加1*/
}
}
/*********************************************************
Function: void LCDDispNumInt(unsigned char x,unsigned char y,unsigned int dat);
Description: 在某个屏幕位置上(x,y)位置显示一个无符号整形数字,可外部调用。
Calls: LCDDispNum(unsigned char x,unsigned char y,unsigned char dat);
Called By: main();及其他
Input: X(0-15),y(1-2),dat(0-65536)。
Output: 无
Return: 无
***********************************************************/
void LCDDispNumInt(unsigned char x,unsigned char y,unsigned int dat)
{
unsigned char temp[5],i = 0,j=0;/*分离万千百十个各个位临时存储*/
temp[0] = dat/10000%10;
temp[1] = dat/1000%10;
temp[2] = dat/100%10;
temp[3] = dat/10%10;
temp[4] = dat%10;
while((temp[i] == 0)&&(i!=4)) /*为保证即使传入的数都是0也能显示,加上i!=4*/
i++;
for(j=0;j<5-i;j++) /*依次显示各个数*/
LCDDispNum(x+j,y,temp[j+i]);
}
/*********************************************************
Function: void LCDClear(void);
Description: 清除屏幕显示,可外部调用。
Calls: static void LCDWriteCommand(unsigned char dat);
Called By: main();及其他
Input: 无
Output: 无
Return: 无
***********************************************************/
void LCDClear(void)
{
LCDWriteCommand(0x01);/*清除屏幕显示*/
DelayN40us(100); /*清屏延时*/
}
/*********************************************************
Function: void LCDCursor(void);
Description: 清除屏幕显示,可外部调用。
Calls: static void LCDWriteCommand(unsigned char dat);
Called By: main();及其他
Input: 无
Output: 无
Return: 无
***********************************************************/
void LCDCursor(void)
{
LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/
LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/
LCDWriteCommand(0x38);/*设置8位格式,2行,5x7,有的液晶做的不好,写三遍保险!!!!*/
LCDWriteCommand(0x0e);/*整体显示,开光标,不闪烁*/
LCDWriteCommand(0x06);/*设定输入方式,增量不移位*/
}
/*********************************************************
Function: void LCDNotCursor(void);
Descripti
没有合适的资源?快使用搜索试试~ 我知道了~
基于51单片机的充电桩设计
共30个文件
obj:5个
lst:5个
c:4个
2星 需积分: 35 63 下载量 24 浏览量
2018-12-15
15:18:18
上传
评论 18
收藏 117KB ZIP 举报
温馨提示
基于51单片机的充电桩设计,包括电流控制,充电挡位设计,充电速度控制
资源推荐
资源详情
资源评论
收起资源包目录
chongdianzhuang525.zip (30个子文件)
chongdianzhuang525
chongdianzhuang
Last Loaded chongdianzhuang.DBK 133KB
congdianqi.hex 7KB
充电器
DS18B20.c 4KB
DAC0832.h 245B
Objects
LCD1602.obj 9KB
congdianqi.hex 9KB
congdianqi.build_log.htm 2KB
DS18B20.obj 5KB
congdianqi 24KB
DAC0832.obj 2KB
congdianqi.lnp 205B
main.obj 11KB
STARTUP.obj 819B
congdianqi.uvproj 14KB
congdianqi.uvgui.xiao2taotao 86KB
STARTUP.A51 6KB
congdianqi.uvopt 6KB
LCD1602.h 3KB
Listings
STARTUP.lst 14KB
congdianqi.m51 30KB
LCD1602.lst 13KB
main.lst 10KB
DAC0832.lst 2KB
DS18B20.lst 7KB
LCD1602.c 8KB
main.c 5KB
DAC0832.c 835B
DS18B20.h 409B
chongdianzhuang.DSN 132KB
chongdianzhuang.PWI 1KB
共 30 条
- 1
资源评论
- ysq_1907012023-03-02不知道为什么所以的文件我都打不开
xaio2taotao
- 粉丝: 1
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功