89C51七段数码管显示“12345678”

 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);    //调用显示
	}
}

    原文作者:北大兴耀
    原文地址: https://blog.csdn.net/yaoshanshanshan/article/details/124855036
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞