LCD1602功能函数

#include <reg52.h>
#include "./delay/delay.h"


sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;


#define LCDPORT P0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0


unsigned char src[100];
unsigned char flag = 0;
unsigned char shi = 15,fen = 22,miao = 33;




void timer0_init ()
{
EA = 1;
TMOD |= 0x01;
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256;
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)
{
flag = 1;
i = 0;
miao++;
if(60 == miao)
{
miao = 0;
fen++;
if(60 == fen)
{
fen = 0;
shi++;
if(24 == shi)
{
shi = 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(10);
E = 0;
}


void lcd_dis_char(unsigned char x,unsigned char y,unsigned char byte)
{
    if(y == 0)
{
lcd_write(x + 0x80,LCD_WRITE_COM);
}
else
{
lcd_write(x + 0x80 + 0x40,LCD_WRITE_COM);
}
lcd_write(byte,LCD_WRITE_DATA);
}




void lcd_dis_str(unsigned char x,unsigned char y,unsigned char *src)
{
if(y == 1)
{
lcd_write(x + 0x80,LCD_WRITE_COM);
}
else
{
lcd_write(x + 0x80 + 0x40,LCD_WRITE_COM);
}
while(*src != '\0')
{
lcd_write(*src,LCD_WRITE_DATA);
src++;
}
}


void lcd_init()
{
 delay_ms(15);
 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(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);  
}


void lcd_dis_time()
{
lcd_write(4 + 0x80,LCD_WRITE_COM);
lcd_write(shi / 10 + 0x30,LCD_WRITE_DATA);
lcd_write(shi % 10 + 0x30,LCD_WRITE_DATA);
lcd_write(':',LCD_WRITE_DATA);
lcd_write(fen / 10 + 0x30,LCD_WRITE_DATA);
lcd_write(fen % 10 + 0x30,LCD_WRITE_DATA);
lcd_write(':',LCD_WRITE_DATA);
lcd_write(miao / 10 + 0x30,LCD_WRITE_DATA);
lcd_write(miao % 10 + 0x30,LCD_WRITE_DATA);
}




//----Цs----


void lcd_dis_self()
{
lcd_write(0x40,LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x0a,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);

lcd_write(0x80,LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);

lcd_write(0x48,LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x0a,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);

lcd_write(0x82,LCD_WRITE_COM);
lcd_write(0x1,LCD_WRITE_DATA);


lcd_write(0x50,LCD_WRITE_COM);
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(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
 
lcd_write(0x80+1+0x40,LCD_WRITE_COM);
lcd_write(0x2,LCD_WRITE_DATA);
}








void lcd_dis_charge()
{

static unsigned char i = 0;
lcd_write(0x40,LCD_WRITE_COM); //

lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);

if(i < 4)
{
lcd_write(0x11,LCD_WRITE_DATA);
}
else
{
lcd_write(0x1f,LCD_WRITE_DATA);
}

if(i < 3)
{
lcd_write(0x11,LCD_WRITE_DATA);
}
else
{
lcd_write(0x1f,LCD_WRITE_DATA);
}

if(i < 2)
{
lcd_write(0x11,LCD_WRITE_DATA);
}
else
{
lcd_write(0x1f,LCD_WRITE_DATA);
}

if(i < 1)
{
lcd_write(0x11,LCD_WRITE_DATA);
}
else
{
lcd_write(0x1f,LCD_WRITE_DATA);
}

i++;
if(i == 5)
{
i = 0;
}
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80+15,LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
}




void main()
{
 timer0_init();
 lcd_init();
// lcd_write(0x80,LCD_WRITE_COM);
// lcd_write('a',LCD_WRITE_DATA);
 //lcd_dis_char(2,0,'q');
 //lcd_dis_str(2,1,"aaassss");
lcd_dis_self();
 while(1)
   {
 lcd_dis_time();
 if(flag)
 {
lcd_dis_charge();
flag = 0;
 }  
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值