永发信息网

4位数码管中间的时钟点应该接在52单片机的哪两个引脚上?

答案:2  悬赏:70  手机版
解决时间 2021-02-20 17:28
4位数码管中间的时钟点应该接在52单片机的哪两个引脚上?
最佳答案
任意两个I/o口,关键是看程序怎样设定。
全部回答
我也是新手但研究ds1302加ds18b20已经半年了,写了很多程序,大体上有两种方案,一种是io口直接驱动数码管,这种方式程序简单,但缺点很明显,占io口资源太多,而且最关键的一点就是必须采用单片机动态扫描数码管,在简单还行,复杂一点的如加按键闹钟温度什么的,在调时或有时数码管会出现不可避免的闪烁,自己玩玩还行,做成实用的产品就不行了。第二种是采用驱动芯片,如max7219,这样扫描电路由芯片完成,单片机只把数据送给芯片就行,完全不必担心闪烁的困扰。 你的电路是io口驱动,我先给你个io口的吧,我开发板上段选和位选分别接了两个d触发器,你根据你的电路在改一下就行,ds1302的三个口也得改一下,不过这个电路在扫描时温度会有抖动,是因为中断扫描打断了ds1302和ds18b20的时序,他们都是非常严格的时序器件,网上有人提出的解决办法是在进入时序函数之前关中断,但延时效果更差,如果去掉一个ds18b20就没问题了。程序给你自己研究吧,我还有一个用max7219驱动带按键的,比这个好的多,接近产品了,想要给你。 #include #include sbit sclk=p2^2; //ds1302时钟信号 sbit dio=p2^1; //ds1302数据信号 sbit ce=p2^0; //ds1302片选信号 sbit acc_7=acc^7; sbit dq=p2^4; //ds18b20总线 sbit p0_0=p0^0; sbit p0_1=p0^1; unsigned char code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned char shi,ge,i=0; char hour,minute,second; void startt0() { tmod=0x01; th0=(65536-500)/256; tl0=(65536-500)%256; et0=1; ea=1; tr0=1; } //************ds1302操作子程序******************************************** void write(unsigned char addr,dat)//写一个字节子函数 { unsigned char i,n; ce=0; sclk=0; ce=1; for(i=0;i<8;i++)//发送地址 { sclk=0; n=addr; dio=n&0x01; addr>>=1; sclk=1; } for(i=0;i<8;i++)//发送数据 { sclk=0; n=dat; dio=n&0x01; dat>>=1; sclk=1; } ce=0; } unsigned char read( unsigned char addr)//读一个字节 { unsigned char i,m,dat1; ce=0; sclk=0; ce=1; for(i=0;i<8;i++)//发送地址 { sclk=0; m=addr; dio=m&0x01; addr>>=1; sclk=1; } for(i=0;i<8;i++) { acc_7=dio; sclk=1; acc>>=1; sclk=0; } ce=0; dat1=acc; return dat1; } //*****************ds18b20操作子程序*********************************** void delay1( unsigned int a)// 延时 { while(--a); } void write18(unsigned char dat)//写数据 { unsigned char i; for(i=0;i<8;i++) { dq=0; dq=dat&0x01; delay1(5); dq=1; dat>>=1; } } unsigned char read18()//读数据 { unsigned char i,dat=0; dq=1; _nop_(); for(i=0;i<8;i++) { dq=0; _nop_(); _nop_(); dat>>=1; dq=1; _nop_(); _nop_(); if(dq) dat|=0x80; delay1(30); dq=1; } return dat; } void start18()//**********ds18b20初始化************** { dq=1; delay1(8); dq=0; delay1(90); dq=1; _nop_(); _nop_(); delay1(100); dq=1; } //*******************初始化************************************ void start() { write(0x8e,0x00); //去掉写保护 write(0x80,0x00); //秒初始化 write(0x82,0x00); //分初始化 write(0x84,0x00); //时初始化 write(0x8e,0x80); //写保护开启 } void du() { unsigned char w,b,c; unsigned int a,bb ; ea=1; w=read(0x81); b=w&0x0f; c=(w&0x70)>>4; second=c*10+b; w=read(0x83); b=w&0x0f; c=(w&0x70)>>4; minute=c*10+b; w=read(0x85); b=w&0x0f; c=(w&0x30)>>4; hour=c*10+b; start18(); write18(0xcc); write18(0x44); start18(); write18(0xcc); write18(0xbe); a=read18(); bb=read18(); ea=1; bb=((bb&0x03)<<4)+((a&0xf0)>>4); shi=bb/10; ge=bb%10; } int main() { start(); startt0(); while(1){du(); } return 0; } void t0() interrupt 1 { th0=(65536-500)/256; tl0=(65536-500)%256; switch(i) {case 0:{p1=a[hour/10];p0_0=1;p0_0=0;p1=~0x01;p0_1=1;p0_1=0;}break; case 1:{p1=a[hour%10];p0_0=1;p0_0=0;p1=~0x02;p0_1=1;p0_1=0;}break; case 2:{p1=a[minute/10];p0_0=1;p0_0=0;p1=~0x04;p0_1=1;p0_1=0;}break; case 3:{p1=a[minute%10];p0_0=1;p0_0=0;p1=~0x08;p0_1=1;p0_1=0;}break; case 4:{p1=a[second/10];p0_0=1;p0_0=0;p1=~0x10;p0_1=1;p0_1=0;}break; case 5:{p1=a[second%10];p0_0=1;p0_0=0;p1=~0x20;p0_1=1;p0_1=0;}break; case 6:{p1=a[shi];p0_0=1;p0_0=0;p1=~0x40;p0_1=1;p0_1=0;}break; case 7:{p1=a[ge];p0_0=1;p0_0=0;p1=~0x80;p0_1=1;p0_1=0;}break; } i++; if(i==8)i=0; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
从锦江乐园到奉贤打车要多久
2h2+o2=点燃=2h2o可读作A、氢气加氧气等于水B
中国侨联干部培训中心在哪里啊,我有事要去这
酒精测试仪200算酒驾吗
万家乐副食店这个地址在什么地方,我要处理点
寻《gentleman》歌词跟中文歌词。
挖掘机的前进后退左转右转的操做
雅思和托福哪个难考?
丰茂楼这个地址在什么地方,我要处理点事
3的2x+3y+3次方=1则4的x次方×8的y次方
苹果6plus,9.1系统可以越狱了吗?
关于写景的古诗 并赏析
峰口镇大公村卫生室这个地址在什么地方,我要
平安保险交一给二赔三什么意思
临沂去南京去那个车站 ?班次几点?
推荐资讯
中国农业银行新疆生产建设兵团分行北京路支行
如图四边形ABCD中,∠A=90度,AB=4cm .AB=3cm,C
为什么说ov高价低配
鉴别是植物细胞还是动物的细胞有丝分裂,最可
衡水学院 邯郸学院 河北名族师范学院 张家口
小米5稳定版以后会升安卓8.0吗
鑫博快修保养我想知道这个在什么地方
小区天气预报广播词
我叫一个人叫叔,我叔叫另一个人叫爷,那么我叫
山西农业大学怎么样?还有农业类专业就业怎么
迷你世界芙蓉笑天1天和麒麟怎么用
天源浴池地址有知道的么?有点事想过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?