⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 128×64简单的时钟.c

📁 采用AT89S51单片机的经典时钟程序
💻 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 + -