📄 dsq_main.c
字号:
//本程序用于铁路道口管理等的定时记录等功能
//修改时间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 + -