PCF8576C及PCF8566T的C51驱动程序新编

更新时间:2024-05-24 01:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

PCF8576C/PCF8566T的C51驱动程序新编 原文载本人空间,以下为应用程序:

/******************************************************************** STC单片机驱动PCF8566/PCF8576演示程序: wannenggong原创 2013/9/28 控制器件:STC12C5A32S2 受控器件PCF8576或PCF8566

应用此程序前请浏览受控器件的数据手册或先了解器件的应用方法 注:单片机实验板的P0口外接有8*10K的上拉排电阻

*********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

#define PCF8566 0x7C //被控器总线地址

//#define PCF8576 0x72

#define PCF_MODE1 0xC8 //1/3偏置4背极SA0=0显示方式命令字 //#define PCF_MODE2 0xC9 //SA0=1静态显示方式命令字 #define SAX 0xE0 //A0,A1,A2的编码 单芯片时为000 sbit SDA=P0^1; //定义模拟I2C数据传送端口 sbit SCL=P0^2; //定义模拟I2C时钟控制端口 uchar wei=6; //LCD数码位数设定

/********************************************************************/ uchar Digit[]={0xd7,0x06,0xe3,0xa7,0x36,0xb5,0xf5,0x17,0xf7,0xb7,0xd7}; //{0,1,2,3,4,5,6,7,8,9,0}字形码;其定义方法参见硬件接线图。

/********************************************************************/ //延时程序==总线专用==1T/12MHz延时5微秒===== void delay() {

uchar a,b;

for(b=3;b>0;b--) for(a=8;a>0;a--); }

//延时程序==长延时==1T/12MHz延时time毫秒=====

void delay_long(uint time) {

uchar a,b,c;

for(c=time;c>0;c--) {

for(b=129;b>0;b--) for(a=45;a>0;a--); } }

/*********************************************************

启动总线函数 名称:START

描述:启动I2C 总线子程序--发送I2C 起始条件

*********************************************************/ void START() {

SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); SCL=0; delay(); }

/********************************************************* 停止总线函数 名称:STOP

描述:停止I2C 总线子程序--发送I2C总线停止条件

*********************************************************/ void STOP() {

SDA=0; delay(); SCL=1; delay(); SDA=1; delay(); SCL=0; delay(); }

/******************************************************** 应答信号 名称:ACK

描述:响应器件的应答

*********************************************************/ void ACK() {

SDA=1; delay(); SCL=1; delay(); SCL=0; delay(); }

/********************************************************* 发送一个字节函数 名称:SendByte

描述:字节数据传送子程序发送一个字节数据或地址给被控器 移位发送数据完成后发送总线应答信号

*********************************************************/ void SendByte(uchar Data) {

uchar i=8;

for(i=8;i>0;i--)

{

if((Data&0x80)==0x80)//提取数据最高位判断是1或是0 SDA=1; //如果数据是1就模拟发送1 else

SDA=0; //否则模拟发送0 delay();

SCL=1; //模拟时钟脉冲高电平

delay();

SCL=0; //形成时钟脉冲下跳沿完成一位数据发送 delay();

Data=Data<<1; delay();

} //8次循环后完成1个完整数据字节8位的发送 ACK(); //提供总线应答信号

}

/********************************************************************** 发送显示数据函数 名称:Display_Data

描述:发送指令或数据dat 注::

1.所有总线应答信号均由字节发送函数SendByte(uchar Data)提供

2.被控器件地址是器件在总线上的固有命令字、由器件给定、受SA0位接线的影响 3.除总线地址指令外其他指令可任意排列、需要注意的是 排列在最后的指令使C=0、不是最后一条指令的要使C=1

4.装载数据指针指令如果不在最后一条指令的位置、因C=1为0x80、否则为0x00 5.不闪烁命令字在最后的指令位置时为0x70、否则应为0xf0 若不需要闪烁设置、可以免除此指令 6.单器件应用时可以不发送器件地址指令

***********************************************************************/ void Display_Data(uchar dat)

{

uchar i=0;

START(); //启动总线 /*发送m个指令*/

SendByte(PCF8566); //发送被控器总线地址 SendByte(PCF_MODE1); //工作方式设定

SendByte(SAX); //总线上多器件时的器件地址 SendByte(0x80); //发送装载数据指针

SendByte(0x70); //不闪烁命令字为最后一条指令 /*发送n个显示数据*/ for(i=0;i

SendByte(dat);delay(); }

STOP(); }

/******************************************** 主函数

********************************************/ void main(void) {

delay_long(50); //等待器件进入稳定工作状态 Display_Data(0x00); //使显示数据为0清除屏显 delay_long(50); //等待清屏操作完成

while(1) {

uchar i;

for(i=0;i<10;i++) {

Display_Data(Digit[i]);//演示所有数码位同时显示0-9累加 delay_long(6000); } } }

本文来源:https://www.bwwdw.com/article/9co7.html

Top