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

📄 tec1622.txt

📁 TEC6122芯片数码管动态扫描模块,C51编写,已经用在产品中了,对学习LED动他扫描很有帮助的
💻 TXT
字号:
/**********************************************************************************************************
TEC6122数码管动态扫描显示模块
seg[],为要显示码段数组(7位,其中一位用作指示灯了),seg[0]对应最低位,seg[6]对应最高位。

sdot为小数点的显示位置,0不显示;1显示在个位;2显示在十位;3显示在百位;

TEC6122约定,先送低位,后送高位,最先送入显示芯片中移位寄存器的是第一位S1(个位),最后是第八位S8(十进制千万位)

 *********************************************************************************************************/
 void disp_led(unsigned char seg[],unsigned char sdot)
{
   unsigned char dot[7];
   switch(sdot)	//判断小数点显示位置
	 {
	 case 0:{dot[0]=0;dot[1]=0;dot[2]=0;dot[3]=0;dot[4]=0;dot[5]=0;dot[6]=0;break; }   //不显示小数点
	 case 1:{dot[0]=1;dot[1]=0;dot[2]=0;dot[3]=0;dot[4]=0;dot[5]=0;dot[6]=0;break; }    //小数点显示在个位
	 case 2:{dot[0]=0;dot[1]=1;dot[2]=0;dot[3]=0;dot[4]=0;dot[5]=0;dot[6]=0;break; }    //小数点显示在十位
	 case 3:{dot[0]=0;dot[1]=0;dot[2]=1;dot[3]=0;dot[4]=0;dot[5]=0;dot[6]=0;break; }    //小数点显示在百位
	 case 4:{dot[0]=1;dot[1]=1;dot[2]=0;dot[3]=1;dot[4]=1;dot[5]=0;dot[6]=1;break; }    //小数点显示在百位
	 default:break;
	 }
	/*
	8位段码数据必须一块发到芯片中去,不论段码端连接数码管还是指示灯。
	段码数据在芯片中排列是有顺序的,规则就是,先进芯片的是放最低位,后进芯片的放最高位(其实就是进芯片中8个移位寄存器的排列顺序)。
	seg[]数组中数据谁先谁后发送,要根据实际情况作相应的修改,总之最低位先进芯片。
	*/

	 //温度(4位数码管)     				  
    load_number((seg[3]), (dot[0]));   //十位S4
    load_number((seg[2]), (dot[1]));   //百位S3
	load_number((seg[1]), (dot[2]));   //千位S2
	load_number((seg[0]), (dot[3]));   //万位S1
		//湿度(3位数码管)
	load_number((seg[4]), (dot[4])); //十万位S7
	load_number((seg[5]), (dot[5])); //百万位S6
	load_number((seg[6]), (dot[6])); //千万位S5
		//指示灯(连接到了最高位)																							
	load_ledone(); 																		//千万位S8
   	//-----------------------
 
	send_latch_clock();	//发送锁存脉冲信号
}

/******************************************************************/



/* 加载将要显示的数据,num-显示数据,dp:1显示小数点,0不显示小数点*/

void load_number(unsigned char number, bit dp)	   // 串行送出一位LED数码字符(一个字节),	dp,g,f,c,d.c,b,a; dp在最高位,

{
    unsigned char i;
    unsigned char temp;
    //temp = ~number_code[number];    /* 使用共阳极数码管,所以编码取反 */
	temp = number_code[number];    /* 使用共阴极数码管 */
    if (dp)//
    {
	//temp &= 0x7f;  //显示自身并加上小数点,与0x7f(二进制为01111111)相与即可以保留TEMP中数字又可以把最高位的小数点加上(使用共阳极数码管)
	  temp |= 0x80;  //显示自身并加上小数点,与0x80(二进制为10000000)相或即可以保留TEMP中数字又可以把最高位的小数点加上(使用共阴极数码管)
    }
    for (i=0; i<8; i++)
    {
        if ( (temp & 0x80) == 0x80)//看第一位(左端字节高位)是否为1,即检验DS是否为1,( dp在最高位,在TEC6122中约定dp是最低位最先送入,a是最高位最后送入)Serial Data Input
          {DS = 1;}
        else
          {DS = 0;}
        temp <<= 1;//左移一位,通过移位寄存器,再检验DS位。
        send_shift_clock();   /* 发移位脉冲信号 */
    }
}

/*单个LED显示,对某个笔画置位操作,用于指示灯显示 */ 
void load_ledone(void)	   // 串行送出一位LED数码字符(一个字节),	dp,g,f,c,d.c,b,a; 在TEC6122中dp在最高位,dp是最低位最先送入,a是最高位最后送入
     {
        if (dip)
		   {DS = 1;}
        else
           {DS = 0;}
        send_shift_clock();   /* 发移位脉冲信号 */
   		if (g)
		   {DS = 1;}
        else
           {DS = 0;}
        send_shift_clock();   /* 发移位脉冲信号 */
        if (f)
		   {DS = 1;}
        else
           {DS = 0;}
        send_shift_clock();   /* 发移位脉冲信号 */
        if (e)
		   {DS = 1;}
        else
           {DS = 0;}
        send_shift_clock();   /* 发移位脉冲信号 */
        if (d)
		   {DS = 1;}
        else
           {DS = 0;}
        send_shift_clock();   /* 发移位脉冲信号 */
        if (c)
		   {DS = 1;}
        else
           {DS = 0;}
        send_shift_clock();   /* 发移位脉冲信号 */
        if (b)
		   {DS = 1;}
        else
           {DS = 0;}
        send_shift_clock();   /* 发移位脉冲信号 */
        if (a)
		   {DS = 1;}
        else
           {DS = 0;}
        send_shift_clock();   /* 发移位脉冲信号 */
     }


/* 发送移位时钟脉冲信号 */
void send_shift_clock(void)
{
    SCP = 1;
    _nop_();
    SCP = 0;
}

/* 发送锁存脉冲信号 */
void send_latch_clock(void)
{
    LCP = 1;
    _nop_();
    LCP = 0;
}

/***********************************************************************************************/

⌨️ 快捷键说明

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