datasheet

SD7218A数码管驱动芯片实例程序

2018-01-14 20:24:55来源: eefocus 关键字:SD7218A  数码管  驱动芯片

功能说明:SD7218A 循环左移显示实例程序 

#include "reg52.h" 
#include "intrins.h" 
#define uchar unsigned char 
#define uint unsigned int 

sbit sda=P1^1;//;模拟I2C 数据传送位 


sbit scl=P1^2;//;模拟I2C 时钟控制状态标志 

void delay1(uint z)//延时为 1ms 
{  
uchar x,x1; 
for(;z>0;z--) 

for(x=0;x<114;x++) 

for(x1=0;x1<1;x1++); 


}  

void delay()//30us延时 

uchar i; 
i=30; 
while(i>0) 

i--; 




void star()//开始 

sda=1; 
delay();//5us延时 
scl=1; 
delay();//5us延时 
sda=0; 
delay();//5us延时 



void stop()//停止 

sda=0; 
delay();//5us延时 
scl=1; 
delay();//5us延时 
sda=1; 
delay();//5us延时 



void ack()//应答 
{ uchar z=0; 
while((sda==1)&&(z<50))z++;//条件判断, sda=1,则没有应答。如果没有应答则延时:z<50,z++;后返回 
scl=0; 
delay();//延时 


///写一个数据函数 
//器件写地址 slave_write_address 
//字节地址 byte_address 
//待写入数据 data_data 
void write(uchar slave_write_address,uchar data_data)//写一个数据 

uchar temp,temp1,i,ii; 

star();//开始 

for(ii=0;ii<2;ii++)//根据 24CXX文档资料,和时序图,按顺序送:器件写地址,字节地址,数据 
{  
if(ii==0) 

temp=slave_write_address;//送 器件写地址 
temp1=slave_write_address; 

else if(ii==1) 

temp=data_data;//送 数据 
temp1=data_data; 


for(i=0;i<8;i++) 

scl=0; 
delay();//延时 
temp=temp1; 
temp=temp&0x80;// 相 与 后,把不相关的位清零 

if(temp==0x80)//根据前面 相 与 后,判断 temp是否等于0x80,是则该位为 1 

sda=1;  
else 
sda=0; 

delay();//延时 
scl=1; 
delay();//延时 
scl=0; 
delay();//延时 
temp1=temp1<<1;//向左移出1位 


sda=1; 
delay();//延时 
scl=1; 
delay();//延时 
ack(); 

stop();//停止 


///读一个数据函数 
//器件写地址 slave_write_address 
//器件读地址 slave_read_address 
//字节地址 byte_address 
//读出的数据 data_data 

read(uchar slave_write_address)//读一个数据 

uchar temp,temp1,i,x,data_data; 

star();//开始 


temp=slave_write_address;//送 器件写地址 
temp1=slave_write_address; 

for(i=0;i<8;i++)//开始读数据 

scl=0; 
delay();//5us延时 
temp=temp1; 
temp=temp&0x80;// 相 与 后,把不相关的位清零 

if(temp==0x80)//根据前面 相 与 后,判断 temp是否等于0x80,是则该位为 1 

sda=1;  
else 
sda=0; 

delay();//延时 
scl=1; 
delay();//延时 
scl=0; 
delay();//延时 
temp1=temp1<<1;//向左移出1位 

sda=1; 
delay();//延时 
scl=1; 
delay();//延时 
ack();//应答 

for(x=0;x<8;x++) 

data_data=data_data<<1;//向左移入1位 

sda=1; 
delay();//延时 
scl=0; 
delay();//延时 
scl=1; 
delay();//延时 

if(sda==1)//判断 数据线是否是高电平 
data_data|=0x01;//把读到的数据 或 0X01  
//else  
//data_data|=0x00; 

ack();//应答 
stop();//停止 
return data_data;//返回读到的数据 



void init()//0x50 是器件写地址;0xff 是待写入的数据或指令) 

while(1) 

//write(0x50,0x6a);//测试指令: 
//write(0x50,0x68);//复位(清除)指令: 
//write(0x50,0x61);//左移指令: 
//write(0x50,0x62);//右移指令: 
delay1(1000); 
write(0x50,0x63);//循环左移指令: 
//write(0x50,0x64);//循环右移指令: 




void main() 
{  
uchar temp; 

init(); 

//delay1(1000);//写与读的时间间隔应大于5ms,取决于器件 24C02的响应速度 


//向器件读一个数据 

temp=read(0x51);//向器件读一个数据:(0xa0 是器件写地址;读出数据) 

while(1);//跳转,相当于汇编指令 JUMP $ 


关键字:SD7218A  数码管  驱动芯片

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018011437353.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:NTC热敏电阻高精度温度计程序
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved