单片机——LCD1602驱动
来源:互联网 发布:js 创建style标签 编辑:程序博客网 时间:2024/05/09 17:22
该程序的功能是用LCD1602来显示时钟,同时显示一个正在充电的电池图标,其中的lcd_char_sel()函数就是自己设计的电池图标
#include <reg52.h>
#include "./delay/delay.h"
#include "./delay/delay.h"
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
sbit RW = P2^5;
sbit E = P2^6;
#define LCDPORT P0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
unsigned char h = 10;
unsigned char s = 0;
unsigned char m = 0;
unsigned char s = 0;
unsigned char m = 0;
void timer0_init()
{
EA = 1;
TH0 = (65536 - 20000)/256;
TL0 = (65536 - 20000)%256;
TMOD |= 0x01;
ET0 = 1;
TR0 = 1;
}
{
EA = 1;
TH0 = (65536 - 20000)/256;
TL0 = (65536 - 20000)%256;
TMOD |= 0x01;
ET0 = 1;
TR0 = 1;
}
void timer0_isr() interrupt 1
{
static unsigned char i = 0;
TH0 = (65536 - 20000)/256;
TL0 = (65536 - 20000)%256;
i++;
if(50 == i)
{
i = 0;
s++;
if(60 == s)
{
s = 0;
m++;
if(60 == m)
{
m = 0;
h++;
if(24 == h)
{
h = 0;
}
}
}
}
}
{
static unsigned char i = 0;
TH0 = (65536 - 20000)/256;
TL0 = (65536 - 20000)%256;
i++;
if(50 == i)
{
i = 0;
s++;
if(60 == s)
{
s = 0;
m++;
if(60 == m)
{
m = 0;
h++;
if(24 == h)
{
h = 0;
}
}
}
}
}
void lcd_write(unsigned char byte, unsigned char flag)
{
if(flag)
{
RS = LCD_WRITE_DATA;
}
else
{
RS = LCD_WRITE_COM;
}
RW = 0;
E = 1;
LCDPORT = byte;
delay_us(7);
E = 0;
}
{
if(flag)
{
RS = LCD_WRITE_DATA;
}
else
{
RS = LCD_WRITE_COM;
}
RW = 0;
E = 1;
LCDPORT = byte;
delay_us(7);
E = 0;
}
void lcd_init()
{
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x08,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x01,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x06,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x0C,LCD_WRITE_COM);
}
{
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x08,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x01,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x06,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x0C,LCD_WRITE_COM);
}
void lcd_display(unsigned char x,unsigned char y,unsigned byte)
{
if(y == 1)
{
lcd_write(0x80 + (unsigned int)x*0x01,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
else
{
lcd_write(0x80 + 0x40 + (unsigned int)x*0x01,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
}
{
if(y == 1)
{
lcd_write(0x80 + (unsigned int)x*0x01,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
else
{
lcd_write(0x80 + 0x40 + (unsigned int)x*0x01,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
}
void lcd_str_display(unsigned char x,unsigned char y,unsigned *s)
{
while(*s != '\0')
{
lcd_write_str(x,y++,*s);
s++;
}
}
{
while(*s != '\0')
{
lcd_write_str(x,y++,*s);
s++;
}
}
void lcd_write_str(unsigned char *s)
{
unsigned char i = 0;
for(i =0 ; *s; i++)
{
lcd_write(0x80 + i,LCD_WRITE_COM);
lcd_write(*s ,LCD_WRITE_DATA);
s++;
}
}
{
unsigned char i = 0;
for(i =0 ; *s; i++)
{
lcd_write(0x80 + i,LCD_WRITE_COM);
lcd_write(*s ,LCD_WRITE_DATA);
s++;
}
}
void lcd_dis_time()
{
lcd_write(0x80 + 4, LCD_WRITE_COM);
lcd_write((h/10) + 0x30, LCD_WRITE_DATA);
lcd_write((h%10) + 0x30, LCD_WRITE_DATA);
lcd_write(':', LCD_WRITE_DATA);
lcd_write((m/10) + 0x30, LCD_WRITE_DATA);
lcd_write((m%10) + 0x30, LCD_WRITE_DATA);
lcd_write(':', LCD_WRITE_DATA);
lcd_write((s/10) + 0x30, LCD_WRITE_DATA);
lcd_write((s%10) + 0x30, LCD_WRITE_DATA);
}
{
lcd_write(0x80 + 4, LCD_WRITE_COM);
lcd_write((h/10) + 0x30, LCD_WRITE_DATA);
lcd_write((h%10) + 0x30, LCD_WRITE_DATA);
lcd_write(':', LCD_WRITE_DATA);
lcd_write((m/10) + 0x30, LCD_WRITE_DATA);
lcd_write((m%10) + 0x30, LCD_WRITE_DATA);
lcd_write(':', LCD_WRITE_DATA);
lcd_write((s/10) + 0x30, LCD_WRITE_DATA);
lcd_write((s%10) + 0x30, LCD_WRITE_DATA);
}
void lcd_char_sel()
{
static unsigned char i = 1;
lcd_write(0x40, LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0a,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40, LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x40 + 8, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x1,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(0x40 + 16, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x2,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(0x40 + 24, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x3,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(0x40 + 32, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x4,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(0x40 + 40, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x5,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(i,LCD_WRITE_DATA);
i++;
if(6 == i)
{
i = 1;
}
}
{
static unsigned char i = 1;
lcd_write(0x40, LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0a,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40, LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x40 + 8, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x1,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(0x40 + 16, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x2,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(0x40 + 24, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x3,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(0x40 + 32, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x4,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(0x40 + 40, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
//lcd_write(0x5,LCD_WRITE_DATA);
//delay_s(1);
lcd_write(i,LCD_WRITE_DATA);
i++;
if(6 == i)
{
i = 1;
}
}
void main()
{
{
lcd_init();
timer0_init();
//lcd_display(5,1,'a');
//lcd_write_str("aabbc");
while(1)
{
lcd_dis_time();
lcd_char_sel();
delay_s(1);
}
}
timer0_init();
//lcd_display(5,1,'a');
//lcd_write_str("aabbc");
while(1)
{
lcd_dis_time();
lcd_char_sel();
delay_s(1);
}
}
0 0
- 单片机——LCD1602驱动
- AVR单片机驱动LCD1602
- 51单片机——LCD1602
- 通用型51单片机lcd1602驱动
- [51单片机]LCD1602驱动函数
- 自制单片机之五-LCD1602的驱动
- 单片机汇编语言模块化编程-LCD1602驱动
- STM32单片机的LCD1602液晶驱动移植过程
- 基于51单片机的LCD1602液晶驱动实现
- LCD1602 驱动
- LCD1602驱动
- lcd1602驱动
- 嵌入式学习笔记(12)——51单片机之LCD1602
- 关于51单片机LCD1602
- 51单片机LCD1602程序
- C51---LCD1602---液晶显示驱动
- ARM7---LCD1602---液晶显示驱动
- 51驱动LCD1602
- 生日快乐
- 【Java基础知识】&&与&以及 ||与|的区别
- 看看外国小伙对于黑客的“商业性”解读
- dp 2016.10.20
- CXF集成Spring提供Webservice接口服务
- 单片机——LCD1602驱动
- 51Nod-幸运数字(打表)
- codeforce C. Ray Tracing
- EM算法的理解
- empty、isset、is_null的区别
- Java-Review-Note——4.多线程
- [LeetCode]15. 3Sum【&16. 3Sum Closest】
- 事件在多线程编程中的应用
- 20161011 Python 读书笔记之 列表、元祖、字典