1、延时模块
void Delay_ms(unsigned int xms) //@11.0592MHz延时模块
{
unsigned char i, j;
while(xms--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
2、显示模块
void display(unsigned long number) //显示模块
{
unsigned char tab[8],i; //声明一个8位数组用来装每一位的断码及循环变量i
tab[0]=number/10000000; //第一位的断码
tab[1]=number%10000000/1000000; //第二位的断码
tab[2]=number%1000000/100000; //第三位的断码
tab[3]=number%100000/10000; //第四位的断码
tab[4]=number%10000/1000; //第五位的断码
tab[5]=number%1000/100; //第六位的断码
tab[6]=number%100/10; //第七位的断码
tab[7]=number%10/1; //第八位的断码
for(i=0;i<8;i++) //循环显示
{
switch(i)//位选,选择点亮的数码管
{
case 0:
LSC=0;LSB=0;LSA=0; break; //显示第零位
case 1 :
LSC=0;LSB=0;LSA=1; break; //显示第一位
case 2 :
LSC=0;LSB=1;LSA=0; break; //显示第二位
case 3 :
LSC=0;LSB=1;LSA=1; break; //显示第三位
case 4 :
LSC=1;LSB=0;LSA=0; break; //显示第四位
case 5 :
LSC=1;LSB=0;LSA=1; break; //显示第五位
case 6 :
LSC=1;LSB=1;LSA=0; break; //显示第六位
case 7 :
LSC=1;LSB=1;LSA=1; break; //显示第七位
}
P1=duanma[tab[i]]; //P1口输出每位对应的断码
Delay_ms(1); //延时一段时间
P1=0x00; //消影
}
}
总体代码
#include <REGX52.H> //头文件
#include <intrins.H> //包含_nop_()头文件
unsigned char code duanma[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,0x40}; //断码
sbit LSA=P2^0; //位定义
sbit LSB=P2^1; //位定义
sbit LSC=P2^2; //位定义
void Delay_ms(unsigned int xms) //@11.0592MHz延时模块
{
unsigned char i, j;
while(xms--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void display(unsigned long number) //显示模块
{
unsigned char tab[8],i; //声明一个8位数组用来装每一位的断码及循环变量i
tab[0]=number/10000000; //第一位的断码
tab[1]=number%10000000/1000000; //第二位的断码
tab[2]=number%1000000/100000; //第三位的断码
tab[3]=number%100000/10000; //第四位的断码
tab[4]=number%10000/1000; //第五位的断码
tab[5]=number%1000/100; //第六位的断码
tab[6]=number%100/10; //第七位的断码
tab[7]=number%10/1; //第八位的断码
for(i=0;i<8;i++) //循环显示
{
switch(i)//位选,选择点亮的数码管
{
case 0:
LSC=0;LSB=0;LSA=0; break; //显示第零位
case 1 :
LSC=0;LSB=0;LSA=1; break; //显示第一位
case 2 :
LSC=0;LSB=1;LSA=0; break; //显示第二位
case 3 :
LSC=0;LSB=1;LSA=1; break; //显示第三位
case 4 :
LSC=1;LSB=0;LSA=0; break; //显示第四位
case 5 :
LSC=1;LSB=0;LSA=1; break; //显示第五位
case 6 :
LSC=1;LSB=1;LSA=0; break; //显示第六位
case 7 :
LSC=1;LSB=1;LSA=1; break; //显示第七位
}
P1=duanma[tab[i]]; //P1口输出每位对应的断码
Delay_ms(1); //延时一段时间
P1=0x00; //消影
}
}
void main() //主函数
{
while(1) //循环执行
{
display(1234567); //调用显示
}
}