此处仅说明一下8段数码管的使用原理及方法:
目录
1.数码管的分类以及显示:
1.共阳数码管
共阳极就是将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。将COM接到+5v,那么某一段发光二极管的阴极为低电平时,相应字段就点亮。
即若想显示数字“0”
//P1是GPIO端口输出数据寄存器
P1=0xc0; //二进制 为 1100 0000 参考数码管排列,
//可以得出0对应的段点亮,1对应的段熄灭,结果显示数字"0"
2.共阴数码管
共阴极就是将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。将COM接到GND,那么某一段发光二极管的阳极为高电平时,相应字段就点亮。
//P1是GPIO端口输出数据寄存器
P1=0x3f; //二进制 为 0011 1111 参考数码管排列,
//可以得出1对应的段点亮,0对应的段熄灭,结果显示数字"0"
至此相比明白共阳和共阴了,以下就以共阳来举例。
2.单个共阳数码管的另一种显示方法(查表法)
//通过循环赋值给P1,让数码管显示特定的字符或者数字
unsigned char code dofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}
//1.code 是表示将数组存储到rom中,而并非ram中。
//2.数组最后一个元素后的逗号是可选的(可有可无)。
//3.显示数值0-9
unsigned char i = 0;
while(1)
{
for(i = 0 ;i<10;i++)
{
P1 = dofly_table[i];//P1是端口寄存器
Delay(10000);//延时函数,单位是ms;每10s换一个数字。
}
}
3.单个共阳数码管模拟水流
通过循环赋值给P1,让数码管显示特定流动样式
//P1是端口寄存器
unsigned char i;
while(1)
{
P1=0xfe;//初始化为a段亮
for(i = 0;i<6;i++)//循环6次 让abcdefg依次单独亮
{
Delay(1000);//延时1s
P1<<=1;
p1|=0x01;
}
}
3.单个共阳数码管动态显示变化数字
描述:单个共阳数码管指示逻辑电平通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变 。
//P1和P3是端口寄存器
unsigned char code dofly_table[10]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
}
//1.code 是表示将数组存储到rom中,而并非ram中。
//2.数组最后一个元素后的逗号是可选的(可有可无)。
//3.显示数值0-9
P1 = dofly_table[1];//P1默认是数字“0”
while (1)
{
switch (P3)//p3口作为独立按键的输入端口,检测端口带安平并作出判断。
{
case 0xfe:P1 = dofly_table[1];break; //0xfe = 1111 1110;显示的是0xf9即数字“1”
case 0xfd:P1 = dofly_table[2];break; //0xfd = 1111 1101;显示的是0xa4即数字“2”
case 0xfb:P1 = dofly_table[3];break;
case 0xf7:P1 = dofly_table[4];break; //0xfd = 1111 1011;显示的是0xa4即数字“4”
case 0xef:P1 = dofly_table[5];break; //以此类推
case 0xdf:P1 = dofly_table[6];break;
case 0xbf:P1 = dofly_table[7];break;
case 0x7f:P1 = dofly_table[8];break;
default:break;//如果什么都没按下,直接跳出。
}
}
4.单个共阳数码管指示逻辑电平
描述:通过循环检测P3.2口电平输入值,然后用数码管输出"H" or "L",表示该端口现在连接的是高电平还是低电平(低电平显示“L”,高电平显示“H”)。
//P1和P3是端口寄存器
P3 = 0Xfd; //初始化P3;即1111 1101-->第二位为0;
P1=0xc7;//初始化P1 ,默认显示"L";
unsigned char temp = 0xff;
while(1)
{
if(P3 & temp == 0xff)//P3的第二位为高电平
{
P1=0x89; //"H"
}else
{
P1=0xc7; //"L"
}
}