📄 saa1064.c
字号:
#include "reg92x.h"
#define I2CBus_ACK 0x44
#define I2CBus_NOACK 0x40
#define I2CRestart 0x64
#define I2CStop 0x54
#define SLAW 0x76
#define COM 0x77 //最小电流
#define SUBA 0x00
unsigned char Led_Buff[3];
void I2CStart(void)
{
//EI2C=1; //开I2C中断使能
I2CON=I2CRestart; //启动I2C总线
while(SI==0); //启动中...... 启动完毕SI=1
}
void I2CSend(unsigned char send)
{
I2DAT=send; //待发送数据装入I2DAT
I2CON=I2CBus_ACK; //清除SI准备发送
while(SI==0); //发送中...... 发送完毕SI=1
}
void SAA1064(void) //SAA1064芯片驱动
{
unsigned char i=0;
I2CStart(); //启动I2C
I2CSend(SLAW); //发送从器件地址
if(I2STAT!=0x18) //发送完毕后检验是否有应答
{
I2CON=I2CStop; //如果没有应答就停止I2C总线
}
I2CSend(SUBA); //发送从器件数据寄存器首地址
if(I2STAT!=0x28) //发送完毕后检验是否有应答
{
I2CON=I2CStop; //
}
I2CSend(COM); //发送从器件控制寄存器控制字
if(I2STAT!=0x28) //发送完毕后检验是否有应答
{
I2CON=I2CStop; //
}
I2CSend(Led_Buff[0]); //3rd 7 Seg. data
if(I2STAT!=0x28)
{
I2CON=I2CStop;
}
I2CSend(Led_Buff[1]); //2nd 7 Seg. data
if(I2STAT!=0x28)
{
I2CON=I2CStop;
}
I2CSend(0); //Empty
if(I2STAT!=0x28)
{
I2CON=I2CStop;
}
I2CSend(Led_Buff[2]); //1st 7 Seg. data
if(I2STAT!=0x28)
{
I2CON=I2CStop;
}
I2CON=I2CStop; //数据发送完毕释放总线
}
void WatchdogInitial(void)
{/*设置复位时间为1s*/
WDL=0xE0;
WDCON=0xC5;
WFEED1=0xA5;
WFEED2=0x5A;
}
void PoweronDelay (void)
{/*上电后延时300ms等待电源工作稳定*/
unsigned int m,n;
for (m=0;m<=250;m++)
{
for(n=0;n<=250;n++)
{
}
}
}
void CpuInitial (void)
{
PCON=0x80; //SMOD1=1,SMOD0=0串口波特率单倍,确定UART工作模式;
PCONA=0; //电源控制寄存器设置;
DIVM=0; //使用片内RC振荡器,fosc=7.3728MHz;
IEN0=0; //禁止一切中断
IEN1=0; //------------
PSW=0; //bank 0
TMOD=0x11; //设置Timer0、Timer1工作方式1
TCON=0; //关闭定时计数器
TH0=0; //预存数值清零
TL0=0;
TH1=0;
TL1=0;
IP0H=0x12; //中断优先级别 UART > timer0 > timer1 其余默认值
IP0=0x18;
EA=1; //开中断管制
}
void CpuioInitial (void)
{
//P0M1=0xF9;
P0M1=0x31;
//P0M2=0xCF;
P0M2=0;
P1M1=0xFC;
P1M2=0x1C;
P3M1=0x03;
P3M2=0x02;
P1=0x0F; //IIC UART 4引脚未用状态不能为0
}
void I2CBaudrateInitial(void)
{
I2SCLH=0x4B; //设置波特率25kbps
I2SCLL=0x4B; //占空比50%
}
void UartInitial(void)
{/*BaudRate=CCLK/[(BRGR1,BRGR0)+16]*/
SCON=0xF0; //工作模式3,从机地址0xFF
SSTAT=0x20; //独立的TX/RX中断,无双缓冲
BRGR1=0x02;
BRGR0=0xF0; //9600 bps @ 7.3728MHz
BRGCON=0x03; //启动BRG(Baud Rate Generator)
ESR=1; //开接收中断ES Rx,只收不发
}
void Feeddog (void)
{/*循环喂狗*/
EA=0;
WFEED1=0xA5;
WFEED2=0x5A;
EA=1;
}
void main (void)
{
WatchdogInitial();
PoweronDelay();
CpuInitial();
CpuioInitial();
UartInitial();
I2CBaudrateInitial();
while(1)
{
Distance();
ExchgtoNum();
Charto7Seg();
SAA1064();
Feeddog();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -