厦门企业自助建站系统,资源共享课程网站开发毕业设计,网页设计的就业和发展前景,上海网站建设兴策朝菌不知晦朔 蟪蛄不知春秋 眼界决定境界 CSDN 请求进入专栏 是否进入《51单片机专栏》? 确定 目录 数码管的简介 数码管引脚定义 数码管的原理图 74HC245 代码实现 静态数码管的显示 动态数码管的显示 数码管实现表白画面 数码管的简介 L… 朝菌不知晦朔 蟪蛄不知春秋 眼界决定境界 CSDN 请求进入专栏 是否进入《51单片机专栏》? 确定 目录 数码管的简介 数码管引脚定义 数码管的原理图 74HC245 代码实现 静态数码管的显示 动态数码管的显示 数码管实现表白画面 数码管的简介 LED数码管LED Segment Displays由多个 发光二极管 封装在一起组成 8 字型的器件引线已在内部连接完成只需引出它们的各个笔划公共电极。数码管实际上是由七个发光管组成 8 字形构成的加上小数点就是 8 个。这些段分别由字母 a b c d e f g dp 来表示 数码管引脚定义 使数码管显示数字的方法就是控制不同的发光体来发光达到显示不同数字的目的 八段数码管中八个LED发光体有两种接法共阴极 和 共阳极 共阴极公共端为阴极加阳极数码管点亮 即当真值为 1 时数码管点亮真值为 0 时数码管不亮 共阳极公共端为阳极加阴极数码管点亮 即当真值为 0 时数码管点亮真值为 1 时数码管不亮 注意 我们的单片机数码管上端是共阴极的所以发光的条件是上端赋予低电平下端赋予高电平 为了下面的方便这里总结出单片机的段码 /*0~9*/0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
/*A~F*/0x77,0x7c,0x39,0x5e,0x79,0x71 位选在使用时需要程序选定使用哪几个数码管 段选选定数码管后再对选定的数码管进行操作其操作与单个数码管的操作一致 如果我们想在数码管显示我们的数字 6 共阴极 1共阴极的公共端要接地低电平 2阳极位选端根据LED的亮灭需求给数据 0 或 11亮、0灭 这串数据称为 段码 3共阴极的环境下我们应该位选 a b c d e f 个数码管 4再对数码管进行电频的输入1 0 1 1 1 1 1 0 段码也就是 0x7d 共阳极 1共阳极端的公共端要接到 VCC高电平阴极给数据 0 或 1 1灭0亮 2共阳极的环境下我们应该位选 a b c d e f 个数码管 3再对数码管进行电频的输入0 1 0 0 0 0 0 1 通过以上我们可以知道共阴极与共阳极的段选是 互补 的 数码管的原理图 1数码管连接方式为共阴极连接 2而上面的 LED1 ~ 8其实接在了138译码器的输出端138译码器正好可以实现让LED1 ~ 8输出 0 或 1 3138译码器可将LED 1 ~ 8的八个端口转化为由3个端口 P22、P23、P24控制而G1、G2A、G2B端口被称为 使能端 438译码器也叫 38线译码器 是由3个线到8个线其中C是高位、A是低位CBA组成的数符合 8 进制控制着Y0 ~ Y7 这 8 个端口 5138译码器的作用就是用来选中某一位数码管的 74HC245 174HC245是一种 双向数据缓冲器输出使能OE方向控制DIR电源VDD和地GND 2方向控制DIR它接到了VCC高电平上将数据从左边输出到右边从右边将数据读取回左边 3单片机的高电频驱动能力弱低电频驱动能力强 4CC2电容是用来 稳定 电源的叫电源滤波 5上图的中间位置有一排电阻100R作用为限流电阻 防止数码管的电流过大 代码实现 静态数码管的显示 #include REGX52.Hunsigned char NixieTable[] {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71};void Nixie(unsigned char Location,Number)
{switch(Location){case 1:P2_4 1;P2_3 1;P2_2 1;break;case 2:P2_4 1;P2_3 1;P2_2 0;break;case 3:P2_4 1;P2_3 0;P2_2 1;break;case 4:P2_4 1;P2_3 0;P2_2 0;break;case 5:P2_4 0;P2_3 1;P2_2 1;break;case 6:P2_4 0;P2_3 1;P2_2 0;break;case 7:P2_4 0;P2_3 0;P2_2 1;break;case 8:P2_4 0;P2_3 0;P2_2 0;break;}P0 NixieTable[Number];
}void main()
{Nixie(6,6);while(1){}
} 动态数码管的显示 #include REGX52.Hunsigned char NixieTable[] {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71};void Delay(unsigned int xms) //12.000MHz
{unsigned char data i, j;while(xms){i 2;j 239;do{while (--j);} while (--i);xms--;}
}void Nixie(unsigned char Location,Number)
{switch(Location){case 1:P2_4 1;P2_3 1;P2_2 1;break;case 2:P2_4 1;P2_3 1;P2_2 0;break;case 3:P2_4 1;P2_3 0;P2_2 1;break;case 4:P2_4 1;P2_3 0;P2_2 0;break;case 5:P2_4 0;P2_3 1;P2_2 1;break;case 6:P2_4 0;P2_3 1;P2_2 0;break;case 7:P2_4 0;P2_3 0;P2_2 1;break;case 8:P2_4 0;P2_3 0;P2_2 0;break;}P0 NixieTable[Number];Delay(1);P0 0x00;
}void main()
{while(1){Nixie(1,1);Nixie(2,2);Nixie(3,3);}
} 数码管实现表白画面 #include REGX52.Hunsigned int sum 3;
unsigned char NixieTable[] {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71,0x40};void Delay(unsigned int xms)
{unsigned char data i, j;while(xms){i 2;j 239;do{while (--j);} while (--i);xms--;}
}void Nixie(unsigned char Location,Number)
{switch(Location){case 1:P2_4 1;P2_3 1;P2_2 1;break;case 2:P2_4 1;P2_3 1;P2_2 0;break;case 3:P2_4 1;P2_3 0;P2_2 1;break;case 4:P2_4 1;P2_3 0;P2_2 0;break;case 5:P2_4 0;P2_3 1;P2_2 1;break;case 6:P2_4 0;P2_3 1;P2_2 0;break;case 7:P2_4 0;P2_3 0;P2_2 1;break;case 8:P2_4 0;P2_3 0;P2_2 0;break;}P0 NixieTable[Number];Delay(500); P0 0x00;
}void Nixie1(unsigned char Location,Number)
{switch(Location){case 1:P2_4 1;P2_3 1;P2_2 1;break;case 2:P2_4 1;P2_3 1;P2_2 0;break;case 3:P2_4 1;P2_3 0;P2_2 1;break;case 4:P2_4 1;P2_3 0;P2_2 0;break;case 5:P2_4 0;P2_3 1;P2_2 1;break;case 6:P2_4 0;P2_3 1;P2_2 0;break;case 7:P2_4 0;P2_3 0;P2_2 1;break;case 8:P2_4 0;P2_3 0;P2_2 0;break;}P0 NixieTable[Number];Delay(100); P0 0x00;
}void Nixie2(unsigned char Location,Number)
{switch(Location){case 1:P2_4 1;P2_3 1;P2_2 1;break;case 2:P2_4 1;P2_3 1;P2_2 0;break;case 3:P2_4 1;P2_3 0;P2_2 1;break;case 4:P2_4 1;P2_3 0;P2_2 0;break;case 5:P2_4 0;P2_3 1;P2_2 1;break;case 6:P2_4 0;P2_3 1;P2_2 0;break;case 7:P2_4 0;P2_3 0;P2_2 1;break;case 8:P2_4 0;P2_3 0;P2_2 0;break;}P0 NixieTable[Number];Delay(1); P0 0x00;
}void main()
{Nixie(1,5);Nixie(2,2);Nixie(3,0);Nixie(4,16);Nixie(5,1);Nixie(6,3);Nixie(7,1);Nixie(8,4);while(sum--){Nixie1(1,5);Nixie1(2,2);Nixie1(3,0);Nixie1(4,16);Nixie1(5,1);Nixie1(6,3);Nixie1(7,1);Nixie1(8,4);}while(1){Nixie2(1,5);Nixie2(2,2);Nixie2(3,0);Nixie2(4,16);Nixie2(5,1);Nixie2(6,3);Nixie2(7,1);Nixie2(8,4);}
}