lcd1602液晶
来源:互联网 发布:最强力的胶水知乎 编辑:程序博客网 时间:2024/05/01 11:08
include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>
sbit RS = P2^6; //定义端口
sbit RW = P2^5;
sbit EN = P2^7;
sbit SPK = P3^0;
unsigned char time[] = {'0','1','2','3','4','5','6','7','8','9'};
unsigned char *clock = "23:59:54";
unsigned char hour,minute,second = 58,num;
unsigned char keyscan1(void);
unsigned char updatetimerflag;
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
#define KEYPORT P1
void init_timer0();
void gong_zi();
void clock_1();
void clock_2();
void delayus(unsigned char t)
{
while(--t);
}
void delayms(unsigned char t)
{
while(t--)
{
delayus(245);
delayus(245);
}
}
//判忙函数
bit LCD_Check_Busy()
{
DataPort = 0xff;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit) (DataPort & 0x80);
}
//写入命令函数
void LCD_Write_Com(unsigned char com)
{
//while(LCD_Check_Busy()); //忙则等待
delayms(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort = com;
_nop_();
EN_CLR;
}
//写入数据函数
void LCD_Write_Data(unsigned char Data)
{
//while(LCD_Check_Busy()); //忙则等待
delayms(5);
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}
//清屏函数
void LCD_Clear()
{
LCD_Write_Com(0x01);
delayms(5);
}
//写入字符串函数
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if(y == 0)
{
LCD_Write_Com(0x80 +x);
}
else
{
LCD_Write_Com(0xc0+x);
}
while (*s)
{
LCD_Write_Data( *s);
s++;
}
}
//写入字符函数
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if(y == 0)
{
LCD_Write_Com(0x80 +x);
}
else
{
LCD_Write_Com(0xc0+x);
}
LCD_Write_Data(Data);
}
//初始化函数
void LCD_Init()
{
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08);
LCD_Write_Com(0x01);
LCD_Write_Com(0x06);
delayms(5);
LCD_Write_Com(0x0c);
}
/*void T0_time() interrupt 1
{
TH0 = 0XD8;
TL0 = 0XF0;
min_sec++;
if(min_sec == 100)
{
min_sec = 0;
sec++;
if(sec == 60)
{
sec = 0;
}
}
} */
//主函数
void main()
{
// unsigned char i;
// unsigned char *p;
LCD_Init();
LCD_Clear();
/* TMOD = 0X01;
TH0 = 0XD8;
TL0 = 0XF0;
EA = 1; //开总中断
ET0 = 1; //开定时器0
TR0 = 1; //启动定时器0*/
/* while(1)
{
i = 1;
p = "Hello World !";
LCD_Clear();
LCD_Write_String(2,0,"yzh");
delayms(250);
while(*p)
{
LCD_Write_Char(i,1,*p);
i++;
p++;
delayms(250);
}
delayms(250);
}
// gong_zi();
// clock_1();
// LCD_Write_Com(0x87);
// LCD_Write_Data(0x00);
} */
clock_2();
}
/*void gong_zi()
{
LCD_Write_Com(0x40);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x41);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x42);
LCD_Write_Data(0x04);
LCD_Write_Com(0x43);
LCD_Write_Data(0x04);
LCD_Write_Com(0x44);
LCD_Write_Data(0x04);
LCD_Write_Com(0x45);
LCD_Write_Data(0x04);
LCD_Write_Com(0x46);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x47);
LCD_Write_Data(0x1f);
}*/
#include<intrins.h>
sbit RS = P2^6; //定义端口
sbit RW = P2^5;
sbit EN = P2^7;
sbit SPK = P3^0;
unsigned char time[] = {'0','1','2','3','4','5','6','7','8','9'};
unsigned char *clock = "23:59:54";
unsigned char hour,minute,second = 58,num;
unsigned char keyscan1(void);
unsigned char updatetimerflag;
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
#define KEYPORT P1
void init_timer0();
void gong_zi();
void clock_1();
void clock_2();
void delayus(unsigned char t)
{
while(--t);
}
void delayms(unsigned char t)
{
while(t--)
{
delayus(245);
delayus(245);
}
}
//判忙函数
bit LCD_Check_Busy()
{
DataPort = 0xff;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit) (DataPort & 0x80);
}
//写入命令函数
void LCD_Write_Com(unsigned char com)
{
//while(LCD_Check_Busy()); //忙则等待
delayms(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort = com;
_nop_();
EN_CLR;
}
//写入数据函数
void LCD_Write_Data(unsigned char Data)
{
//while(LCD_Check_Busy()); //忙则等待
delayms(5);
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}
//清屏函数
void LCD_Clear()
{
LCD_Write_Com(0x01);
delayms(5);
}
//写入字符串函数
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if(y == 0)
{
LCD_Write_Com(0x80 +x);
}
else
{
LCD_Write_Com(0xc0+x);
}
while (*s)
{
LCD_Write_Data( *s);
s++;
}
}
//写入字符函数
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if(y == 0)
{
LCD_Write_Com(0x80 +x);
}
else
{
LCD_Write_Com(0xc0+x);
}
LCD_Write_Data(Data);
}
//初始化函数
void LCD_Init()
{
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08);
LCD_Write_Com(0x01);
LCD_Write_Com(0x06);
delayms(5);
LCD_Write_Com(0x0c);
}
/*void T0_time() interrupt 1
{
TH0 = 0XD8;
TL0 = 0XF0;
min_sec++;
if(min_sec == 100)
{
min_sec = 0;
sec++;
if(sec == 60)
{
sec = 0;
}
}
} */
//主函数
void main()
{
// unsigned char i;
// unsigned char *p;
LCD_Init();
LCD_Clear();
/* TMOD = 0X01;
TH0 = 0XD8;
TL0 = 0XF0;
EA = 1; //开总中断
ET0 = 1; //开定时器0
TR0 = 1; //启动定时器0*/
/* while(1)
{
i = 1;
p = "Hello World !";
LCD_Clear();
LCD_Write_String(2,0,"yzh");
delayms(250);
while(*p)
{
LCD_Write_Char(i,1,*p);
i++;
p++;
delayms(250);
}
delayms(250);
}
// gong_zi();
// clock_1();
// LCD_Write_Com(0x87);
// LCD_Write_Data(0x00);
} */
clock_2();
}
/*void gong_zi()
{
LCD_Write_Com(0x40);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x41);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x42);
LCD_Write_Data(0x04);
LCD_Write_Com(0x43);
LCD_Write_Data(0x04);
LCD_Write_Com(0x44);
LCD_Write_Data(0x04);
LCD_Write_Com(0x45);
LCD_Write_Data(0x04);
LCD_Write_Com(0x46);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x47);
LCD_Write_Data(0x1f);
}*/
0 0
- lcd1602液晶
- LCD1602 液晶
- 14.液晶LCD1602实验
- 液晶LCD1602实验
- STM32单片机的LCD1602液晶驱动移植过程
- 基于51单片机的LCD1602液晶驱动实现
- LCD1602
- LCD1602
- LCD1602
- LCD1602
- LCD1602
- LCD1602
- LCD1602
- LCD1602
- LCD1602
- lcd1602
- LCD1602
- lcd1602
- SRM 585 EnclosingTriangleColorful
- 使用log4cplus实现的分目录存放日志服务器完整工程+关键客户端代码
- 高频交易算法研发心得—最稳妥的低风险交易策略
- lcd显示时钟
- 微信小程序开发初级实践篇
- lcd1602液晶
- Spring源码解析-杂记
- Codeforces Round #392 (Div. 2)B (模拟)
- LCD液晶显示可调时钟
- Java中字符串与ASCII相互转换
- Tomcat – Java.Lang.OutOfMemoryError: PermGen Space
- 如何在WeX5中使用自己的tomcat并在修改代码后自动同步
- Android项目架构搭建必备
- MIT 线性代数(1—3)读书笔记