一、数码管显示某一杠
打开第一个数码管初始化程序为:P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
#include<stc15.h>
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
P0=0XFE;//1111 1110
while(1);
}
二、数码管的8个段依次点亮,其他保持熄灭
#include<stc15.h>
void Delay_MS(unsigned int MS);
unsigned int SEG=0;
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
while(1)
{
for(SEG=0;SEG<8;SEG++)
{
P0=~(0X01<<SEG);
Delay_MS(500);
}
}
}
void Delay_MS(unsigned int MS)
{
unsigned i,j;
for(i=0;i<MS;i++)
for(j=853;j>0;j--);
}
三、显示某个数值
#include<stc15.h>
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
P0=0XF9;//1111 1001,即显示数字“1”,其他数字依次类推
while(1);
}
四、
1、依次显示0—9、-、全部熄灭,每次显示间隔500ms
#include<stc15.h>
void Delay_MS(unsigned int MS);
unsigned int DT = 500;
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
while(1)
{
P0=0XC0;Delay_MS(DT);
P0=0XF9;Delay_MS(DT);
P0=0XA4;Delay_MS(DT);
P0=0XB0;Delay_MS(DT);
P0=0X99;Delay_MS(DT);
P0=0X92;Delay_MS(DT);
P0=0X82;Delay_MS(DT);
P0=0XF8;Delay_MS(DT);
P0=0X80;Delay_MS(DT);
P0=0X90;Delay_MS(DT);
P0=0XBF;Delay_MS(DT);
P0=0XFF;Delay_MS(DT);
}
}
void Delay_MS(unsigned int MS)
{
unsigned i,j;
for(i=0;i<MS;i++)
for(j=853;j>0;j--);
}
2、要求数码管值使用数组,功能函数使用for
#include<stc15.h>
//unsigned char tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char code
tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
void Delay_MS(unsigned int MS);
unsigned int DT = 500;
unsigned int SEG=0;
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
while(1)
{
for(SEG=0;SEG<11;SEG++)
{
P0=tab[SEG];
Delay_MS(DT);
}
/*P0=tab[SEG];
Delay_MS(DT);
SEG++;
if(SEG==11)SEG=0;*/
}
}
void Delay_MS(unsigned int MS)
{
unsigned i,j;
for(i=0;i<MS;i++)
for(j=853;j>0;j--);
}
3、8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F值,如此往复。
#include<stc15.h>
unsigned char code SMG_duanma[18]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,
0X82,0XF8,0X80,0X90,0X88,0X80,
0XC6,0XC0,0X86,0X8E,0XBF,0X7F};
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
void InitHC138(unsigned char n)
{
switch(n)
{
case 4:
P2=(P2&0X1F)|0X80;
break;
case 5:
P2=(P2&0X1F)|0XA0;
break;
case 6:
P2=(P2&0X1F)|0XC0;
break;
case 7:
P2=(P2&0X1F)|0XE0;
break;
}
}
void ShowSMG_Bit(unsigned char dat,unsigned pos)
{
InitHC138(6);//数码管的位置
P0=0X01<<pos;
InitHC138(7);//数码管的内容
P0=dat;
}
void SMG_Static()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
for(j=0;j<10;j++)
{
ShowSMG_Bit(SMG_duanma[j],i);
Delay(60000);
}
}
for(j=0;j<16;j++)
{
InitHC138(6);//数码管的位置
P0=0XFF;
InitHC138(7);//数码管的内容
P0=SMG_duanma[j];
Delay(60000);
Delay(60000);
}
}
//void ShowSMG()
//{
// InitHC138(6);
// P0=0X10;
// InitHC138(7);
// P0=0X82;
//}
void main()
{
while(1)
{
SMG_Static();
}
}