/这段是1602的库函数程序/
#define LCD_DATA P0
//控制口定义
sbit LCD_RS = P2^2;//LCD指令/数据寄存器选择
sbit LCD_RW = P2^1;//LCD读/写控制
sbit LCD_EN = P2^0;//LCD使能
sbit LCD_BF = P0^7;//LCD忙
code uchar num[ ]={'0','1','2','3','4','5','6','7','8','9'};
code uchar my[ ]={"DO IT YOURSELF"};
//延时
void Delay(uchar m)
{
uchar i;
for(i=0; i<m; ++i)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
//延时
void Delaynms(uchar n)
{
uchar i;
uchar j;
uchar k;
for(i=0; i<n; i++)
for(j=0; j<10; j++)
for(k=0; k<33; k++);
}
//LCD检查忙状态
void CheckBusy(void)
{
while(1)
{
LCD_EN = 0;
LCD_RS = 0;//指令
LCD_RW = 1;//读
LCD_DATA = 0xff;
LCD_EN = 1;
Delay(1);
if(!LCD_BF)
break;
}
LCD_EN = 0;
}
//LCD写入指令
void WIR(uchar i)
{
CheckBusy();
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
Delay(1);
LCD_DATA = i;
Delay(1);
LCD_EN = 1;
Delay(1);
LCD_EN = 0;
Delay(1);
}
//LCD写入数据
void WDR(uchar i)
{
CheckBusy();
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
Delay(1);
LCD_DATA = i;
Delay(1);
LCD_EN = 1;
Delay(1);
LCD_EN = 0;
Delay(1);
}
//LCD清屏
void CLS(void)
{
CheckBusy();
LCD_RS = 0;//指令
LCD_RW = 0;
LCD_DATA = 1;
LCD_EN = 1;
LCD_EN = 0;
}
//LCD移动光标到x,y,原点0,0
void MoveMouse(uchar x, uchar y)
{
if(y == 0)
WIR(0x80+x);
else if(y == 1)
WIR(0xc0+x);
}
//LCD输出字符串
void Prints(uchar p)
{
uchar i;
i=0;
while(1)
{
if(p == '\0')
break;
WDR(p);
++p;
}
}
//LCD向指定地址的CGRAM写入57自定义字符
void WCG(uchar cgd,uchar l1,uchar l2,uchar l3,uchar l4,uchar l5,uchar l6,uchar l7)
{
WIR(cgd);
WDR(l1);
++cgd;
WIR(cgd);
WDR(l2);
++cgd;
WIR(cgd);
WDR(l3);
++cgd;
WIR(cgd);
WDR(l4);
++cgd;
WIR(cgd);
WDR(l5);
++cgd;
WIR(cgd);
WDR(l6);
++cgd;
WIR(cgd);
WDR(l7);
++cgd;
WIR(cgd);
WDR(0x00);
}
//LCD初始化
void LCD_Start(void)
{
uchar i;
for(i=0; i<200; i++)
_nop_();
WIR(0x06);//光标右移,AC加1
WIR(0x0c);//显示器开,不显示光标
WIR(0x38);//数据为8位,显示2行,使用57点阵
CLS();
}
void Set_LCD_POS(uchar v)
{
WIR(v|0x80);
}
void DisplayHour()
{
unsigned char n,m;
n=hour/10; //取整运算,求得十位数字
m=hour%10; //取余运算,求得各位数字
MoveMouse(0x04,0); //写显示地址,将十位数字显示在第2行第5列
WDR(num[n]); //将十位数字的字符常量写入LCD
WDR(num[m]); //将个位数字的字符常量写入LCD
}
void DisplayMinute()
{
unsigned char n,m;
n=minute/10; //取整运算,求得十位数字
m=minute%10; //取余运算,求得各位数字
MoveMouse(0x07,0); //写显示地址,将十位数字显示在第2行第8列
WDR(num[n]); //将十位数字的字符常量写入LCD
WDR(num[m]); //将个位数字的字符常量写入LCD
}
void DisplaySecond()
{
unsigned char n,m;
n=second/10; //取整运算,求得十位数字
m=second%10; //取余运算,求得各位数字
MoveMouse(0,0); //写显示地址,将十位数字显示在第2行第11列
WDR(num[n]); //将十位数字的字符常量写入LCD
WDR(num[m]); //将个位数字的字符常量写入LCD
}
Str1是字符型数组,在内存中以ASCII码存储,而 str1[3]=JS/10000,表示JS对10000取整,JS是U8类型,最大255,无论如何 JS/10000 结果都为0,但0不是字符数据,需要加上0X30转换ASCII后,即可。 str1[3]=JS/10000+0x30;
; 1、LCD第一行显示: >
这是为你量身制作的,希望你能喜欢,光标根据按键在数字下面闪烁,一定符合你的要求,给你截了一张效果图
#include<reg52h>
#include<intrinsh>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code table[]="1602";
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
rw=0;
en=0;
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}
void write_dat(uchar dat)
{
rs=1;
rw=0;
en=0;
P0=dat;
delay(5);
en=1;
delay(5);
en=0;
}
void init()
{
uchar i;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x86);
for(i=0;i<4;i++)
{
write_dat(table[i]);
delay(5);
}
}
void main()
{
init();
while(1)
{
if(key1==0)
{
delay(10);
if(key1==0)
{
while(key1==0);
write_com(0x86);
write_com(0x0f);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
while(key2==0);
write_com(0x87);
write_com(0x0f);
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
while(key3==0);
write_com(0x88);
write_com(0x0f);
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
while(key4==0);
write_com(0x89);
write_com(0x0f);
}
}
}
}
以上就是关于如何用C语言编写一个万年历系统全部的内容,包括:如何用C语言编写一个万年历系统、用51单片机做实验,将数组在1602显示屏上显示.、求一个1602液晶显示最简单的汇编程序(在屏上显示一个数字就行了,过程完整)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)