历史上的今天
今天是:2025年06月25日(星期三)
2018年06月25日 | 51单片机之LCD1602的驱动程序
2018-06-25 来源:eefocus
#include
#include "./delay/delay.h"
#define LCDPORT P0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
unsigned char flag = 1;
unsigned char shi = 23, fen = 59, miao = 50;
void lcd1602_write(unsigned char byte, unsigned char flag)
{
if(flag)
{
RS = 1; //选择输入的数据为数据
}
else
{
RS = 0; //选择输入的数据为命令
}
RW = 0; //写
E = 1; //选中lcd
LCDPORT = byte;
delay_ms(5);
E = 0; //失能LCD 高电平有效
}
void lcd_init()
{
delay_ms(15);
lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行指令,5*8点阵字符
delay_ms(5);
lcd1602_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd1602_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd1602_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd1602_write(0x08,LCD_WRITE_COM); //关闭显示,关闭光标和闪烁
delay_ms(5);
lcd1602_write(0x01,LCD_WRITE_COM); //清屏
delay_ms(5);
lcd1602_write(0x06,LCD_WRITE_COM); //设置指针方式,画面不平移
delay_ms(5);
lcd1602_write(0x0c,LCD_WRITE_COM); //设置指针方式,画面不平移
delay_ms(5);
}
void lcd_dis_char(unsigned char x, unsigned char y, unsigned char *s)
{
if(0 == x)
{
lcd1602_write(y + 0x80,LCD_WRITE_COM);
}
else if(1 == x)
{
lcd1602_write(y + 0xc0,LCD_WRITE_COM);
}
while(*s)
{
lcd1602_write(*s, LCD_WRITE_DATA);
s++;
}
}
void time0_init()
{
EA = 1;
TMOD |= 0x01;
TH0 = (65536 - 20000) / 255;
TL0 = (65536 - 20000) % 255;
ET0 = 1;
TR0 = 1;
}
void time0_isr() interrupt 1
{
static unsigned char i = 0;
TH0 = (65536 - 20000) / 255;
TL0 = (65536 - 20000) % 255;
i++;
if(50 == i)
{
i = 0;
miao++;
if(60 == miao)
{
miao = 0;
fen++;
if(60 == fen)
{
fen = 0;
shi++;
if(24 == shi)
{
shi = 0;
}
}
}
}
}
void lcd_diaplay_time() //时间的显示函数
{
lcd1602_write(0x80 + 7, LCD_WRITE_COM);
lcd1602_write((shi / 10) + 0x30,LCD_WRITE_DATA);
lcd1602_write((shi % 10) + 0x30,LCD_WRITE_DATA);
lcd1602_write(':',LCD_WRITE_DATA);
lcd1602_write((fen / 10) + 0x30,LCD_WRITE_DATA);
lcd1602_write((fen % 10) + 0x30,LCD_WRITE_DATA);
lcd1602_write(':',LCD_WRITE_DATA);
lcd1602_write((miao / 10) + 0x30,LCD_WRITE_DATA);
lcd1602_write((miao % 10) + 0x30,LCD_WRITE_DATA);
}
void lcd_dis_hex() //显示字符或数字
{
unsigned char temp = 0x2b;
lcd1602_write(0x80,LCD_WRITE_COM);
lcd1602_write((temp / 16) + 0x30,LCD_WRITE_DATA);
lcd1602_write((temp % 16) + 0x37,LCD_WRITE_DATA);
}
void main()
{
time0_init();
lcd_init();
lcd_dis_hex();
lcd_dis_char(0,2,"time:");
while(1)
{
lcd_diaplay_time();
}
}
上一篇:51单片机的LCD显示
史海拾趣
|
1 引言 为了以更低的功耗获得更高的速度和更佳的性能,要求电源电压越来越低,瞬态性能指标越来越高,因此对开关电源提出了越来越高的要求。用原有的电路拓扑及整流方式已不能满足现在的要求,为了适应IC芯片发展的需要,人们开始研 ...… 查看全部问答> |
|
今年的两会即将召开之际,让我想起去年此时火速蹿红的“山寨”一词。“山寨”一词在2009年3月就被带上了两会,并且再度火了一把, 与“躲猫猫”一起位列热门关键词前二位。 山寨机概念首先出现在IT行业。自从2001年始“联发科”先后在 ...… 查看全部问答> |
|
现象描述 1 用万用表测量VCC_1V2电源对地阻抗5欧左右。 2 刚上电mos管Q5就被烧掉。 3 断开R272,在R272的第2pin和地之间并一个电容,上电不会烧mos管,但是输出电压为3V。 4 Vous+通过飞线链接到电源输出端 输出电压稳定 ...… 查看全部问答> |
|
FPGA电源芯片的选择: FAPGA 电源芯片一般分为内核电源和IO电源。 怎样选择电源芯片的功耗大小这是一门学问。 电源芯片的大小跟所使用的逻辑门容量和速度都有关。速度越快,功耗需求越大。逻辑容量越大 ...… 查看全部问答> |
|
硬件结构图 这是我的源代码: #include #include typedef unsigned char byte; typedef unsigned int byte2; typedef unsigned long byte4; typedef byte bool; #define TRUE 1 #define FALSE 0 sbit CS = P0^0; sbit WR_CLK = P0^1; sbit ...… 查看全部问答> |
|
我写了一个在WINCE(5.0)下运行MFC程序,里面我用new分配了一个空间,然后用delete 释放,可是内存并没有被收回(通过看控制面板里的系统属性,总共内存数和使用内存数)? 代码如下: vector vct5(); fo ...… 查看全部问答> |
|
我用的是YLP2440的开发板,通过CE\\windows\\cpucheck.exe查看FCLK=200M。我在BSP中看到的MPLLCON=0X5C011,计算出来的FCLK=400。请问该板子FCLK究竟是多少?如果需要更改的话,是不是改BSP中MPLLCON就可以了?… 查看全部问答> |
|
我的毕业设计是DS18B20温度传感 + nRF24L01无线数传 + 232串口发送给PC + 上位机显示但是,师兄的要求是要图表形式显示温度变化串口助手见得多了,找一个也不费事。但是好像就没见过能用图表显示的。最开始的打算是自己把当初上课学过的LABVIEW重新 ...… 查看全部问答> |




