好文档 - 专业文书写作范文服务资料分享网站

单片机常用总线讲解

天下 分享 时间: 加入收藏 我要投稿 点赞

第八章 单片机常用总线讲解

sclk=1; // sclk信号上跳

sclk=0; //返回低电平,为下次上跳做准备 . . .

i/o=a7; //直到命令最后一位

sclk=1; sclk=0; i/o=a0; sclk=1; sclk=0; i/o=a1; sclk=1; sclk=0; . . .

i/o=a7; sclk=1; sclk=0; ce=0; sclk=1;

例:试验数码管显示时钟 实验链接图8-21如下所示: // sclk信号上跳,到此为止,命令字节发送完毕//以下为写数据操作

// sclk信号下跳,为发送数据做准备 //将输出的命令a0送上i/o数据线 // sclk信号上跳

//返回低电平,为下次上跳做准备 //将输出的命令a1送上i/o数据线 // sclk信号上跳

//返回低电平,为下次上跳做准备 //直到写入命令最后一位

// sclk信号上跳,到此为止,命令字节发送完毕 // sclk信号下跳,为下次上跳做准备 //结束一次数据写入操作

. . ..

图8-21 DS1302与89C2051的连接图 注意:短路冒一定要接上。

通过本例程了解 DS1302时钟芯片的基本原理和使用 ,理解并掌握DS1302时钟芯片驱动程序的编写以及实现数字字符在数码管中的显示。

请学员认真消化本例程,懂DS1302在C语言中的操作

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include sbit SCK=P3^6; //时钟 sbit SDA=P3^4; //数据 sbit RST = P3^5; // DS1302复位 sbit LS138A=P2^2; sbit LS138B=P2^3; sbit LS138C=P2^4;

bit ReadRTC_Flag; //定义读DS1302标志

unsigned char l_tmpdate[7]={0,0,12,15,5,3,8};//秒分时日月周年08-05-15 12:00:00 unsigned char l_tmpdisplay[8];

code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 最低位读写位

code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

.v .. ..

第八章 单片机常用总线讲解

//共阴数码管 0-9 '-' '熄灭‘表

/******************************************************************/ /* 函数声明 */

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

void Write_Ds1302_byte(unsigned char temp);

void Write_Ds1302( unsigned char address,unsigned char dat ); unsigned char Read_Ds1302 ( unsigned char address ); void Read_RTC(void);//read RTC void Set_RTC(void); //set RTC void InitTIMER0(void);//inital timer0

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

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

InitTIMER0(); //初始化定时器0

Set_RTC(); //写入时钟值,如果使用备用电池时候,不需要没每次上电写入,此程序应该屏蔽

while(1) {

if(ReadRTC_Flag) {

ReadRTC_Flag=0;

Read_RTC();

l_tmpdisplay[0]=l_tmpdate[2]/16; //数据的转换,因我们采用数码管0~9的

显示,将数据分开

l_tmpdisplay[1]=l_tmpdate[2]&0x0f; l_tmpdisplay[2]=10;

//加入\

l_tmpdisplay[3]=l_tmpdate[1]/16;

. . ..

}

} }

l_tmpdisplay[4]=l_tmpdate[1]&0x0f; l_tmpdisplay[5]=10;

l_tmpdisplay[6]=l_tmpdate[0]/16; l_tmpdisplay[7]=l_tmpdate[0]&0x0f;

/******************************************************************/ /* 定时器0初始化 */

/******************************************************************/ void InitTIMER0(void) {

TMOD|=0x01;//定时器设置 16位 TH0=0xef;//初始化值 TL0=0xf0; ET0=1; TR0=1; EA=1; }

/******************************************************************/ /* 写一个字节 */

/******************************************************************/ void Write_Ds1302_Byte(unsigned char temp) {

unsigned char i;

for (i=0;i<8;i++) //循环8次 写入数据 { SCK=0;

SDA=temp&0x01; //每次传输低字节 temp>>=1;

//右移一位

.v .. ..

第八章 单片机常用总线讲解

SCK=1; } }

/******************************************************************/ /* 写入DS1302 */

/******************************************************************/ void Write_Ds1302( unsigned char address,unsigned char dat ) {

RST=0;

_nop_();

SCK=0;

_nop_();

RST=1;

_nop_(); //启动 Write_Ds1302_Byte(address); //发送地址 Write_Ds1302_Byte(dat); RST=0; }

/******************************************************************/ /* 读出DS1302数据 */

/******************************************************************/ unsigned char Read_Ds1302 ( unsigned char address ) {

unsigned char i,temp=0x00; RST=0;

_nop_(); _nop_();

//发送数据

//恢复

SCK=0;

_nop_(); _nop_();

单片机常用总线讲解

第八章单片机常用总线讲解sclk=1;//sclk信号上跳sclk=0;//返回低电平,为下次上跳做准备...i/o=a7;//直到命令最后一位sclk=1;
推荐度:
点击下载文档文档为doc格式
0xo5u5tf9k565jb3urou8mpoj7oc3w00zof
领取福利

微信扫码领取福利

微信扫码分享