zoukankan      html  css  js  c++  java
  • 利用51单片机制作的电子时钟

    最近研究起来了单片机,用的是国产STC98C52芯片。

    STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

    买了很长时间了可是一直在那里放着,今天重新拿出来写了一段电子时钟的C++程序,利用充电宝供电,当作电子时钟挺不错的。

    功能:

        4个七段数码管作为时钟显示的主体两个显示小时,两个显示分钟,8个LED灯作为秒数的闪烁,4个独立按键分别为hour+1,hour+10,minute+1,minute+10。

         查询LED电路,接入端为P1^0到P1^7。

                                          数码管采用了驱动芯片,接入端为P2^0到P2^3。

                                                                                 按键的接入端如图所示。


    有了各种电路的接入端,我们利用keil进行编程。

    /* 
    * Copyright (c) 2015,烟台大学计算机学院 
    * All right reserved. 
    * 作者:邵帅 
    * 文件:temp.c
    * 完成时间:2015年05月29日 
    */  
    #include <reg52.h>
    #define uchar unsigned char 
    sbit P2_0 = P2^0;
    sbit P2_1 = P2^1;
    sbit P2_2 = P2^2;
    sbit P2_3 = P2^3;
    sbit key1=P3^5;//按键
    sbit key2=P3^4;
    sbit key3=P3^3;
    sbit key4=P3^2;
    static unsigned char second,minute,hour;
    unsigned int tcount;
    unsigned char m;
    uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
                            0xf8,0x80,0x90};
    
    void delay(uchar i)
    {
      uchar j,k; 
      for(j=i;j>0;j--)
        for(k=125;k>0;k--);
    }
    
    void display()
    {
    
       P0=table[hour/10];
       P2_0 = 0;
       delay(5);
       P2_0 = 1;
    
       P0=(table[hour%10]& 0x7f);
       P2_1 = 0;
       delay(5);
       P2_1 = 1;
    
       P0=table[minute/10];
       P2_2 = 0;
       delay(5);
       P2_2 = 1;
    
       P0=table[minute%10];
       P2_3 = 0;
       delay(5);
       P2_3 = 1;
       
    }
    
    void main(void)
    {
        unsigned int  a;
    	TMOD=0x02;
        TH0=0x06;
        TL0=0x06;
        TR0=1;
        ET0=1;
        EA=1;
       
     while(1)
     {
       	if(key1==0)
    		{
    			if(key1==0)	  //确认按键被按下
    			{
    				while(!key1);//松手检测
    			     hour++;
    			}
    	   
    		}
    		if(key2==0)
    		{
    			if(key2==0)	 
    			{
    				while(!key2);
    			    hour=hour+10;
    			}
    		}
    		if(key3==0)
    		{
    			if(key3==0)	
    			{
    				while(!key3);
    				minute++;
    			}
    		}
    		if(key4==0)
    		{
    			if(key4==0)	  
    			{
    				while(!key4);
    				minute=minute+10;
    			}
    		}	
       for(a=100;a>0;a--)
       {
         display();
       }
     
     }
    }
    
     void t0(void) interrupt 1 using 0 
      {	
      tcount++;
        if(tcount==4000)
    	  {tcount=0;
    	    second++;
    		 if(second==60)
    		  {second=0;
    		   minute++;
    		    if(minute==60)
    			 {minute=0;
    			  hour++;
    
    			  if(hour==24)
    			   {hour=0;
    			   }
    			 }
    		  }
    		P1=~P1;
    	  }
    	}
    


    打包成hex文件,进行烧录。


    运行单片机!


    本来计划使用小米的盒子当外壳的,后来发现盒子有点小,就先裸机了,反正5V电不着~


    @ Mayuko

  • 相关阅读:
    java+opencv实现图像灰度化
    java实现高斯平滑
    hdu 3415 单调队列
    POJ 3368 Frequent values 线段树区间合并
    UVA 11795 Mega Man's Mission 状态DP
    UVA 11552 Fewest Flops DP
    UVA 10534 Wavio Sequence DP LIS
    UVA 1424 uvalive 4256 Salesmen 简单DP
    UVA 1099 uvalive 4794 Sharing Chocolate 状态DP
    UVA 1169uvalive 3983 Robotruck 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567484.html
Copyright © 2011-2022 走看看