74LS164级联的问题 ,第二个数码管怎么会不亮呢 ,程序什么奶粉没有问题题的,当我把第一个数码管删掉后第二个才亮

74LS164驱动数码管的控制方式和程序问题-中国学网-中国IT综合门户网站
> 74LS164驱动数码管的控制方式和程序问题
74LS164驱动数码管的控制方式和程序问题
转载 编辑:李强
为了帮助网友解决“74LS164驱动数码管的控制方式和程序”相关的问题,中国学网通过互联网对“74LS164驱动数码管的控制方式和程序”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:74LS164驱动数码管的控制方式和程序问题,具体解决方案如下:解决方案1:如以下两个图,加如我想同时显示34,该怎么控制?采用这种控制后盖怎么编程?(汇编最好,C也行)解决方案2:CLR不用接的
可以用串行工作方式0(8位同步输出)
你这显示就用该用动态扫描了,点亮一个数字延时后点亮两一个数字
你第二个图好像不大好用,用一个164足够了,用P1.6P1.7选一下点亮那个管足矣,不用再加两个164的,浪费。
串行口发送8位数据低位在前。
如果164接受数据每一位是从Q7进入的话,可以解释,P3.0给数据D0,时钟有效,数据进入第一片Q7,由于两片同一时钟,而Q7为第二片输入,所以第二片也获得P3.0数据,P3.0给数据D1,D0进入Q6,D1进入Q7 ...
如果164接收数据每一位是从Q0进入的话,我就解释不通了。
我在找找相关资料,你也找找,确定一下164接收的第一位先出现在哪一位。
又看了一下,164接收数据第一位先出现在Q0,然后顺序后移,所以图二中两片164不能同时接收数据,只有给16个脉冲,先发送的8位数据进入第二片,后发送的8位数据进入第一片。
例如你想在第一片显示3,二片显示4,则mov sbuf,#(4段码数据),再mov sbuf,#(3段码数据)。!注意sbuf中的高位将被送入Q0中,即高低位反了
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注当单片机的i/o口不够时,如何运用74LS164,使单片机的信号可以在数码管中显示?_百度知道
当单片机的i/o口不够时,如何运用74LS164,使单片机的信号可以在数码管中显示?
提问者采纳
B接单片机的串行数据发送,用法同上,则还可再用一片74LS164作为位选,Q0—Q7接数码管的字段,CLK接串行时钟输出;如果是显示用8位数码管,74LS164的A,则可将单片机的8根段选线简化为二根串口线,还可实现N位数码管的静态显示在数码管动态显示电路中,只是这时Q0—Q7接8个数码管的位选线(公共端)。
另外如果将N片74LS164级联,MR接+5V
有没有电路图之类的啊?
提问者评价
原来是这样,感谢!
其他类似问题
为您推荐:
其他2条回答
用程序控制I/O口到响应的74端口,控制高低电平
单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁数码管程序。前一个程序和后一个程序在定时器设定及以后的程序内容有区别。请大神给出为啥第一个程序错误_百度知道
数码管程序。前一个程序和后一个程序在定时器设定及以后的程序内容有区别。请大神给出为啥第一个程序错误
P0,#0B0H LJMP TIMERORG 0100HMAIN,实现4位数码管轮流显示0,依次类推,D0
LCALL DELAY
A,66H 正确程序,R1
MOVC A,只是在定时器设定开始有所不同,@A+DPTR
MOV P0,#0B0HLJMP TIMERORG 0100HMAIN,#20:
TAB,一直循环),A
LCALL DELAY
MOV R0,编写一段程序,R0
TH0:RETITAB,#0
MOV R2。有问题的程序。数码管是共阴连接:ORG 0000HLJMP MAINORG 000BHMOV TH0,#4
DPTR,MAIN1
MAINDELAY,#3CHMOV TL0,R0
MOV A,2。请大神们给出第一个程序出错的原因:
JMP DELAY1TIMER,#TABMAIN1:
P2。以下两段程序在对比后,3,4FH,显示间隔时间为1s(先第一个数码管显示0,1,4FH:
MOV P2,#0B0H
MOV TMOD,#3CHMOV TL0,#20,#0B0H
CJNE R3:ORG 0000H
LJMP MAINORG 000BHMOV TH0,#0
MOV TH0,06H,但只有第二个程序才能实现:
LJMP $TIMER,请尽量详细些:
MOV R0,5BH,R0
R0:利用定时器0,#0FEH
R1,06H,5BH,MAIN1
LJMP MAINDELAY:DB 3FH,#3CH
MOV TL0,然后第二个显示1,DELAY0
RETDELAY0,#TABMAIN1,#0
TR0DELAY1:DB 3FH,#0FEH
MOV R1要求
提问者采纳
DB 3FH..::RETITAB.网友采纳答案是错误的.,4FH,#3CHMOV TL0...
LJMP $TIMER.:
INC R3,5BH.,06H.,#0B0HLJMP TIMERORG 0100HMAIN...
RET---应该是 RETID0...:ORG 0000HLJMP MAINORG 000BHMOV TH0!有问题的程序。邹锐
V3 | 胶印----这就是个骗子
虽然你的回答未能完全帮我解决了问题,但却启发了我。。忘了要先结束中断,再子程序返回。。。顺利解决了我的问题。。。谢谢了
提问者评价
谢谢你的提醒哈
其他类似问题
………………子程序……………………void zuchngxiu(){
if(dd==1) /调用延碧
rr++.6)亮*//dula=0;&#47,这样点阵高电平脚全部由锁器端锁存为低电平了*&#47,控制数码管有几个数量的373锁存器端口接在该I/P1=0x01;&#47,其中还有外部中断*/// /开总中断ET0=1;给加累数初值0while(1)
dula=0,/打开高位开关P1=0P1=0/&#47,j; 这里的dd时50ms触发一次中断;if(ee==5)//给初值0
ge=ptemp%10;单字节全局变量&#47.7)点和G段(P1;/检测j是否等于9
&#47,将余数部分装入低8位中
/打开段选,这里为什么不是给初值0; &#47,是显示数字
P1=dutable[k],0x80};0;wela=0;&#47,uchar ge){
wela=1,0x08,便于下一次计时*/delay(3);&#47,后面0是单片机中断中该外部中断0的中断序号 *//100,1);/&#47.6和P1;
P2=0x00;/&#47,这里tt就是主程序里dd=20;/宏定义unsigned char为 uchar#define uint unsigned int/
if(ptemp==0)
wela=1;/delay(10),相当于输入与输出端直通
/P1=0x20。 外部中断0是低平电有效的
wela=1;打开低位开关P1=0x00,也就是数码管的a段
P1=} /P1=0x10;……………………以下是外部中断中循环子程序……………………………………void zhongduan(){
init();// / /*输入让数码管显示什么数;/ ///定时器/这里的50000就是50ms(毫秒)
delay(3);位定义;/……………………………………………………………………………………/&#47,0xf9;/…………………… dula=1;256;///……………………以下循环8位数码管组成的口子子程序…………………………void
xunhuankou(){dula=1;/初始化子程序
EX0=1,因为数码管七段加一个DP点
我们不要DP(P1;双字节全局变量uchar code dutable[]={/位定义;//delay(3);
&#47,循环5次后;
P1=0x08;设外部中断0为最低优先级
PT0=1;左移一位得到的值;* 正确的如下;&#47,也就是P1;
delay(3);for(x=z;P1送入高电平
led=P0=0/delay(3);wela=1;wela=0;
bai=ptemp%1000/P3=0x07,*&#47,某值是时段肯定会和其它地方冲突造成不定时延时现象
tt++;关闭控制数码管工作373端口;//打开位选
P1=wetable[j];//&#47,还一个是控制8个数码管段选的锁存端:还有一个问题就是触发外部中断后进入第三状态时;
wela=0;/初始化程序ptemp=0;//
delay(3);//打开段选
temp=0xfe,关闭位选
dula=1;&#47,那么将定时器里的变量dd清0;k自加1;/
dula=1;P1=0x08;打开控制数码管工作的373端口;…………………有待解决小循环里的死循环…………………………………&#47,0xf8;&#47,tt自加1
tt=0;………………………以下主程序……………………………void main(){
init();// &#47,作为检测一下数码管
有无坏点*&#47,便于其它调用
led=_crol_(led,跳到第2状态.h&gt,0x82;关闭段选
k++;/定义数码管显示;P1送入高电平P2=0x3e;调用子程序
dd=0;delay(3);&#47,ge);/判断tt是否大于等于1,0x02;……………………wela=1;就是循环5个口字
xunhuankou();//打开段选;
&#47,y,每到50ms计一次数;uchar k;TH0=()/…………………………dula=1,1),怎么退出来;
temp=0x7f, /P1=0x01,而不是将K清0;/ delay(1);/256;调用延时程序
temp=_crol_(让8位数码管组成的口子循环5次/ /
delay(1);*检测k是否大于等于9;&#47,进入中断后第1状态;/Osbit dula=P2^0;
P1=0x40; 这里为什么用uint(双字节),那就会从0开始显数*//&#47,点阵高点位的锁存端2个;*exter0是断名;赋temp值为 ;/
TH0=()/&#47,因为k段码表也就是显示数字的表,这时8个数码管都显示a段的;P1=dutable[bai];&#47,赋予给P0口
/移位后的值赋予给P1口
delay(8);// // /
&#47,都低电平;每取一次位码表自加1
if(j==8) /将temp的值赋予给P1口
delay(10),0x92;外部中断0以电平方式触发
PX0=0;设该定时器为最高级优先级
P2=0x00,如果不自加1怎么知道它现在取的是第几位数了
if(k&gt,/置0重新计时
ptemp++,0x99;/ /置位到DP(P1;
delay(1);=1)/打开位选
P1=0/P1= 0
/uchar code wetable[]={0x01,*检测temp是否等于(高位低位);#include&P1=0x02;/………………………………
wela=1;………………………………
wela=1; ……………………定时器0………………………………void exter1() interrupt 1 ///………………………………………………………………………………………………/*P3口关闭高位开关()其中有三个脚接点阵高点位的锁存端,0x04;&#47,这里是全部亮就是日字,没有可调用的涵数,这里加延时程序;
&#47,到5次后没有返回函数了;dula=0,待学习请助中;
/………………以上是累加显示子程序………………/
delay(3);}/ /自加1;delay(3);/P1=0&#47,每循环一次自加1/…………以上延时程序………… ///根据数码管硬件连接图写出1-8个数码管亮的位/dula=0;给P3口除外部中断0高点平外;……………………以上循环8位数码管组成的口子子程序………………………………/&#47,而utable表第一位数0xc0是数为0数;x&开外部中断0
IT0=0;Osbit kk=P3^2,因为要显示的数是1-8的数*//
P1=0/delay(3);
}//delay(3);*如果上面K大于等于9,该表格取名为dutable0xc0,目的是将这低电平保存在点阵的高电平脚上;计数器0的中断序号 */ / &#47,就将K清1 ;求余,加到100数;/&#47,/&#47,0x40;&#47,点阵低电平的锁存端5个;
/*exter1是中断名;// //delay(3),输入高电平有效;调用循环8位数码管组成的口子子程序
ee++;&#47:每隔1秒加1;
delay(3);P1=0x04;……………………………………/
/给外部中断0由软件置高电平ptemp=0;
/P1口取wetable位码表 也就是第一们数码管delay(3);
display(P1= 00;P1=0x04;*给初值1;/这里给led赋个初值这样下面定时器里led左移才知道从什么数开始移
delay(15);问题来了;/
P1=0x02;P1=dutable[qian];……………………以上是外部中断中循环子程序……………………………………/delay(3),0x90///&#47,现在问题停在第3状态循环出不来;……………关闭点阵…………………
wela=1;y--);
qian=ptemp/&#47,循环5次后进入第3状态; // &#47,shi,01工作方式;
dula=1,0x20,请高手们指点一下迷区*&#47:8个数码管各自点亮口字;*这里进入定时器次和触发定时器的时间一起控制显示速度;///wela=0;给累加器一个初值EA=1;
/10,这样做的目的是让其显示从1数开始显示9位数(1-8);//初值自加1
if(ptemp==101) //……………触发外部中断0后始终循环…………void exter0() interrupt 0
//给累加数定一个最大数
ptemp=0;程序入口就关闭点阵锁存端;
/P1=0x08;P1=0xf7;计数器0中断TMOD=0x01;//
/将P1口置数全部高电平;*如果进入到20次定时器;
delay(1);x--)
for(y=1000,………………以下是累加显示子程序…………………………void display(uchar qian,而不是用uchar(单字节;/
P1=0x10,待解决(最好还是返回到外部中断一开始的地方)/ /P1=0x02;如果是等于9就置0
shi=ptemp%/左移一位
P1= /&#47,后面1是单片机中断中该定时器/P1送入低电平P2=0xc0;//&#47,0x80;dula=0;dula=0;/载入51单片机头文件#include&关闭控制数码管显示什么数字的373端口
P1=0启动定时器} /&#47,
dula=0,所以在这前要先选好位
dula=0;/ /用于外部中断时间判断
//关闭位选
j++; ///送入让那几个数码管亮的16进制数
wela=0; ///1000,我们现在
让程序1开始显;显示a段:8个数码管组成的大口子;///P1=0x40;………………………………
////&#47,使用其不亮; {
zhongduan();/P1=dutable[shi];P1=dutable[ge],控制数码管显示什么字符的373锁存器端口接在该I/求抹,&#47,让其再回到第1状态这样循环着除非单片机复位;=9)
//reg52;delay(3);&#47,现在这样就属于动太扫描*//……………………………………P1=0x00; &#47, 打开8个数码管
wela=0;调用延时子程序
P1=0x80,…………以下延时程序…………void delay(uint z)
//&#47.h&装高位初值TL0=()%256; /
P1=wetable[yj];//P1端口取dutable数码表中值,便于下面调用(rr=6刚好循环一次口字)
if(temp==0xdf) &#47,//*P2口接了三种类型;delay(3);装低位初值TR0=1,0x10.7跳过(高位低位)
if(rr&gt.7)点;……………………以下初始化程序……………………void init(){kk=1;打开控制数码管显示什么数字的373端口
delay(10);//&#47,单触发,//…………………以上初始化程序………………………/ /载入51涵数头文件#define uchar unsigned char /设为定时器;将上面的led值进入左移1位
P0= &#47,这样373就保持住输入端上一次输入的值
dula=1;delay(3); /
&#47,0xa4,值范围256){/ &#47,
如果清0;………………………………………………………………………………………………
}//y&/ /根据数码管硬件连接图写出0-9的16进制数};宏定义unsigned int 为uintsbit wela=P3^7,将整数部分装入高8位中
TL0=()%256;=30)&#47,dd,code为表格的意思;/
dula=1;关闭位开关
P3=0x6f;/P1=0x80;P1口全部送低电平;
P1=0x04,要是不关闭一会数码管语句时会让点阵也显示着内容
P3=0x04,0xb0;…………………………这里定时器中断优先等级比外部中断0高…………/………………………………}&#47/ dula=0;/P1口取wetable位码表
wela=0;/while(1) {zuchngxiu();wela=0
为您推荐:
定时器的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 什么奶粉没有问题 的文章

 

随机推荐