完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
#include
#include #define uchar unsigned char #define uint unsigned int void radd_8583(); void shl(); void nack(); void pcf8583(); void disp_8583(); void rdata(); void start(); void stop(); void wdata(); void ack(); void delay(uchar); ***it sda=P1^0; ***it scl=P1^1; ***it p20=P2^0; ***it p21=P2^1; ***it p22=P2^2; ***it p23=P2^3; ***it p24=P2^4; ***it p25=P2^5; uchar sec=24,min=24,hour=18,sec_100=00; uchar comdata,dispdata; uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //主程序 void main() {pcf8583(); while(1) { disp_8583(); radd_8583(); } } //pcf8583程序 //完成pcf9583的初始化 为读时钟芯片做准备 void pcf8583() { start(); comdata=0xa0; //送寻址字节,从地址 wdata(); ack(); comdata=0x00;//送控制字 wdata(); ack(); comdata=sec_100; //送百分秒 wdata(); ack(); comdata=sec; //送秒 wdata(); ack(); comdata=min; //送分钟 wdata(); ack(); stop(); radd_8583(); } /*结束写,开始读*/ void radd_8583() { start(); comdata=0xa0; wdata(); ack(); comdata=0x00; wdata(); ack(); start(); comdata=0xa1; wdata(); ack(); rdata(); //读数据 nack(); stop(); } //显示程序 void disp_8583() {P0=num[sec/10];p20=0;delay(1);p20=1; P0=num[sec%10];p21=0;delay(1);p21=1; P0=num[min/10];p22=0;delay(1); p22=1; P0=num[min%10];p23=0;delay(1);p23=1; } // 开始程序 void start() { sda=1; scl=1; _nop_(); _nop_(); sda=0; _nop_(); _nop_(); scl=0; } //停止程序 void stop() { sda=0; scl=1; _nop_(); sda=1; _nop_(); scl=0; } //数据写入 void wdata() { uchar i; for(i=0;i<8;i++) { if(comdata&0x80) sda=1; else sda=0; //移位响应 shl(); comdata<<=1; } } //移位响应 void shl() { scl=0; _nop_(); scl=1; _nop_(); scl=0; _nop_(); } //读数据 void rdata() { uchar i,j,statues; for(i=0;i<8;i++) { if(sda==1) j=1; else j=0; shl(); statues<<=(statues|j); } ack(); for(i=0;i<8;i++) { if(sda==1) j=1; else j=0; shl(); sec_100<<=(sec_100|j); } ack(); for(i=0;i<8;i++) { if(sda==1) j=1; else j=0; shl(); sec<<=(sec|j); } ack(); for(i=0;i<8;i++) { if(sda==1) j=1; else j=0; shl(); min<<=(min|j); } } //应答程序 void ack() {scl=1; sda=0; _nop_(); scl=0; } /*非应答程序段*/ void nack() { scl=1; sda=1; _nop_(); scl=0; } //延时1ms void delay(char k) {uchar j; while(k--) for(j=0;j<255;j++); }
|
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
3478 浏览 0 评论
5627 浏览 0 评论
PROTUES仿真no model specified for adc0809,谁有ADC0809的model?
17891 浏览 1 评论
单片机应用技术的ISIS professional电路设置仿真老是报错怎么办
18162 浏览 0 评论
21466 浏览 3 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-8 09:33 , Processed in 0.862615 second(s), Total 72, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2835