解决方法:
试验数码管上显示数字( 单片机直接实现位选 共阴极) 。
解决方式:
连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 。
代码:
#include
#define uint unsigned int
#define uchar unsigned char
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
unsigned int code dbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
unsigned int code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void main()
{
while(1)
{
P1=dbit[4];
P0=num[9];
}
}
位定义
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
void main()
{
while(1)
{
LSA=0;
LSB=0;
LSC=0;
P0=num[6];
delay(2);
LSA=1;
LSB=0;
LSC=0;
P0=num[6];
delay(2);
}
}
//让八个数码管全部亮并且从0~9循环
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar num;
uchar wnum=0x00;
uchar code dbit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段选,选择要显示的数字
//uchar code wnum[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//八位数码管
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
void main()
{
P1=wnum;
while(1)
{
for(num=0;num<10;num++)
{
P0=dbit[num];
delay(500);
}
}
}
0x7f的8位二进制数是01111111,与字模相与(&)之后会亮,这说明共阳LED数码管小数点属于字模编码的最高位,如果最高位为0小数点则亮。而字模编码的小数点默认都是不亮的。如数字0的字模~0x3F按位取反后的二进制数是11000000,最高位为1小数点不亮,那么11000000与上述01111111相与的结果是01000000,最高位变为0小数点也就亮了。还有:
数字1的字模~0x06按位取反后的二进制数是11111001,最高位为1;
数字2的字模~0x5B按位取反后的二进制数是10100100,最高位为1;
。。。。。。
其它的字模你自己看看最高位都是1。