2020年10月9日学习情况:
发光数码管:

共阴极数码管:
共阳极数码管:(一个在上端一个在下端)
在proteus中51单片机有自动复位的功能所以不在另行连接复位电路实验结果如下:
#include<reg51.h>
unsigned char s[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(unsigned char i)
{
while(i--);
}
void seg()
{
int i = 0;
for(i = 0;i<16;i++)
{
P2 = s[i];//0011 1111
delay(100);
}
}
void main()
{
while(1)
{
seg();
}
}
动态数码管:
#include<reg51.h>
unsigned char s[] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char wei[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}
;
void delay(unsigned int i)
{
while(i--);
}
void seg()
{
int i = 0;
for(i = 0;i<8;i++)
{
P3 = ~wei[i] ;
P2 = s[i];//0011 1111
delay(10);
}
}
void main()
{
while(1)
{
seg();
delay(10);
}
}

注意数值的取值范围,char的无符号范围是0255,有符号范围是-128+127,当你设定的数值超过这个范围时,则这个数值就不会发挥作用。
应用74ls138译码器来实现相关的功能:

1、改变之后的程序由unsigned
char wei[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ;
变为:unsigned char wei[] =
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07} ;
2、另外一个就是P3 = wei[i]
;取反符号消失,因为74ls138中自带取反功能。
版权声明:本文为delay_satisfied原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。