51单片机_数码管显示
51单片机_数码管显示在51单片机的应用中,数码管显示是一项基础且常见的功能。数码管能够显示数字和一些字符,通过内部的发光二极管(LED)来实现。根据公共端的不同,数码管分为共阳极和共阴极两种类型。在共阴极数码管中,所有LED的阴极连接在一起,而阳极则分别通过不同的引脚控制。要点亮特定的LED,只需在相应的阳极引脚上提供高电平信号。
数码管字符编码表(共阴/共阳对照)
字符共阴极段码(HEX)共阳极段码(HEX)说明二进制显示(abcdefg dp)数字00x3F0xC0数字00011 1111 / 1100 000010x060xF9数字10000 0110 / 1111 100120x5B0xA4数字20101 1011 / 1010 010030x4F0xB0数字30100 1111 / 1011 000040x660x99数字40110 0110 / 1001 100150x6D0x92数字50110 1101 / 1001 001060x7D0x82数字60111 1101 / 1000 001070x070xF8数字70000 0111 / 1111 100080x7F0x80数字80111 1111 / 1000 000090x6F0x90数字90110 1111 / 1001 0000大写字母A0x770x88字母A0111 0111 / 1000 1000C0x390xC6字母C0011 1001 / 1100 0110E0x790x86字母E0111 1001 / 1000 0110F0x710x8E字母F0111 0001 / 1000 1110G0x3D0xC2字母G0011 1101 / 1100 0010H0x760x89字母H0111 0110 / 1000 1001I0x060xF9字母I0000 0110 / 1111 1001J0x1E0xE1字母J0001 1110 / 1110 0001L0x380xC7字母L0011 1000 / 1100 0111O0x3F0xC0字母O0011 1111 / 1100 0000P0x730x8C字母P0111 0011 / 1000 1100S0x6D0x92字母S0110 1101 / 1001 0010U0x3E0xC1字母U0011 1110 / 1100 0001Y0x660x99字母Y0110 0110 / 1001 1001小写字母b0x7C0x83小写b0111 1100 / 1000 0011c0x580xA7小写c0101 1000 / 1010 0111d0x5E0xA1小写d0101 1110 / 1010 0001h0x740x8B小写h0111 0100 / 1000 1011n0x540xAB小写n0101 0100 / 1010 1011o0x5C0xA3小写o0101 1100 / 1010 0011r0x500xAF小写r0101 0000 / 1010 1111t0x780x87小写t0111 1000 / 1000 0111u0x1C0xE3小写u0001 1100 / 1110 0011y0x6E0x91小写y0110 1110 / 1001 0001特殊字符-0x400xBF减号/负号0100 0000 / 1011 1111.0x800x7F小数点1000 0000 / 0111 1111_0x080xF7下划线0000 1000 / 1111 0111=0x480xB7等号0100 1000 / 1011 0111空格0x000xFF全灭0000 0000 / 1111 1111全亮0xFF0x00所有段亮1111 1111 / 0000 0000普中51开发板使用的是两个4位的共阴极数码管,详细介绍如下:
74HC138译码器简介
作用:节省单片机I/O口
//这里结合两张图片一起介绍
// P2_4 = 1;P2_3 = 1;P2_2 = 1;控制LED8
// P2_4 = 1;P2_3 = 1;P2_2 = 0;控制LED7
// P2_4 = 1;P2_3 = 0;P2_2 = 1;控制LED6
// P2_4 = 1;P2_3 = 0;P2_2 = 0;控制LED5
// P2_4 = 0;P2_3 = 1;P2_2 = 1;控制LED4
// P2_4 = 0;P2_3 = 1;P2_2 = 0;控制LED3
// P2_4 = 0;P2_3 = 0;P2_2 = 1;控制LED2
// P2_4 = 0;P2_3 = 0;P2_2 = 0;控制LED1
数码管静态显示
#include <REGX52.H>
void Delay(unsigned int xms);
//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数码管显示子函数
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; //段码输出
}
void main()
{
Nixie(1,6); //在数码管的第1位置显示6
while(1)
{
}
}
// 延时1ms
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
// 现象:数码管的第1位置显示6让数码管数字动起来:0 ~ 9 循环显示
#include void Delay(unsigned int xms);//数码管段码表unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示子函数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; //段码输出}void main() { unsigned char i; while(1) { for(i = 0; i 东西不错很实用谢谢分享 感谢发布原创作品,程序园因你更精彩 这个好,看起来很实用 感谢,下载保存了 前排留名,哈哈哈 分享、互助 让互联网精神温暖你我 谢谢楼主提供! 分享、互助 让互联网精神温暖你我 不错,里面软件多更新就更好了 感谢分享,学习下。 前排留名,哈哈哈 用心讨论,共获提升! 很好很强大我过来先占个楼 待编辑 不错,里面软件多更新就更好了 用心讨论,共获提升! 前排留名,哈哈哈 感谢分享 谢谢楼主提供! 过来提前占个楼
页:
[1]
2