文章目录[隐藏]
由于时间紧迫,还有其他考试,所以目前只能抽时间慢慢做慢慢更新了,本身就是一个练手项目。
1602显示
所谓的智能系统,没有显示是万万不能的,所以有一个显示的东西是很必要的,选择1602是因为它抗光而且价格合适,字体大,官方教程也多,是51单片机开发的一款火爆元件。
成功显示字符串
接线方式:
1602 | 51 |
---|---|
D0-D7 | P0的1到7 |
A | 5V |
K | GND |
E | P27 |
RW | P25 |
RS | P26 |
VDD | VCC |
VSS | GND并1k电阻 |
V0 | 并1k、10k电阻 |
lcd.c
#include "lcd.h"
uchar i;
//显示用的延时
void Lcd1602_Delay1ms(uint c) //误差 0us
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
/*写入单个字节*/
void LcdWriteCom(uchar com) //写入命令
{
LCD1602_E = 0; //使能
LCD1602_RS = 0; //选择发送命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //放入命令
Lcd1602_Delay1ms(1); //等待数据稳定
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5); //保持时间
LCD1602_E = 0;
}
/*向LCD写入一个字节的数据*/
void LcdWriteData(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //写入数据
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5); //保持时间
LCD1602_E = 0;
}
/***字符串显示函数
高四位显示坐标的X,第四位显示坐标的Y*******/
void ShowString (unsigned char Coordinate,char *ptr)
{
if(Coordinate<=0x0f) //高四位为0,显示第一行
{
LcdWriteCom((Coordinate&0x0f)+0x80);
while(*ptr!='\0')
{
LcdWriteData(*ptr);
ptr++;
}
}
else //高四位为1,显示第2行
{
LcdWriteCom((Coordinate&0x0f)+0xc0);
while(*ptr!='\0')
{
LcdWriteData(*ptr);
ptr++;
}
}
}
/*初始化LCD屏*/
void LcdInit() //LCD初始化子程序
{
LcdWriteCom(0x38); //开显示
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //设置数据指针起点
}
lcd.h
#ifndef __LCD_H_
#define __LCD_H_
/**********************************
当使用的是4位数据传输的时候定义,
使用8位取消这个定义
**********************************/
//#define LCD1602_4PINS
/**********************************
包含头文件
**********************************/
#include<reg52.h>
//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
/**********************************
PIN口定义
**********************************/
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
/**********************************
函数声明
**********************************/
/*在51单片机12MHZ时钟下的延时函数*/
void Lcd1602_Delay1ms(uint c); //误差 0us
/*LCD1602写入8位命令子函数*/
void LcdWriteCom(uchar com);
/*LCD1602写入8位数据子函数*/
void LcdWriteData(uchar dat);
/*LCD1602初始化子程序*/
void LcdInit();
void Display_Standby();
void Display_str_Password();
void Display_result(bit rt);
void Display_Password(unsigned char i);
void ShowString (unsigned char Coordinate,char *ptr);
#endif
main.c
#include "lcd.h"
void main()
{
LcdInit();
while(1)
{
ShowString(0x00," XinMin B619 ");
}
}
版权声明:本文为CSDN博主「熬夜耗子在线敲代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46020788/article/details/120796874
暂无评论