📄 128×64简单的时钟.c
字号:
#include <reg52.h>
#include <intrins.h>
sbit E = P1^2; // 使能端 //
sbit RW = P1^1; // 读写控制端 //
sbit RS = P1^0; // 数据或指令寄存器选择端 //
sbit psb= P1^3; //H=并口; L=串口;
sbit rst= P1^4; //Reset Signal 低电平有效
unsigned char code name00[]={"蚕种催青综合控制"};
unsigned char code name01[]={"温度 . 湿度 . "};
unsigned char code name02[]={"时间 "};
unsigned char code name03[]={"菜单 确定 取消"};
//unsigned char code name04[]={}
unsigned char hour,minute,second;
unsigned int counter=0; //250us计数单元
unsigned char n;
/****************/
void Show_Welcome(void);
/****************/
void delay_1(unsigned char tt)//延时1ms
{
unsigned char j;
while(tt--)
{
for(j=0;j<125;j++)
{;}
}
}
//******************/
void wr_com(unsigned char value)//写指令,写指令时必须为RS=0;RW=0;
{
E=0;
RS=0;
RW=0;
delay_1(1);
P0=value;
E=1;
delay_1(2); //如果没有延时就必须要加查忙指令
E=0;
}
//****************************/
void wr_data(unsigned char sj)//写数据,写数据时必须为 RS=1;RW=0;
{
E=0;
RS=1;
RW=0;
P0=sj;
E=1;
delay_1(1);//如果没有延时就必须要加查忙指令
E=0;
}
//**************************/
void reset (void)
{
rst=1;
psb=1;
wr_com(0x30);/*30---基本指令动作*/
wr_com(0x01);/*清屏,地址指针指向00H*/
wr_com(0x06);/*光标的移动方向*/
wr_com(0x0c);/*开显示,关游标*/
}
//********************************/
//outChinese 为函数名
//place 为显示地址的首地址
//unit 字符长度
//charcode[] 要显示数据的内容
void outChinese(unsigned char place,unsigned char unit,unsigned char charcode[] )
{
unsigned char i;
wr_com(place);
for(i=0;i<unit*2;i++)//一个汉字为两个字符
{wr_data(charcode[i]);}
}
//***********************************/
void outchar(unsigned char place,unsigned char unit,unsigned char charcode[] )
{
unsigned char i;
wr_com(place);
for(i=0;i<unit;i++)
{wr_data(charcode[i]);}
}
//***********************************/
void outonechar(unsigned char place,unsigned char t )
{
wr_com(place);
wr_data(t+48);
}
void display(unsigned char *s) //写字符串
{
for(;*s!='\0';s++)
wr_data(*s);
}
//**************************************/
void Show_Welcome(void)
{
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name01);//第二行:90-97H
outChinese(0x88,8,name02);//第三行:88-8fH
outChinese(0x98,8,name03);//第四行:98-9fH
}
/**********************************/
void timeinit(void)
{
TMOD=0x2;
TH0=0x6;
TL0=0x6;
TR0=1; //开中断
ET0=1;
EA=1;
hour=0; //设定时间初值
minute=53;
second=55;
}
////////////////////////////////////////////////////////////
void Timer0(void) interrupt 1 //T0中断服务函数
{
counter++;
if(counter==4000)
{
counter=0;
second++;
}
if(second==60) {second=0;minute++;}
if(minute==60) {minute=0;hour++;}
if(hour==24) {hour=0;}
}
main()
{
reset();
timeinit();
Show_Welcome();
while(1)
{
wr_com(0x8b);
n=hour/10;
wr_data(n+48); //单个字符显示,注意是映射码,液晶中是写入的内部规定的映射表
n=hour%10;
wr_data(n+48);
display(":");
n=minute/10;
wr_data(n+48);
n=minute%10;
wr_data(n+48);
display(":");
n=second/10;
wr_data(n+48);
n=second%10;
wr_data(n+48);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -