#include "at89x52.h"
#include "absacc.h"
#include "intrins.h"
#include "stdlib.h"
#include "stdio.h"//
#define UCHAR unsigned char
#define UINT unsigned int
UINT i;
UCHAR SystemError; /*i2c出错标志*/
UCHAR data buff[16]; /*缓冲数组1,从0-5分别存个位,十位,计数常数两位,计数标志,予留2位*/
UCHAR data *buff_point, *checksum; /*数组1指针*/
UCHAR bdata err_flag; /*输入错误标志*/
unsigned long id;
const unsigned char LCD_table[10]={0xFA,0x60,0xd6,0xF4,0x6C,0xBC,0xBE,0xE0,0xFE,0xFC};
/*LCD显示表,发送数据方式为MSB a,b,c,d,f,g,e,dp LSB*/
extern I2CStart(); /*i2c启动*/
extern I2CSendByte(uchar);/*i2c发送一个字节*/
extern WaitAck(); /*i2c等应答信号*/
extern I2CReceiveByte(); /*i2c接收一个字节*/
extern SendAck(); /*i2c发送应答信号*/
extern SendNotAck(); /*i2c不发应答信号*/
extern I2CStop(); /*i2c停止*/
extern I2CInit(); /*i2c初始化*/
sbit clr_watchdog=P1^4; /*看门狗清除*/
sbit work_p=P1^5;
void init(); /*初始化函数*/
unsigned char LCD_send(unsigned int dis_flag); /*LCD显示发送数据函数*/
//void pulse_count(void); /*脉冲计数函数*/
void delay_10ms(); /*延时10 ms函数*/
void init_serialcomm(void); /*通信中断等初始化函数*/
void int_lcd(void); /*LCD显示初始化函数*/
/*=================================================================
主函数
=================================================================*/
main(void)
{
init(); /*调用初始化函数*/
init_serialcomm();
for(;;)
{
LCD_send(1);
clr_watchdog=~clr_watchdog;
}
}
/*=================================================================
初始化函数
=================================================================*/
void init()
{
work_p=1;
i=0;
P1=0xFF; /*各寄存器初始化*/
//EA=0;
clr_watchdog=~clr_watchdog; /*清看门狗*/
I2CInit(); /*i2c初始化*/
}
/*========================================================================
红外通信初始化
========================================================================*/
void init_serialcomm(void)
{
TMOD=0x01;
TH0=0xFC;
TL0=0x6C;
EA=1;
ET0=1;
TR0=1;
//ET0=1;
}
/*================================================================
延时10ms函数
================================================================*/
void delay_10ms()
{
UINT i;
for(i=0;i<5000;i++)
{}
}
/*================================================================
定时器中断函数,中断时间50ms
================================================================ */
void time0_int()interrupt 1 using 2
{
//UINT i;
i++;
if(i==90)
{
id++;
work_p=0;
}
if(i==1-90)
{
work_p=1;
i=0;
}
TMOD=0x01;
TH0=0xFC;
TL0=0x6C;
}
/*================================================================
定时器中断函数,中断时间50ms
================================================================ */
/* ========================================================================
LCD显示函数
========================================================================*/
unsigned char LCD_send(unsigned int dis_flag)
{
unsigned char lcd[7];
switch (dis_flag)
{
case 1:
lcd[5]=(id/100000)%10;
lcd[4]=(id/10000)%10;
lcd[3]=(id/1000)%10;
lcd[2]=(id/100)%10;
lcd[1]=(id/10)%10;
lcd[0]=id%10; break;
break;
default:
break;
}
I2CStart();
I2CSendByte(0x7C); //写3566地址
WaitAck();
I2CSendByte(0xE0); //写3566的器件选择字
WaitAck();
I2CSendByte(0xC8); //写3566的方式设定字
WaitAck();
I2CSendByte(0x80); //写3566的数据指针字
WaitAck();
I2CSendByte(0x70); //写3566的闪烁控制字
WaitAck();
if(dis_flag==2)
{
I2CSendByte(LCD_table[lcd[0]]+1);
WaitAck();
}
else
{
I2CSendByte(LCD_table[lcd[0]]);
WaitAck();
}
I2CSendByte(LCD_table[lcd[1]]);
WaitAck();
I2CSendByte(LCD_table[lcd[2]]);
WaitAck();
I2CSendByte(LCD_table[lcd[3]]);
WaitAck();
I2CSendByte(LCD_table[lcd[4]]);
WaitAck();
I2CSendByte(LCD_table[lcd[5]]);
WaitAck();
I2CStop();
delay_10ms();
return 0;
}