lcd_disp.c
来自「关键字:步进电机,调速,C语言,51单片机程序,通过调试」· C语言 代码 · 共 153 行
C
153 行
/**********************************************************************************
* *
* 文 件 名:lcd_disp.c *
* MCU Type:STC89C51 Fosc:11.0592MHz *
* 功 能:1602液晶屏显示 *
* 创 建 者:www.eldiy.net *
* 创建日期:2006-11-10 *
* 其他说明:在YH51-I单片机学习开发板上验证通过 *
* 有什么问题欢迎来我们的学习论坛讨论,祝你成功! *
**********************************************************************************/
#include <reg51.h> // 引用头文件,里面包含了一些对51单片机内部寄存器的定义
#include <string.h>
#define uchar unsigned char //定义unsigned int为uint
#define uint unsigned int //定义unsigned uchar为uchar
sbit LCD_RS = P2^0 ;
sbit LCD_RW = P2^1 ;
sbit LCD_EN = P2^2 ;
sbit D_SDA = P2^6; //定义74HC164数据线为P2.6端口
sbit D_SCL = P2^7; //定义74HC164数据线为P2.7端口
uchar str_forward[] = {"Forward "};
uchar str_backward[] = {"Backward"};
uchar str_stop[] = {"Stop "};
extern bit forward_flag;
extern bit backward_flag;
extern bit ring_flag;
extern uchar speed_set_value;
extern void delay_ms(uint s);
//========= 送出一个字节给74HC164(实现串并转换) ==========
void send_out(unsigned char out)//传送一个字节8位
{
uchar i;
D_SCL = 0;
for (i=8;i>=1;i--)
{
D_SDA = out&0x80; //送数据到数据口
D_SCL = 1; //时钟线置1
D_SCL = 0; //送一时钟
out<<=1; //左移
}
}
//========= 写命令函数 ==========
void lcd_wcmd(uchar cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
send_out(cmd);
LCD_EN = 1;
LCD_EN = 0 ;
}
//========= 写数据函数 ==========
void lcd_wdat(uchar dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
send_out(dat);
LCD_EN = 1;
LCD_EN = 0;
}
void lcd_wstr(uchar *p,addr,len)
{
while(len!=0)
{
lcd_wcmd(addr);
delay_ms(1);
lcd_wdat(*p);
p++;
len--;
addr++;
delay_ms(1);
}
}
void renew_speed_value()
{
uchar addr;
addr = 0x80 + 0x4b;
lcd_wcmd(addr);
delay_ms(1);
lcd_wdat(speed_set_value + 0x30); //写入数据
}
void renew_work_status()
{
uchar addr,len;
addr = 0x80 + 0x00;
if(!ring_flag)
{
len = 8;
lcd_wstr(str_stop, addr, len);
}
else
{
if(forward_flag)
{
len =8;
lcd_wstr(str_forward,addr,len);
}
else if(backward_flag)
{
len = 8;
lcd_wstr(str_backward,addr,len);
}
}
}
void renew_lcd_disp()
{
renew_speed_value();
renew_work_status();
}
//========= LCD初始化函数 ==========
void lcd_init()
{
uchar addr,len;
uchar s_speed[] = "Speed set: 0";
lcd_wcmd(0x38);
delay_ms(1);
lcd_wcmd(0x0c); //显示开,关光标
delay_ms(1);
lcd_wcmd(0x06); //向右移动光标
delay_ms(1);
lcd_wcmd(0x01); //清除LCD显示屏
delay_ms(1);
addr = 0x40 | 0x80;
len = 12;
lcd_wstr(s_speed,addr,len);
renew_lcd_disp();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?