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

📄 dsq_main.c

📁 单片机控制RTC(DS1302)时钟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
//本程序用于铁路道口管理等的定时记录等功能
//修改时间2009-3-7
//设计:魏兆俊
//版本:1.0

#include<reg52.h>
//#include<w77c32.h>
#include<stdio.h>
#include<intrins.h>
#include<absacc.h>

/*
版本说明

*/
#define uchar unsigned char
#define uint  unsigned int
#define true 1
#define faluse 0
#define on 1
#define off 0



sbit warm_control=P2^3;
sbit LED_BIT_A=P2^4;
sbit LED_BIT_B=P2^5;
sbit LED_BIT_C=P2^6;
sbit LED_BIT_D=P2^7;
sbit key_select=P2^0;
sbit key_inc=P2^1;
sbit key_dec=P2^2;




uchar led_scan_counter;
uchar display_counter;
uchar led_code[17];
uchar led_code_black[17];
uchar code led_code_ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xff};
uchar time_write[12];
uint light_on;
uchar  led_light_flag;




//CPU 系统初始化函数
void system_start();
void delay500ms();
//74HC154译码输出
void ym_out();
/********************************************************************
*
* 名称: v_Get1302
* 说明:
* 功能: 读取DS1302当前时间
* 调用: uc_R1302()
* 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 无
***********************************************************************/
void v_Get1302();
/********************************************************************
*
* 名称: v_Set1302
* 说明:
* 功能: 设置初始时间
* 调用: v_W1302()
* 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 无
***********************************************************************/
void v_Set1302();
//键盘处理函数
void key_function();
void delay5000ms();





//系统主程序
void main ()
  {
   uchar i;
  system_start();
  led_scan_counter=0;

  time_write[12]=0x9;
  time_write[11]=0x0;
  time_write[10]=0x03;
  time_write[9]=0x0;
  time_write[8]=0x0;
  time_write[7]=0x1;
  time_write[6]=0x2;
  time_write[5]=0x2;
  time_write[4]=0x5;
  time_write[3]=0x4;
  time_write[2]=0x4;
  time_write[1]=0x0;

//  v_Set1302();


  while (1)
   {

    v_Get1302();
    for (i=0;i<17;i++)
    {led_code_black[i]=led_code[i];}

//     led_code_black[7]=0x0b;
//     led_code_black[8]=0x0b;
      warm_control=on;
      key_function();

      delay500ms();
      delay500ms();
      delay500ms();
      delay500ms();
      delay500ms();
      delay500ms();

   }
   }


//键盘处理函数
void key_function()
      {
      led_light_flag=0;
key_function0:if (key_select==0)
         {delay5000ms();
          goto key_function1; }
         if (led_light_flag>0)
           {goto key_function_change; } 
         return;
key_function1:if (key_select==0)
              {goto key_function2;}
         if (led_light_flag>0)
           {goto key_function_change; } 
              return ;
key_function2:
              delay5000ms();
              delay5000ms();
              led_light_flag++;
              if (led_light_flag>14)
              {goto key_function_end;}
             switch  (led_light_flag)
                {
                 case 1:led_code_black[3]=0x0b;
                        break;
                 case 2:led_code_black[3]=led_code[3];
                        led_code_black[4]=0x0b;
                        break;
                 case 3:led_code_black[4]=led_code[4];
                        led_code_black[5]=0x0b;
                        break;
                 case 4:led_code_black[5]=led_code[5];
                        led_code_black[6]=0x0b;
                        break;
                 case 5:led_code_black[6]=led_code[6];
                        led_code_black[7]=0x0b;
                        break;
                 case 6:led_code_black[7]=led_code[7];
                        led_code_black[8]=0x0b;
                        break;
                 case 7:led_code_black[8]=led_code[8];led_code_black[9]=0x0b;
                        break;
                 case 8:led_code_black[9]=led_code[9];led_code_black[10]=0x0b;
                        break;
                 case 9:led_code_black[10]=led_code[10];led_code_black[11]=0x0b;
                        break;
                 case 10:led_code_black[11]=led_code[11];led_code_black[12]=0x0b;
                        break;
                 case 11:led_code_black[12]=led_code[12];led_code_black[13]=0x0b;
                        break;
                 case 12:led_code_black[13]=led_code[13];led_code_black[14]=0x0b;
                        break;
                 case 13:led_code_black[14]=led_code[14];led_code_black[15]=0x0b;
                        break;
                 case 14:led_code_black[15]=led_code[15];led_code_black[16]=0x0b;
                        break;
                        
                 default:
                         break;       
                 }   

              delay5000ms();
              delay5000ms();
              delay5000ms();
              delay5000ms();
              goto key_function0;
              
              
key_function_change:if (key_inc==0)                //判断是否有加减键
                     {goto key_function_change1;}
                     if(key_dec==0)
                     {goto key_function_change1;}
                     goto  key_function0; 
                     
key_function_change1:delay5000ms();
                     if (key_inc==0)
                       {goto key_inc_process;}
                     if (key_dec==0)
                        {
                         goto key_dec_process;}
                         delay5000ms();
                         delay5000ms();
                         delay5000ms();
                         delay5000ms();
                       goto key_function0;
//加键处理函数
key_inc_process:
                switch  (led_light_flag)
                     {
                      case 1:if (led_code[3]==9)
                             {led_code[3]=0;}else
                              led_code[3]=led_code[3]+1;
                             break;

                      case 2:if (led_code[4]==9)
                             {led_code[4]=0;}else
                              led_code[4]=led_code[4]+1;
                             break;
                      case 3:if (led_code[5]==9)
                             {led_code[5]=0;}else
                              led_code[5]=led_code[5]+1;
                             break;
                      case 4:if (led_code[6]==9)
                             {led_code[6]=0;}else
                              led_code[6]=led_code[6]+1;
                             break;
                      case 5:if (led_code[7]==9)
                             {led_code[7]=0;}else
                              led_code[7]=led_code[7]+1;
                             break;
                      case 6:if (led_code[8]==9)
                             {led_code[8]=0;}else
                              led_code[8]=led_code[8]+1;
                             break;
                      case 7:if (led_code[9]==9)
                             {led_code[9]=0;} else
                              led_code[9]=led_code[9]+1;
                             break;
                      case 8:if (led_code[10]==9)
                             {led_code[10]=0;}else
                              led_code[10]=led_code[10]+1;
                             break;
                      case 9:if (led_code[11]==9)
                             {led_code[11]=0;} else
                              led_code[11]=led_code[11]+1;
                             break;
                      case 10:if (led_code[12]==9)
                             {led_code[12]=0;}else
                              led_code[12]=led_code[12]+1;
                             break;
                      case 11:if (led_code[13]==9)
                             {led_code[13]=0;} else
                              led_code[13]=led_code[13]+1;
                             break;
                      case 12:if (led_code[14]==9)
                             {led_code[14]=0;}else
                              led_code[14]=led_code[14]+1;
                             break;
                      case 13:if (led_code[15]==9)
                             {led_code[15]=0;}else
                              led_code[15]=led_code[15]+1;
                             break;
                      case 14:if (led_code[16]==9)
                             {led_code[16]=0;} else
                              led_code[16]=led_code[16]+1;
                             break;
                      default:
                               break;

                      }
                      
              delay5000ms();
              delay5000ms();
              delay5000ms();
                     goto key_function0;
                                                        
//减键处理函数
key_dec_process:
                switch  (led_light_flag)
                     {
                      case 1:if (led_code[3]==0)
                             {led_code[3]=9;}else
                              led_code[3]=led_code[3]-1;
                             break;

                      case 2:if (led_code[4]==0)
                             {led_code[4]=9;}else
                              led_code[4]=led_code[4]-1;
                             break;
                      case 3:if (led_code[5]==0)
                             {led_code[5]=9;}else
                              led_code[5]=led_code[5]-1;
                             break;
                      case 4:if (led_code[6]==0)
                             {led_code[6]=9;} else
                              led_code[6]=led_code[6]-1;
                             break;
                      case 5:if (led_code[7]==0)
                             {led_code[7]=9;}else
                              led_code[7]=led_code[7]-1;
                             break;
                      case 6:if (led_code[8]==0)
                             {led_code[8]=9;} else
                              led_code[8]=led_code[8]-1;
                             break;
                      case 7:if (led_code[9]==0)
                             {led_code[9]=9;}else
                              led_code[9]=led_code[9]-1;
                             break;
                      case 8:if (led_code[10]==0)
                             {led_code[10]=9;}else
                              led_code[10]=led_code[10]-1;
                             break;
                      case 9:if (led_code[11]==0)
                             {led_code[11]=9;}else
                              led_code[11]=led_code[11]-1;
                             break;
                      case 10:if (led_code[12]==0)
                             {led_code[12]=9;} else
                              led_code[12]=led_code[12]-1;
                             break;
                      case 11:if (led_code[13]==0)
                             {led_code[13]=9;} else
                              led_code[13]=led_code[13]-1;
                             break;
                      case 12:if (led_code[14]==0)
                             {led_code[14]=9;}else
                              led_code[14]=led_code[14]-1;
                             break;
                      case 13:if (led_code[15]==0)
                             {led_code[15]=9;} else
                              led_code[15]=led_code[15]-1;
                             break;
                      case 14:if (led_code[16]==0)
                             {led_code[16]=9;} else
                              led_code[16]=led_code[16]-1;
                             break;
                      default:
                               break;

                      }
              delay5000ms();
              delay5000ms();
              delay5000ms();
                     goto key_function0;


                                 
key_function_end:
                time_write[12]=led_code[4];
                time_write[11]=led_code[3];
                time_write[10]=led_code[6];
                time_write[9]=led_code[5];
                time_write[8]=led_code[8];
                time_write[7]=led_code[7];
                time_write[6]=led_code[10];
                time_write[5]=led_code[9];
                time_write[4]=led_code[12];
                time_write[3]=led_code[11];
                time_write[2]=led_code[14];
                time_write[1]=led_code[13];
                v_Set1302();
                 return ;
               }

//74HC154译码输出

void ym_out()
    {
     if (light_on<1500)
       {P0=led_code_ma[led_code_black[led_scan_counter]];
       goto ym_out1;}
     if (light_on<3000)
      {P0=led_code_ma[led_code[led_scan_counter]];
      goto ym_out1;}
      light_on=0;

ym_out1:     switch (led_scan_counter)
         {
          case 2:
                 LED_BIT_A=1;
                 LED_BIT_B=1;
                 LED_BIT_C=1;
                 LED_BIT_D=1;
                 break;
          case 1:
                 LED_BIT_A=0;
                 LED_BIT_B=1;
                 LED_BIT_C=1;
                 LED_BIT_D=1;
                 break;
          case 4:
                 LED_BIT_A=1;
                 LED_BIT_B=0;
                 LED_BIT_C=1;
                 LED_BIT_D=1;
                 break;
          case 3:
                 LED_BIT_A=0;

⌨️ 快捷键说明

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