⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 01-数码管显示.c

📁 CAN现场总线.rar
💻 C
字号:
// 01-数码管显示
// 数字从左边到右边显示,而从第N开始到第四位数码管
// 源PIAE
// 修改致 29-09-09 akuei2

#include <reg52.h>
#include <intrins.h>

# define uchar unsigned char	//对管脚分配进行了定义
# define uint  unsigned int		//对子函数进行了声明
# define NOPS	{_nop_();_nop_();_nop_();_nop_();_nop_();} /*延时5us*/

//编码规则是hgfedcba ,h亦是dp,控制小数点,这里都设为1,不亮,eg:9==0b10010000;
uchar code led[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar Show_Data = 0xff;//数码管要显示的数据

sbit  	LED_RED     =  P2^1;//红色指示灯,作为接收指示灯
sbit  	LED_GRE     =  P2^2;//绿色指示灯,作为发送指示灯

void Delay(uchar delay_time); //延时程序声明
void led_seg7(uchar from,uchar number); //数码管显示程序声明

//主函数
void main(void)
{
    _nop_();
    while(1)
    {
        NOPS;
        led_seg7(1,Show_Data);
        LED_RED = !LED_RED;
        LED_GRE = !LED_GRE;
    }
}

//延时程序
void Delay(uchar delay_time)
{
    while(delay_time--);
}


//from(1_4):数码管显示起始位置(从右到左),number:显示的数
//eg: leg_seg7(1,255)
void led_seg7(uchar from,uchar number)  
{
	uchar digit,temp_l;
	uchar temp_h=0x7f;				  //0b0111111
	temp_h = _cror_(temp_h,from-1);   //确定从哪一位开始显示,即确定高四位,
									  //假设从第二位开始,temp_h==0b01111111
	temp_h = temp_h & 0xf0;           //取高四位,temp_h==0b01110000
	temp_l = P2 & 0x0f;               //取P2的低四位(c51默认下都是高电平),temp_l==0b00001111
	P2 = temp_h | temp_l;             //设定P2口 P2==0b0111111|0b00001111
									  //P2==0b0111111,0xbf,第二位打开;

    if(number==0)		//如果number==0的话,立即发送0的数码管码
    {
        P0 = led[0];
        Delay(10);
        P0 = 0xff;
    }        
    else
    {
        while(number)					//如果数字式大于0,就永远死循环,eg:number==255
        {
	    	digit = number%10 ;			//eg:digit=255%10,digit==5;
			number /= 10;				//eg:number=255/10,number==25;
			P0 = led[digit] ;			//送数码管码,eg:led[5]亦是 0x92
			Delay(10);
			temp_h = P2 & 0xf0;               //取P2的高四位,eg:temp_h=0=0b0111000;
			temp_h = temp_h | 0x0f;           //拼装 temp_h,进行位选,eg:temp_h==0b0111111
			temp_h = _cror_(temp_h,1);		  //eg:temp_h==0b01111111;
			temp_h = temp_h & 0xf0;           //取高四位,eg:temp_h==0b01110000
			temp_l = P2 & 0x0f;               //取P2的低四位, eg:temp_l==0b011111&0b00001111,temp_l==0b00001111;
			P0 = 0xff;						  //数码管清除
			P2 = temp_h | temp_l;             //设定P2口,eg:P2==0b01110000|0b00001111,P2==0b01111111;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -