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

📄 万年历.c

📁 本程序实现 用1602 液晶显示 实现 万年历的现实。用MA 400 A的实验板
💻 C
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="clock ME-400-A";
uchar code table1[]="    00:00:00    ";
uchar clk_time[7];  //秒,分,时寄存器数组
sbit T_RST=P2^2;//ds1302-5
sbit T_IO=P2^3;//ds1302-6
sbit T_CLK=P2^4;//ds1302-7
sbit en=P2^5;
sbit rw=P2^6;
sbit rs=P2^7;
sbit led=P1^0;
sbit dula=P1^1;
sbit wela=P1^2;

sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
uchar num,clock_ss,clock_sg,clock_fs,clock_fg,
clock_ms,clock_mg,
taday_s,taday_g,
yue_s,yue_g,
xq,
year_s,year_g;
/******************DS1302:写入操作(上升沿)*********************/ 
void write_byte(uchar da)
{
   uchar i;
   ACC=da;
   led=0;
   for(i=8;i>0;i--)
   { 
      T_IO=ACC0;
	  T_CLK=0;     
      T_CLK=1;
      ACC=ACC>>1;
   }
}

/******************DS1302:读取操作(下降沿)*****************/
uchar read_byte(void)
{
   uchar i;led=0;
   for(i=0;i<8;i++)
   {
      ACC=ACC>>1;
	  T_CLK = 1;
	  T_CLK = 0;
      ACC7 = T_IO;
   }
   return(ACC);

}

/******************DS1302:写入数据(先送地址,再写数据)***************************/ 
void write_1302(uchar addr,uchar da)
{
   T_RST=0;    //停止工作
   T_CLK=0;                                 
   T_RST=1;   //重新工作
   write_byte(addr);    //写入地址
   
   write_byte(da);
   T_RST=0;
   T_CLK=1;
}

/******************DS1302:读取数据(先送地址,再读数据)**************************/
uchar read_1302(uchar addr)
{
   uchar temp;
   T_RST=0;                                   //停止工作
   T_CLK=0;  
   T_RST=1;                         //重新工作
   write_byte(addr);   //写入地址
   temp=read_byte();
   T_RST=0;
   T_CLK=1;     //停止工作
   return(temp);
}





/***********************延时程序=a*1ms**************************************/
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
void write_com(uchar com)
{  led=0;
	rs=0;
	P0=com;
	delay(5);
	en=1;
	delay(5);
	en=0;
}

void write_data(uchar date)
{   led=0;
	rs=1;
	P0=date;
	delay(5);
	en=1;
	delay(5);
	en=0;
}
void init()
{   P0=0xff;
    delay(5);
    led=1;
    P0=0xff;
    led=0;
	dula=0;
	wela=1;
     delay(5);
    wela=0;//关ME-400开发板数码管
    rw=0;
	en=0;
	write_com(0x38);//设置液晶
	write_com(0x0c);//设光标等
	write_com(0x06);//写一个字符地址指针加1且光标加1
	write_com(0x01);//清屏
	write_com(0x80);//设置地址指针
}
void display()
{       clock_ms=clk_time[0]/ 16;  clock_mg=clk_time[0]%16;
         
        clock_fs=clk_time[1]/ 16;  clock_fg=clk_time[1]%16;
       
        clock_ss=clk_time[2]/ 16;   clock_sg=clk_time[2]%16;
        
		taday_s=clk_time[3]/ 16;   taday_g=clk_time[3]%16;
         
        yue_s=clk_time[4]/ 16;      yue_g=clk_time[4]%16;
       
        xq=clk_time[5]%16;
        year_s=clk_time[6]/ 16;      year_g=clk_time[6]%16;
       
     write_com(0x80);
     write_data(0x30+year_s); 
     write_data(0x30+year_g);
     write_data('/');
     write_data(0x30+yue_s); 
     write_data(0x30+yue_g);
     write_data('/');
     write_data(0x30+taday_s); 
     write_data(0x30+taday_g);
     write_data('/');
     write_data(0x30+xq);     
   write_com(0x80+0x44);
   write_data(0x30+clock_ss);
   write_com(0x80+0x45);
   write_data(0x30+clock_sg);
   write_com(0x80+0x47);
   write_data(0x30+clock_fs);
   write_com(0x80+0x48);
   write_data(0x30+clock_fg);
   write_com(0x80+0x4a);
   write_data(0x30+clock_ms);
   write_com(0x80+0x4b);
   write_data(0x30+clock_mg);
}
void main()
{
   uchar  temp=0x80;          
   uchar i;
	init();
/*	for(num=0;num<14;num++)
	{
		write_data(table[num]);
		delay(20);
	}*/

	write_com(0x80+0x40);
	for(num=0;num<15;num++)
	{
		write_data(table1[num]);
		delay(20);
	}
	/*for(num=0;num<16;num++)
	{
		write_com(0x18);
		delay(20);
	}*/
	while(1)
     {
	   display();

	  temp=0x81;                    
      for(i=0;i<7;i++)
 	  {
	     clk_time[i]=read_1302(temp);
		 temp+=2;
	  }

	 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -