完善资料让更多小伙伴认识你,还能领取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++); }
|
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1162 浏览 0 评论
1600 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
3377 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
980 浏览 0 评论
【原创】收藏!单片机输出4种波形的函数信号发生器毕设(Proteus仿真+原理图+源码和论文)
4503 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-17 23:53 , Processed in 0.535356 second(s), Total 70, Slave 55 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191