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

📄 shixu.c

📁 使用keilc编译 是对时钟芯片的编程 的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
-----------------文件信息---------------------------------------------
	文	件	名:		shixu.c
	版 		本:		V1.0
	创	建	人:		张荣贤
	最后修改日期:	2005-12
	描		述:		车道灯时序控制板(首信合作项目)

-----------------历史版本信息-----------------------------------------
	创	建	人:
	版		本:
	日		期:
	描		述:		原始版本

-----------------当前版本修订-----------------------------------------
	修	改	人:
	版		本:
	日		期:
	描		述:

----------------------------------------------------------------------
*/

/*
**********************************************************************
引用外部变量、结构、函数声明
**********************************************************************
*/
extern void DS887_Init (void);
extern void set_alarmtime(unsigned char hh,unsigned char mm);
extern void set_normaltime(void);
extern bit read_time(void);
extern struct TIME887 xdata t_rd;
extern struct TIME887 xdata t_wr;
extern bit time_OUT;

extern bit rx_UART0;
extern unsigned int xdata rx232_len0;
extern void deal_UART0(void);
extern unsigned char xdata rbuff_UART0[100];

extern bit rx_UART1;
extern unsigned int xdata rx232_len1;
extern void deal_UART1(void);
extern unsigned char xdata rbuff_UART1[100];

extern bit rx_zonghe;
extern unsigned char SJA1000_Init(void);
extern void transmit_CAN(void);

extern unsigned char xdata sbuff_CAN[11];
extern unsigned char xdata shixu_buff[11];
extern unsigned char xdata qudong_buff[10];
extern unsigned char xdata zonghe_buff[10];
extern unsigned char xdata tongx1_buff[10];
extern unsigned char xdata tongx2_buff[10];
extern unsigned char xdata jiance_buff[10];

/*
**********************************************************************
*头文件包含信息
**********************************************************************
*/
#include "paradef.h"

/*
**********************************************************************
本地参数定义,数据结构定义
**********************************************************************
*/
volatile unsigned char xdata qudong_addr _at_ 0x02;
volatile unsigned char xdata zonghe_addr _at_ 0x03;
volatile unsigned char xdata tongx1_addr _at_ 0x04;
volatile unsigned char xdata tongx2_addr _at_ 0x05;
volatile unsigned char xdata jiance_addr _at_ 0x06;
volatile unsigned char xdata bus[5];/*CAN总线状态*/
volatile unsigned char xdata err[5];/*CAN错误计数*/
volatile unsigned char xdata err_unit;/*故障驱动单元号*/
volatile struct Recorde xdata info;
bit eve_r;

/*历史记录时间,依次为:
授权设置,进入非自动,返回自动,电压恢复正常,电压高,电压低,
门1开,门1关,门2开,门2关,门3开,门3关*/
struct TIME887 xdata event[12];
//unsigned char const code leap[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
//unsigned char const code nleap[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

unsigned char xdata led_now;
unsigned char xdata t0_count;
unsigned char xdata millisecond;
bit dog_feed,sja_check;

unsigned char bdata door_state;
sbit door1 = door_state^0;
sbit door2 = door_state^1;
sbit door3 = door_state^2;
bit door_EN,lamp_EN,iotx_EN,loop_EN,clock_EN;

struct TIME887 xdata runtime;
bit in_hand,in_uart;

unsigned char xdata out_unit,out_value;
bit out_ON;

unsigned char xdata trns_freq,flsh_times;
unsigned char xdata wait_time,intev_time;
bit symb_out,slf_tst;

/*
**********************************************************************
函数原型声明
**********************************************************************
*/
void watchdog(void);
void delay(unsigned char count);
void rep_time(void);
void check_sja(void);
void tx_CAN(bit );
void read_door(void);
void time_clock(void);
void power_on(void);
void begin(void);
void CPU_Init(void);
void main(void);
void timer0(void);

/*
**********************************************************************
函数:void watchdog(void)
功能:看门狗
**********************************************************************
*/
void watchdog(void)
{
	dog_feed = 0;
	WDTDOG_LED = !WDTDOG_LED;
}

/*
**********************************************************************
函数:void delay(unsigned char count)
功能:延时
入口:延时计数值
说明:1->延时1,011us,100->延时99,966us,200->延时199,920us
**********************************************************************
*/
void delay(unsigned char count)
{
	unsigned char xdata i;
	for(; count > 0; count--)
	for(i = 0; i < 228; i++);
}

/*
**********************************************************************
函数:void rep_time(void)
功能:利用定时器0计算时钟
说明:时钟芯片出错后用该时钟替代恢复
**********************************************************************
*/
void rep_time(void)
{
	unsigned char xdata i;
	if(millisecond > 19)
	{
		i = millisecond/20;
		millisecond %= 20;
		runtime.seconds += i;
		if(runtime.seconds > 59)
		{
			runtime.seconds %= 60;
			runtime.minute++;
			if(runtime.minute > 59)
			{
				runtime.minute = 0;
				runtime.hour++;
				if(runtime.hour > 23)
				{
					runtime.hour = 0;
					runtime.date++;
					runtime.week++;
					if(runtime.week > 7)
					{
						runtime.week = 1;
					}
					if(runtime.month == 2)
					{
						if((2000+runtime.yearl)%4 == 0)
						{
							i = 29;
						}
						else
						{
							i = 28;
						}
					}
					else if(((runtime.month <= 7)&&(runtime.month%2 == 0))
						||(((runtime.month >= 8)&&(runtime.month%2 == 1))))
					{
						i=30;
					}
					else
					{
						i=31;
					}
					if(runtime.date >= i)
					{
						runtime.date = 1;
						runtime.month++;
						if(runtime.month > 12)
						{
							runtime.month = 1;
							runtime.yearl++;
						}
					}
				}
			}
		}
	}
 }

/*
**********************************************************************
函数:void check_sja(void)
功能:sja1000状态监测
**********************************************************************
*/
void check_sja(void)
{
	unsigned char data i;
	sja_check = 0;
	if((XBYTE[0x8000+2] > 0x0C)
	 ||(XBYTE[0x8000+6] != 0x0C)
	 ||(XBYTE[0x8000+7] != 0x5F)
	 ||(XBYTE[0x8000+8] != 0x1A)
	 ||(XBYTE[0x8000+9] != 0xAA))
	{
		i = SJA1000_Init();
	}
}

/*
**********************************************************************
函数:void tx_CAN(bit symbol)
功能:CAN发送,参数为1,要求驱动控制板必须存在且回答,为0,表示其他
说明:通用发送,并进行总线判断
**********************************************************************
*/
void tx_CAN(bit symbol)
{
	unsigned char data i,j;
	j = sbuff_CAN[0];
	*((volatile unsigned char xdata *)j) = OFF;
again:
	transmit_CAN();
	i = t0_count;
	while(1)
	{
		if(dog_feed) watchdog();
		if(rx_UART0)  deal_UART0();
		if(rx_UART1)  deal_UART1();
		if(*((volatile unsigned char xdata *)j) == ON)
		{
			bus[j-2] = ON;
			err[j-2] = 0;
			break;
		}
		if((t0_count-i) >= 2)
		{
			err[j-2]++;
			if(err[j-2] > 6)
			{
				bus[j-2] = OFF;
				err[j-2] = 0;
			}
			if(!symbol)
			{
				break;
			}
			goto again;
		}
	}
}

/*
**********************************************************************
函数:void test_lamp(void)
功能:灯具自诊断
说明:
**********************************************************************
*/
void test_lamp(void)
{
	sbuff_CAN[0] = QUDONG;
	sbuff_CAN[1] = LAMP_TEST;
	sbuff_CAN[2] = 2;
	memcpy(sbuff_CAN+3,rbuff_UART0+3,2);
	tx_CAN(1);
}

/*
**********************************************************************
函数:void output_symb(void)
功能:可变标志控制
说明:
**********************************************************************
*/
void output_symb(void)
{
	sbuff_CAN[0] = QUDONG;
	sbuff_CAN[1] = SYMB_CTRL;
	sbuff_CAN[2] = 2;
	memcpy(sbuff_CAN+3,rbuff_UART0+3,2);
	tx_CAN(1);
}

/*
**********************************************************************
函数:void uart_ctrl(void)
功能:上端控制
说明:
**********************************************************************
*/
void uart_ctrl(void)
{
	in_uart = 0;
	sbuff_CAN[0] = QUDONG;
	sbuff_CAN[1] = HEAD_CTRL;
	sbuff_CAN[2] = 5;
	memcpy(sbuff_CAN+3,rbuff_UART0+3,5);
	tx_CAN(1);
}

/*
**********************************************************************
函数:void uart0_ctrl(void)
功能:串口0控制车道
说明:
**********************************************************************
*/
void uart0_ctrl(void)
{
	sbuff_CAN[0] = QUDONG;
	sbuff_CAN[1] = LANE_CTRL;
	sbuff_CAN[2] = 2;
	sbuff_CAN[3] = rbuff_UART0[4];/*车道状态*/
	sbuff_CAN[4] = rbuff_UART0[3];/*内外环*/
	tx_CAN(1);
}

⌨️ 快捷键说明

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