❶ 51单片机数码管实验位选和段选问题(共阴极)
这个混乱不了的,74HC573是这样的:高电平时,573的D和Q相当于直接导通的,数据输入什么就输出什么;低电平时,会把之前的数据锁住,再来数据也不会变化。所以你的程序里,虽然一开始都是高,但是wela=0时,控制位码的573输出的位码数据会被锁存。当P0=0x7f时,位码573的数据不会改变,改变的只是段码的。
也许你会说,当P0=0XFE时,位码输出0x7e,段码输出也是0x7e,那么显示的就不是你想要的数字了。但是我想说的是,这个过程保持的时间太短了,几个uS?短到我们人眼根本没察觉到就被后面的字符取代了。
❷ 51单片机 P0做地址线 我把基址设为0x7e 为什么我测 P2口 P2^0 P2^7 不是低电平 所有脚都是高 stc89C52RC
你的问题描述得不清楚。
“P0做地址线”“我把基址设为0x7e 为什么我测 P2口 P2^0 P2^7 不是低电平”
你所谓的基址是什么?是指外部映射地址的高8位吗?
P2口只有在外部存取周期内才会输出为映射地址高8位的电平状态。这个你用万用表是不可能量到的,得用示波器。
❸ 单片机c51输出数码管显示为什么共阳极0是0xc0,共阴极是0x7e
这是根据数码管的特性决定的(因为一个段位的数码管是由8个二极管组成的),因为共阳极的数码管,公共脚接的是电源VCC,所以,想要把那一个二极管点亮就必需将这个点接地,它就会发亮了,例如:要显示数字“0”,就要把“a、b、c、d、e、f”这几个发光二极管接地,其它二极管接VCC,它就会显示成一个“0”了,把它转换成二进制码:1100 0000,所以它的十六进制为:0xc0,而共阴极的段位数码管正确的二进制码应该是:0011 1111,十六进制为:0x3f.
❹ 51单片机怎么只控制一颗LED灯闪烁
1、新建项目,如图所示。
注意事项:
很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
❺ 单片机接收数据中,假如起始位和结束位为0x7e,如何把这串不定长的数据包接收到一个数组中,并得到包长度
提供个思路,你自己写写看吧。
设定一个数组用来存放数据包,如:unsigned char DataArray[100]; 定义的长度要足够,确定没有超过这个长度的数据包。再定义一个标志变量Flag,比如初值为0。
在串口接收中断中将接收到的单个字节存入数组,当然还要先定义一个全局变量,用来指示当前存到哪一个数组元素,如定义Counti,初值为0,存入数据为:DataArray[Counti] = SBUF; 接下来重要的是要判别接收到的内容,if((DataArray[Counti] == 0x7e) && (Flag == 0)),这里是首次收到0x7e,表示开始接收数据包,该if条件下,将Flag置为1;elseif ((DataArray[Counti] == 0x7e) && (Flag == 1)),这里是第二次收到0x7e,表示数据包接收结束,将Flag置为0,这时候的Counti+1就是数据包长度(包括起始位和结束位)。最后将数据存入数组,然后Counti++; 指向下一单元。
❻ 关于单片机流水灯0x7e的控制问题
>>是移位操作,在被操作数是无符号数时,每移动一位,最高位就会被置零,所以当移动8次以后,temp就等于零了,然后是temp再次赋值0x7e,依次循环。
如果你想实现的是带进位的循环,可以自己写一个函数,也可以使用库函数_cror_(x,i)(右移)或者_crol_(x,i)(左移),但是如果使用这两个库函数必须加上头文件,即#include<intrins.h>
x是你希望的操作数,相当于你的temp,i是每次移动的位数。
❼ 在单片机c语言中,P1=0xdb, P1=0xbd, P1=0x7e 是 什么意思
对P1端口进行赋值啊。只不过这不是单独一位赋值,而是整个端口8位赋值。看后面赋值的十六进制,可能是数码管的程序
❽ 0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,是什么数码管的编码
分别是数码管显示的0-7,只是他接单片机的I/O口的顺序不是按照习惯性来的,其接线顺序为:A-X.2,B-X.0,C-X.7,D-X.4,E-X.6,F-X.1,G-X.3,DP-X.5你可以按着计算一下看看,我破解了。我估计原作者就是防盗用的
❾ AVR128单片机,串口与PC通信,接收数据总是错误。比如发0x01,接收到0x7f;发送0x03,接收到0x7e,求解。
很有可能是波特率没设对,比如9600,你改成4800,或者改高一些试试
❿ 为什么单片机计算0x7F*65536+0xff*256+0xff的结果是0x7EFFFF
嘿嘿 这个 俺来帮你解释
首先给你挑个错误 0x7F*65536+0xff*256+0xff的结果是0x7FFFFF( 不是0x7EFFFF)
1 65536=2^16=16^4 一个16进制数*16^4=16进制数(后面补4个0000)
即 每乘一个16 就是把这个数扩大了16倍(即相当于在最后一位补一个0 )
0x7F*65536=0x7F*(16^4)=0x7F0000
2 256=2^8=16^2 同理 0xff*256=0xff*(16^2)=0xff00
3 所以
0x7F*65536+0xff*256+0xff=0x7F0000+0xff00+0xff=0x7FFFFF
呵呵 满意 就选满意回答