如何用C语言编写一个万年历系统

如何用C语言编写一个万年历系统,第1张

/这段是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液晶显示最简单的汇编程序(在屏上显示一个数字就行了,过程完整)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10218022.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存