/*一般来说,如果连接数码管的引脚是按顺序来驱动,那么,对于程序员来说,是减少一些工作。而对于不规则(当然按顺序的连接电路也可以用)的连接方式,本人总结一个比价快速的方法,如果电路连接正常,不用借助图纸和万用表即可快速写好程序。
第一步:取段显示对应的值,0~F;共阴极和共阳极都可以用,
//取值时 SEG0对应P0.0,.....SEG7对应P0.7
const uint8 TabNum[17]={ //ABCDEFG
0X3F,0X06,0x5b,0X4f,0X66,0X6d,//0-5
0X7d,0X07,0X7f,0X6f,0X77, //6-A
0X7c,0X39,0X5e,0X79,0X71,// B C D E F};
第二步:
确认是共阳极还是共阴极:1:使其中的任意COM1=1,任意SEG=0,如果点亮数码管,这是共阳极,不亮则为共阴极
第三步:
我们以共阳极为例
1:先宏定义,以便操作:
#define SETB0 (unsigned char)0X01
#define SETB1 (unsigned char)0X02
#define SETB2 (unsigned char)0X04
#define SETB3 (unsigned char)0X08
#define SETB4 (unsigned char)0X10
#define SETB5 (unsigned char)0X20
#define SETB6 (unsigned char)0X40
#define SETB7 (unsigned char)0X80
//2:COM1=1//使其中一个数码管点亮
//3://先熄灭所有段
//SEG在 PC PG上
// PG_OUT=0XFF;
//PC_OUT=0XFF;
//4:
// PC_OUT&=~SETB0;//从SET0循环到SET7
//PG_OUT&=~SETB0;//从SET0循环到SET7
//一直循环执行,直到找到对应所有的引脚
//比如当执行PC_OUT&=~SETB4; 点亮了G段,则说明PC的PC4脚连接到SEGG段
//5:
//至此,我们就可以组合来写整个程序了;
//以下是我个人项目的操作取值表
// 点亮SEG 执行指令
//SETB3 A PC_OUT&=~SETB3;
//SETB0 B PG_OUT&=~SETB0;
//SETB7 C PC_OUT&=~SETB7;
//SETB5 D PC_OUT&=~SETB5;
//SETB6 E PC_OUT&=~SETB6
//SETB4 G PC_OUT&=~SETB4;
//SETB2 F PC_OUT&=~SETB2;
://6整个函数为:*/
/*
输入第一数码管显示数据:SHIWEI
输入第一数码管显示数据:GEWEI
*/
PC_OUT&=~SETB1;//共阳极,熄灭第一个数码管,COM1脚连接在PC1上
PG_OUT&=~SETB1;//共阳极,熄灭第二个数码管,COM2脚连接在PG1上
/*
PC_OUT |=SETB1;//共阳极,熄灭第一个数码管,COM1脚连接在PC1上
PG_OUT|=SETB1;//共阳极,熄灭第二个数码管,COM2脚连接在PG1上
*/
sx_com ++;
if(sx_com<=1) //显示第一位
{
temp_zj=TabNum[SHIWEI];
PG_OUT|=SETB1;//共阳极,
// PG_OUT&=~SETB1;//共阴极,
}
Else if(sx_com>=2)//显示第二位
{
sx_com=0;
temp_zj=TabNum[GEWEI];
PC_OUT|=SETB1;//共阳极
// PC_OUT&=~SETB1;//共阴极,
}
if(temp_zj&SETB0)//取SEG A
PC_OUT&=~SETB3;//共阴极则PC_OUT|=SETB3;//后面的类推
else
PC_OUT|=SETB3; //共阴极则PC_OUT&=~SETB3;
if(temp_zj&SETB1)//取SEG B
PG_OUT&=~SETB0;
else
PG_OUT|=SETB0;
if(temp_zj&SETB2)//取SEG C
PC_OUT&=~SETB7;
else
PC_OUT|=SETB7;
if(temp_zj&SETB3)//取SEG D
PC_OUT&=~SETB5;
else
PC_OUT|=SETB5;
if(temp_zj&SETB4)//取SEG E
PC_OUT&=~SETB6;
else
PC_OUT|=SETB6;
if(temp_zj&SETB5)//取SEG F
PC_OUT&=~SETB2;
else
PC_OUT|=SETB2;
if(temp_zj&SETB6)//取SEG G
PC_OUT&=~SETB4;
else
PC_OUT|=SETB4;