51单片机与51 地址锁存器器

搞数码管一定要用锁存器么?STC89C52RC的IO口输出电流能力大概在什么水平?|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
发现我买的51单片机指导书(郭天祥的《51单片机C语言教程——入门、提高、开发、拓展全攻略》)上面数码管那一章全部都要用到锁存器…… 但是我目前接近期末考试,那个情况你懂的,暂时搞不到锁存器,数码管估计都只能想办法拆,所以咨询下搞数码管是不是一定需要锁存器?
赞助商链接
菜鸟我认为不一定用,用锁存器其一个目的就是重用IO口
赞助商链接
可以直驱&&P0口要加10K上拉&& 其他口最好也加上拉 可以驱动数码管
锁存器一是可以扩展io口,二是可以增加io口的驱动能力,我做过时钟,没用锁存器,数码管比较暗
在数码管com口前加一只三极管驱动就行了。
你根本没有看清楚书上是怎么说的,为什么要加锁存器。用数码管时完全可以不用锁存器。
对了楼主,如果你用STC12C5A60S2的单片机,io口支持强推拉模式,不用三极管驱动,不用锁存器,直接接数码管都很亮很亮的
不要那样子 一时间烧不坏不等于一直稳定绝对不要打到20mA 虽然他有更大输出能力
正确,用个三极管缓冲下绝对有好处。
对了,这是咋回事?声明子函数的语句报错 = =[attachment=1227387]
你要这样写,void delay_1s();c语言规定变量名为字母数字下划线,且首字符不能为数字
p0段选,p2位选,p0有上拉,10K,p2木有
可以试试反过来灌流的方法,我用的AT89S52,P0口灌流,亮度很好。VCC--数码管--限流电阻--io口,io口置低就可以了,如果是多位的,就在VCC后面接三极管或者io口接,看是共阳还是共阴的了。不过好像这种接法要用共阳的,用PNP管。
说的没错 不过AT89S52也只能用灌电流》....虽然后来的ic有了强推挽,但是还是更适合灌入,当然,共阳。 三极管这么用[attachment=1227686]这个是led点阵 数码管一样参考一下
D6.D7就是段选了。看你具体电路了。不过貌似大家都喜欢用P2口做段选。有木有!!!另外,基极电阻限流用。我看到大部分人都是接1K的电阻。470的话,会不会让单片机输出过载呐?
哦 我的老天,别按照我的图做 我这图是画pcb用的 电阻什么的根本没改对于一般8位数码管,20mA*8=160mA,这说明用1K都是大大的富裕。当然,我也见过人家套件君直接用10k 结果三极管工作在线性区了不过,人家用的直插三极管我用的贴片人家那么做也就40多度我那么做就一缕青烟.........
引用楼主199sw-12-21 20:44发表的 搞数码管一定要用锁存器么?STC89C52RC的IO口输出电流能力大概在什么水平? :发现我买的51单片机指导书(郭天祥的《51单片机C语言教程——入门、提高、开发、拓展全攻略》)上面数码管那一章全部都要用到锁存器……但是我目前接近期末考试,那个情况你懂的,暂时搞不到锁存器,数码管估计都只能想办法拆,所以咨询下搞数码管是不是一定需要锁存器?&& [attachment=1228474]就是这种
顶起,那这样的话我那本书就不适合我用咯……如何不用锁存器驱动数码管?求代码 = =
一般用动态扫描的方式驱动数码管。下面是收藏论坛一位朋友的时钟代码。#include &at89x51.h& //头文件包含#define uchar unsigned char //宏定义#define uint unsigned int#define ON 0 //定义0为打开#define OFF 1 //定义1为关闭#define LEDBus P0 //定义p0口为数码管段码口sbit MIAO =P2^3; //秒点sbit HOU_S=P2^7; //时十位位选sbit HOU_G=P2^6; //时个位位选sbit MIN_S=P2^5; //分十位位选sbit MIN_G=P2^4; //分个位位选sbit H_KEY=P2^2; //时调整键sbit M_KEY=P2^1; //分调整键bit SHAN; //闪烁标志位uchar second,minute, //定义秒、分、时寄存器uchar code LEDTab[]={0x03,0x9F,0x25, //数码管段码表0--90x0D,0x99,0x49,0x41,0x1F,0x01,0x09};/*这里的十六进制数转换成二进制既代表了Px.7~Px.0这8个脚的状态,可以根据自己实际布线和数码管来决定,上述为7=A,6=B,5=C,4=D,3=E,2=F,1=G,0=DP.*/void delay(uchar t); //延时函数void init(); //初始化函数void display(); //显示函数void min_tiao(); //分调整函数void hou_tiao(); //时调整函数/***************************************函 数 名:main功 能:主函数说 明:入口参数:无返回值:无****************************************/void main(){init(); //调用初始化函数while(1) //主程序循环{if(!H_KEY) hou_tiao(); //如果时调整键按下(为0),调用时调整函数if(!M_KEY) min_tiao(); //如果分调整键按下(为0),调用分调整函数display(); //调用显示函数}}/***************************************函 数 名:init功 能:初始化函数说 明:初始化定时器及中断入口参数:无返回值:无***************************************/void init(){TMOD=1;TH0=0X3C;TL0=0XB0; //定时器0模式1,50毫秒ET0=1;TR0=1;EA=1; //开定时器0中断、启动定时器0、开总中断}/***************************************函 数 名:display功 能:显示函数说 明:入口参数:无返回值:无***************************************/void display(){LEDBus=LEDTab[minute%10]; //分个位送数码管显示MIAO=SHAN; //秒点闪烁MIN_G=ON; //打开分个位位选delay(1); //1就是显示1毫秒,0缩短显示时间,亮度减半MIN_G=OFF; //关闭分个位位选LEDBus=LEDTab[minute/10]; //分十位送数码管显示MIAO=SHAN; //秒点闪烁MIN_S=ON; //打开分十位位选delay(1); //显示1毫秒MIN_S=OFF; //关闭分十位位选LEDBus=LEDTab[hour%10]; //时个位送数码管显示HOU_G=ON; //打开时个位位选delay(1); //显示1毫秒HOU_G=OFF; //关闭时个位位选if(hour/10) //如果时十位为0,不显示十位数字{LEDBus=LEDTab[hour/10]; //时十位送数码管显示HOU_S=ON; //打开时十位位选delay(1); //显示1毫秒HOU_S=OFF; //关闭时十位位选}}/***************************************函 数 名:min_tiao功 能:分调整说 明:入口参数:无返回值:无***************************************/void min_tiao(){while(!M_KEY) display(); //等待分调整键松开second=0;minute++; //秒清零、分加1if(minute==60) minute=0; //如果分等于60,分变0}/***************************************函 数 名:hou_tiao功 能:时调整说 明:入口参数:无返回值:无***************************************/void hou_tiao(){while(!H_KEY) display(); //等待时调整键松开second=0;hour++; //秒清零,时加1if(hour==24) hour=0; //如果时等于24,时变0}/***************************************函 数 名:delay功 能:延时函数说 明:入口参数:t:延时时间长短返回值:无***************************************/void delay(uchar t){ //定义变量for(;t&0;t--) //如果t大于0,t减1(外层循环)for(i=124;i&0;i--); //i等于124,如果i大于0,i减1}/***************************************函 数 名:timer0功 能:定时器0中断函数说 明:入口参数:无返回值:无***************************************/void timer0() interrupt 1 //定时器0(中断1){uchar tim1,tim2; //定义临时变量TL0=TL0+0XB0;TH0=0X3C; //重装定时器初值tim1++; //每中断一次tim1加1if(tim1==10) //中断10(0.5秒){ SHAN=!SHAN; //闪烁标志取反tim1=0;tim2++; //tim1清零,tim2加1if(tim2==2) //到了1秒{tim2=0;second++; //tim2清零,秒加1if(second==60) //如果秒到60{ second=0;minute++; //秒变0,分加1if(minute==60) //如果分到60{minute=0;hour++; //分变0,时加1if(hour==24) hour=0; //如果时到24,时变0}}}}}/***************************************program end 程序结束***************************************/
第一 可以加上拉电阻灌电流 第二 可以用三极管放大电流 第三用增强型的推挽输出
查看完整版本: [--
Powered by
Time 0.067793 second(s),query:5 Gzip enabled已解决问题
用51单片机做数码管显示数数的时候,怎么把锁存器74HC573、数码管和单片机连起来啊??不懂引脚怎么连的。
提问时间: 07:18:21
最好附上图片哈,我初学很多都不懂。
浏览次数:8718
该答案已经被保护
这个分两种: 一种是静态扫描,二是动态扫描。静态的太耗资源,一般很少用,除非资源足够用。&br/&&br/& 动态扫描的原理是:首先有八个数据线,分别连接到七段数码管的七个位,和小数点位。然后就是有一批使能信号线。
答案创立者
以企业身份回答&
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题蓝桥杯单片机几种电子器件和锁存
搞清楚各元器件的连接关系,查表找出P口的值。 主要是前后关系。先关锁存,P0口输出数值,再开锁存。(为什么要锁存还是不太懂)。数码管的段位操作与以前的不一样!(继续学习)。
没有更多推荐了,怎么向51单片机锁存器写“1”_百度知道
怎么向51单片机锁存器写“1”
用C语言编程
我有更好的答案
锁存器在准双向口,一般只需把寄存器FB置一就可以了。语句:SET FB0
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51单片机上LCD用联锁存器吗?为什么?_百度知道
51单片机上LCD用联锁存器吗?为什么?
我有更好的答案
可用可不用,看你电路板上外围器件多少,如果外围器件多,占用
IO端口比较多,可以用锁存器,以便输出端口复用如果电路板上没什么其它器件,如数码管,就可不用锁存器,1602液晶屏要占用11或12个引脚,其中8根数据线最好占一个完整的端口
是因为当有其他器件连接LCD需要用到IO口时会使其他器件也工作,造成浪费吗?
不是工作不工作和浪费的问题,就怕数据冲突,如果LCD的一些引脚不是专用的,本来不是向LCD写数据的,结果由于对其它器件的操作可能会引起了LCD错误的显示一般LCD和数码管不同时使用,如果操作LCD引起数码管显示些乱七八遭的东西,你可以不去理会 但你向LCD写数据时蜂鸣器哇哇乱叫,是不是很烦人还有如果开发板上接了步进电机没有拔下来,如果你不小心向其驱动端口写了一个数据,使某一绕组线圈带电,但步进电机并不转动,此时流过该绕组的电流很大,容易烧毁驱动器件或电机,真让其转动起来,它反而不需那么大电流
采纳率:88%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 51 地址锁存器 的文章

 

随机推荐