?? saa1064t.c
字號:
/*******************************************************************
* 使用器件實(shí)例 SAA1064T
* 使用LPC932的硬件I2C對SAA1064T進(jìn)行操作,先讀取PCF8574上的值,然
* 后輸出SAA1064進(jìn)行顯示。
*******************************************************************/
#include <Reg51.h>
#include "HI2C_C51.H"
#define uchar unsigned char
/* 定義LPC932的I2C相關(guān)寄存器的定義 */
sfr I2ADR = 0xDB;
sfr I2DAT = 0xDA;
sfr I2CON = 0xD8;
sfr I2STAT = 0xD9;
sfr I2SCLH = 0xDD;
sfr I2SCLL = 0xDC;
sbit STA = I2CON^5;
sbit SI = I2CON^3;
/* 定義LPC932的部分特殊寄存器 */
sfr TRIM = 0x96;
sfr DIVM = 0x95; /* CPU分頻設(shè)置寄存器 */
sfr P1M1 = 0x91;
sfr P1M2 = 0x92;
sbit LEDCON = P1^6;
/* 定義器件地址 */
#define SAA1064T 0x70
#define PCF8574 0x40
/*******************************************************************
* 長延時(shí)函數(shù)
* 軟件延時(shí)
* 入口參數(shù):no 延時(shí)長度設(shè)置
*******************************************************************/
void Delays(uchar no)
{ int i,j;
for(; no>0; no--)
{ for(i=0; i<500; i++)
for(j=0; j<500; j++);
}
}
/*******************************************************************
* 主函數(shù)
* 對SAA1064進(jìn)行設(shè)置--動(dòng)態(tài)顯示,電流等級3,接著顯示good字樣,延時(shí)一
* 定時(shí)間后讀取PCF8574上的數(shù)值,轉(zhuǎn)換后輸出SAA1064顯示出來。
*******************************************************************/
void main(void)
{ uchar code DISP_TAB[16]={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };
uchar disp_buf[5]; /* 定義顯示緩沖區(qū) */
uchar in_dat;
uchar i;
/* 由于使用內(nèi)部7.373MHz振蕩器時(shí),軟件包使用的I2C速度為123K,但SAA1064只能
支持100K的速度,所以要進(jìn)行時(shí)鐘的分頻,以降低總線速度。 */
DIVM = 2;
for(i=0; i<255; i++);
/* 由于上電復(fù)位時(shí)所用IO口設(shè)置為高阻態(tài),所以要進(jìn)行IO設(shè)置 */
P1M1 = 0x2C;
P1M2 = 0x0C;
LEDCON = 0;
disp_buf[0] = 0x47; /* 設(shè)置SAA1064工作模式 */
disp_buf[1] = 0x6f; /* 數(shù)字位1顯示'g' */
disp_buf[2] = 0x5c; /* 數(shù)字位2顯示'o' */
disp_buf[3] = 0x5c; /* 數(shù)字位3顯示'o' */
disp_buf[4] = 0x5e; /* 數(shù)字位4顯示'd' */
ISendStr(SAA1064T, 0, disp_buf, 5);
Delays(2); /* 延時(shí)操作 */
disp_buf[1] = 0x40; /* 數(shù)字位1顯示'-' */
disp_buf[2] = 0x40; /* 數(shù)字位2顯示'-' */
while(1)
{ if( IRcvByte(PCF8574, &in_dat)==0 )
{ LEDCON = ~LEDCON;
}
i = in_dat>>4;
disp_buf[3] = DISP_TAB[i];
i = in_dat&0x0f;
disp_buf[4] = DISP_TAB[i];
ISendStr(SAA1064T, 1, &disp_buf[1], 4);
for(i=0; i<255; i++);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -