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

📄 led_display.c

📁 此为本人今期一个项目的部分C51源程序
💻 C
字号:

/*----------------------------------------------------------------------------------------------
  共阴数码管,接法为:单片机数据输入端口接段控74HC595,再级连到位选控制74HC595
  传送数据:先送位,后送段
  
  电路接法:LED8—1    LED8—2        DIG1      DIG2    DIG3    DIG4    DIG5     DIG6
           从低到高排成列
          依次为b-g-c-h-d-e-a-f
          74hc595_a   74hc595_b    74hc595_c                                  74hc595_h
-----------------------------------------------------------------------------------------------*/  

#include <STC12C5412.H>
#include <intrins.h>
#include <port.h>

//共阳段码表,按顺序接A-QA,B-QB
//字节的高位对应数码管的H段,依次类推 
//static unsigned char code Dig_Tab[19]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90//0-9共阳段码表 
//                                                    ,0x88,0x82,0xc6,0xa1,0x84,0x8e      //a-f共阳段码表 
//                                                    ,0x89,0xc7,0xB7};                   //H L = 共阳段码表

//8段共阴接法LED显示表,从底到高依次为b-g-c-h-d-e-a-f,
 unsigned char code LED_Tab[9]={0x00,                                                    //灭灯
                                      0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};          //从低到高指示1-8级


 
//共阳数码管段码表,连线如上所注释                                           
 unsigned char code Duan_Tab[10]={0x50,0x5f,0x31,0x15,0x1e,0x94,0x90,0x5d,0x10,0x14};//0-9
//待显示内容的位码表
 unsigned char code Wei_Tab[8]={0x02,0x01,0x07,0x0b,0x13,0x23,0x43,0x83};    //位选送0x03则关全部显示
 
/*-------------------------------------------------------------------------------
                           向74595输出一字节数据子程序
---------------------------------------------------------------------------------*/
 void  WR_595(unsigned char data num2 ) 
 {
   unsigned char data count1;
   
   for(count1=0;count1<=7;count1++){
       if((num2&0x80)==0x80)    //最高位为1,则向SDATA_595发送1
	       SDATA_595=1;         //发出数据的最高位
	   else  
	       SDATA_595=0;
	 
	   num2<<=1;               //右移位
	   SCLK_595=0;	           //产生上生沿
	   _nop_();
	   _nop_();
	   SCLK_595=1;
    
   }  

 }
/*-------------------------------------------------------------------------------
                     打开锁存,更新74595输出子程序
---------------------------------------------------------------------------------*/
 void Out_595(void)
 {
   RCK_595=0;
   _nop_();
   _nop_();
   RCK_595=1;  /*上升沿锁存数据*/

 }
/*--------------------------------------------------------------------------------------
                                       显示函数                              
----------------------------------------------------------------------------------------*/
void Led_Display(unsigned char data Buffer[])
{               
  unsigned char count=0;
  for(count=0;count<8;count++)
  {
      if(count<2){       
          WR_595(Wei_Tab[count]);
          WR_595(LED_Tab[Buffer[count]]);
          Out_595();
      }
      else{
          WR_595(Wei_Tab[count]);
          if(count==3||count==6)
              WR_595(Duan_Tab[Buffer[count]] & 0xEF);
          else
              WR_595(Duan_Tab[Buffer[count]]);
          Out_595();
      }
  } 
          WR_595(Wei_Tab[1]);
          WR_595(LED_Tab[Buffer[1]]);
          Out_595();     
} 

⌨️ 快捷键说明

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