完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#define uchar unsigned char #define uint unsigned int void send595(uchar dat); void out595(void); void disp(uchar w,uchar d); void dispoff(); ***it MOSIO=P2^2; ***it R_CLKa=P2^3; ***it S_CLKa=P2^4; ***it scl=P2^0; ***it sda=P2^1; bit ack; uchar sec; bit flag=0; uchar code duan[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//此表为LED共阳级数码管段选字模 uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //此表为LED数码管位选字模 void delay() { uchar i=5; while(i--); } void send595(uchar dat) //数据输入 { uchar i; for(i=0;i<8;i++) { if((dat< MOSIO=1; else MOSIO=0; S_CLKa=0; S_CLKa=1; } } void out595(void) // 数据输出 { R_CLKa=0; R_CLKa=1; //上升沿 } void disp(uchar w,uchar d) //数码管显示函数:w-位码,d-段码 { send595(wei[w]); //发送位选 send595(duan[d]); //发送段选 out595(); } void dispoff() //关闭共阳数码管 { send595(0); //位选全为0,对共阳极而言即端开 send595(0); out595(); send595(0xff); //段选全为1,对共阳极段为0时才有可能点亮,这样就被关闭 out595(); } void start() { sda=1; delay(); scl=1; delay(); sda=0; delay(); scl=0; delay(); } void stop() { sda=0; delay(); scl=1; delay(); sda=1; delay(); } void response(bit a) { if(a==1) sda=0; else sda=1; delay(); scl=1; delay(); scl=0; delay(); } void writebyte(uchar date) { uchar i,temp; temp=date; scl=0; delay(); for(i=0;i<8;i++) { temp=temp<<1; sda=CY; scl=1; delay(); scl=0; delay(); } sda=1; delay(); scl=0; if(sda==1) ack=0; else ack=1; scl=1; delay(); } uchar readbyte() { uchar i,temp; scl=0; delay(); for(i=0;i<8;i++) { temp=temp<<1; temp|=sda; scl=0; delay(); scl=1; delay(); } response(1); return(temp); } bit wr_addr(uchar addr,uchar date) { start(); writebyte(0xa0); if(ack==0) return 0; writebyte(addr); if(ack==0) return 0; writebyte(date); if(ack==0) return 0; stop(); return (1); } uchar rd_addr(uchar addr) { uchar temp; start(); writebyte(0xa0); if(ack==0) return 0; writebyte(addr); if(ack==0) return 0; start(); writebyte(0xa1); if(ack==0) return 0; temp=readbyte(); stop(); return (temp); } void init() { scl=0; delay(); sda=1; delay(); scl=1; delay(); } void main() { dispoff(); init(); sec=rd_addr(0x02); if(sec>100) sec=0; TMOD=0x01; TH0=(65536-5000)/256; TL0=(65536-5000)%256; EA=1;ET0=1; TR0=1; while(1) { if(flag==1) { flag=0; sec++; if(sec==100) sec=0; wr_addr(0x02,sec); } disp(6,sec/10); disp(7,sec%10); delay(); } } void zhong() interrupt 1 { uchar i=0; TH0=(65536-5000)/256; TL0=(65536-5000)%256; i++; if(i==20) { i=0; flag=1; } } 事实上计数都成问题了,实验结果显示一直为08不动了,但未发现主函数有何问题,还望各位不吝赐教啊 |
|
相关推荐
3 个讨论
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 18:13 , Processed in 0.710097 second(s), Total 46, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号