毕设选题 单片机万年历(AT89C51 LCD12864、DS18B20、DS1302)

本文介绍了使用AT89C51单片机控制的万年历系统,集成LCD12864显示模块、DS18B20温度模块和DS1302时钟模块,实现显示实时时间和温度的功能,同时提供了部分关键代码示例。
摘要由CSDN通过智能技术生成

单片机万年历(LCD12864、DS18B20、DS1302)

一、简介

此电路由AT89C51最小电路板和LCD12864显示模块、DS18B20温度模块、DS1302时钟模块组成。
主要的功能是:显示实时的时间和当前的温度。

二、运行效果

在这里插入图片描述

三、部分代码



    #include 
    #include 
    #include 
    #include 
    
    unsigned char j[8];
    sbit KEY1=P3^2;
    sbit KEY2=P3^3;
    sbit KEY3=P3^4;
    sbit LED1=P3^5;
    sbit LED2=P3^6;
    sbit LED3=P3^7;
    
    uchar time0_count; 	//time0¼ÆÊýÆ÷
    
    void delay10(void)
    {
    	unsigned char i,j;
    	for(i=0;i<255;i++)
    	for(j=0;j<200;j++);
    }
    
    unsigned char conver(unsigned char a,unsigned char b,unsigned char c)
    {	
     
    	if((a&0x0f)==0x0a) a=a+6;
      	if(a==b)  a=c;
    	return a;
    }
    
    main() 
    {	
    		bit flag_2=1;
    		bit flag_3=1;
    		bit flag_4=1;
    		int i;		 
    		char a;	   
    		unsigned  char  choose=0x01;
    
    		InitLCD();	  //³õʼ»¯LCD12864
    
    		for(i=0;i<13;i++)
    		{
    			ShowNumber(6,i*8+16,i+14);
    		}
    
    		Show32x32(0,0,0);
    		ShowChina(4,0,7);
    		ShowChina(4,16,8);
    		ShowChina(4,32,9);
    		ShowChina(4,48,10);
    		ShowNumber(4,64,10);	  //ÏÔʾζȸßλ
    		read_serial(j);			  //¶ÁÈ¡DS1302µÄʱ¼ä
    
    	  ShowNumber(2,32,j[2]>>4&0x03);
    		ShowNumber(2,40, j[2]&0x0f);
    		ShowChina(2,48,3);
    		ShowNumber(2,64,j[1]>>4&0x07);
    		ShowNumber(2,72, j[1]&0x0f);
    		ShowChina(2,80,4);
    		ShowNumber(2,96,j[0]>>4&0x07);
    		ShowNumber(2,104, j[0]&0x0f);
    		ShowChina(2,112,5);


    	  ShowNumber(0,32,j[6]>>4&0x0f);
    		ShowNumber(0,40, j[6]&0x0f);
    		ShowChina(0,48,0);
    		ShowNumber(0,64,j[4]>>4&0x01);
    		ShowNumber(0,72, j[4]&0x0f);
    		ShowChina(0,80,1);
    		ShowNumber(0,96,j[3]>>4&0x03);
    		ShowNumber(0,104, j[3]&0x0f);
    		ShowChina(0,112,2);
    
    		ShowChina(4,104,6); 
    		ShowNumber(4,120,j[5]-1&0x07);
    	
    		while(1)
    		{
    			
    				if(flag_2==1)
    				read_serial(j);			  			//¶ÁÈ¡DS1302µÄʱ¼ä
    				else 
    				write_date_time(j);
    
    				a=Read_Temperature();	  		//¶ÁÈ¡DS18B20µÄζÈ
    				if(a<0)					  					//´¦ÀíζÈÕý¸º
    				{	
    						a = (-1)*a; 						// È¡²¹
    						ShowNumber(4,72,11);	  //ÏÔʾζÈÕý¸º
    				}
    				else 
    				{ 
    						ShowNumber(4,72,12);	  //ÏÔʾζÈÕý¸º
    				}
    				ShowNumber(4,80,a/100);	  	//ÏÔʾζȸßλ
    				ShowNumber(4,88,a/10%10);  //ÏÔʾζÈÖÐλ
    				ShowNumber(4,96,a%10);	   	//ÏÔʾζȵÍλ
    
    				LED3=1;LED2=0;LED1=1;
    				if(a>40){LED3=0;LED2=1;LED1=1;}
    				if(a<30){LED3=1;LED2=1;LED1=0;}
    
    				if(KEY1==0)				  //°´¼ü1--´¦ÀíÉ趨ʱ¼äºÍ·µ»Ø
    				{
    					delay10();
    					if(KEY1==1)
    					{
    						delay10();
    						flag_2=~flag_2;	
    					}
    				}
    
    				if(KEY2==0)				  //°´¼ü2--´¦ÀíÑ¡ÔñÉ趨ʱ¼äµÄÏîÄ¿
    				{ 
    					delay10();
    					if(KEY2==1)
    					{
    						delay10();
    						choose++;
    						if(choose==8)
    						choose=0x01;
    					}	
    				}
    
    				if(KEY3==0)				  //°´¼ü3--´¦ÀíÉ趨ʱ¼äºÍ·µ»Ø
    				{	delay10();
    					if(KEY3==1)
    					{
    						delay10(); 
    						switch(choose)
    						{
    							case 1:	j[6]++; j[6]=conver(j[6],0xa0,0x00);break;//Äê
    							case 2:	j[5]++; j[5]=conver(j[5],0x07,0x00);break;//ÖÜ
    							case 3:	j[4]++;	j[4]=conver(j[4],0x13,0x01);break;//ÔÂ
    							case 4:	j[3]++;	j[3]=conver(j[3],0x32,0x01);break;//ÈÕ
    							case 5:	j[2]++;	j[2]=conver(j[2],0x24,0x00);break;//ʱ
    							case 6:	j[1]++;	j[1]=conver(j[1],0x60,0x00);break;//·Ö
    							case 7:	j[0]++;	j[0]=conver(j[0],0x60,0x00);break;//Ãë
    						}
    					}	
    				}
    
    				if(flag_2==1)
    					read_serial(j);			  //¶ÁÈ¡DS1302µÄʱ¼ä
    				else 
    					write_date_time(j);


    				//ʱ·ÖÃë
    				ShowNumber(2,32,j[2]>>4&0x03);
    				ShowNumber(2,40, j[2]&0x0f);
    				ShowChina(2,48,3);
    				ShowNumber(2,64,j[1]>>4&0x07);
    				ShowNumber(2,72, j[1]&0x0f);
    				ShowChina(2,80,4);
    				ShowNumber(2,96,j[0]>>4&0x07);
    				ShowNumber(2,104, j[0]&0x0f);
    				ShowChina(2,112,5);
    
    				// ÄêÔÂÈÕ
    				ShowNumber(0,32,j[6]>>4&0x0f);
    				ShowNumber(0,40, j[6]&0x0f);
    				ShowChina(0,48,0);
    				ShowNumber(0,64,j[4]>>4&0x01);
    				ShowNumber(0,72, j[4]&0x0f);
    				ShowChina(0,80,1);
    				ShowNumber(0,96,j[3]>>4&0x03);
    				ShowNumber(0,104, j[3]&0x0f);
    				ShowChina(0,112,2);
    				ShowChina(4,104,6); 
    				ShowNumber(4,120,j[5]-1&0x07);
    
    		}
    }




项目获取:

https://gitee.com/feifei1122/simulation-project

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值