
为什么单片机上第一个发光二极管是0xfe???还有其他的灯呢?分别是什么
和发光二极管的接法有关,二极管阴极端连单片机,输出低电平0就会点亮,0xfe对应的引脚信号为11111110,其中的0就是输出给第一个发光二极管阴极端的低电平信号。其他的灯对应的输出低电平编码信号同样点亮。
例如:假设单片机的P0口接了八个LED,其中JPP0接的是高电平5V,而L0.0到L0.7接的分别是P0.7到P0.0这样的话如果P0.7到P0.0上电平是高电平,那么这个led的压降就是0,led不亮,如果P0.7到P0.0上电平是低电平,那么led上就会产生压降,led就会亮。
#include<reg51.h> /*包含单片机寄存器的头文件*/
void main(void){while(1){P0=0xfe; /*第一个灯亮*/ P0=0xff; /*第一个灯灭*/}}
P0=0xfe,相当于P0=11111110,这时候P0.0=0,灯L0.7亮,然后P0=0xff,相当于P0=11111111,这时候P0.0=1,灯L0.7灭,然后由于这两句是放在while(1)中的由于其中1是while{}中的语句执行的条件,由于1始终为真,所以这两句循环执行。灯L0.7就在不断闪烁,亮灭。
扩展资料:
相关发光二极管引脚点亮编码:
原理:给二极管阳极和阴极加上正向电压时,二极管导通。 当给阳极和阴极加上反向电压时,二极管截止。 因此,二极管的导通和截止,则相当于开关的接通与断开。
0XFE=1111 1110 表示一个灯亮。0xfd = 1111 1101 第二个灯亮。0xfb = 1111 1011 第三个灯亮。0xf7 = 1111 0111 第四个灯亮。0xef = 1110 1111 第五个灯亮。0xdf = 1101 1111 第六个灯亮。0xbf = 1011 1111 第七个灯亮。0x7f = 0111 1111 第八个灯亮。
参考资料来源:百度百科-发光二极管
1表示高电平 。0表示低电平 。
二极管要亮 需要正向偏置电压。 即阳极接高。阴极接低。
所以 (都是从右边数起)
0XFE=1111 1110 表示一个灯亮。
0xfc=1111 1100 表示最后2个灯亮。
0xfd = 1111 1101 //第2个灯亮
0xfb = 1111 1011 // 第三个灯亮
0xf7 = 1111 0111 // 第4个灯亮
0xef = 1110 1111 // 第五个灯亮
0xdf = 1101 1111 // 第六个灯亮
0xbf = 1011 1111 // 第七个灯亮
0x7f = 0111 1111 // 第八个灯亮
其实一般是用
for(i=0;i<8;i++)
{
P1=0xfe<<i //左移I位 来实现跑马灯 //你这里是二极管的阴极连在单片机上。
}
点亮3,4,5,6,7,8单个发光管的控制数据分别是0xFB,0xF7,0xEF,0xDF,0xBF,0x7F;
这些都是2位16进制数,这8个数的二进制表示法是11111110,11111101,11111011,11110111
11101111,11011111,10111111,01111111;
0xFC就是第一和第二2个同时亮,二进制表示是11111100
0xfd = 1111 1101
0xfb = 1111 1011
0xf7 = 1111 0111
0xef = 1110 1111
0xdf = 1101 1111
0xbf = 1011 1111
0x7f = 0111 1111
0表示亮,1不亮。自己找规律。