led_595.bak

来自「利用DS1302」· BAK 代码 · 共 58 行

BAK
58
字号
//#include <reg52.h>

sbit ser        =P1^3;   //串行线
sbit srclk      =P3^5;   //
sbit rclk       =P3^3;   //

code unsigned char seg[16] = {
                   0x03,0x9f,0x25,0x0d,//0,1,2,3,
                   0x99,0x49,0x41,0x1f,//4,5,6,7,
                   0x01,0x09,0x11,0xc1,//8,9,A,B,
                   0x63,0x85,0x61,0x71 //C,D,E,F,
                              };


unsigned char disp_buff[4];        //定义缓存

void disp_buff_char(void)     //缓冲区
{
   unsigned char char_seg;     //待显示数码管的数值
   char i,j;
   rclk=0;
   for(j=3;j>=0;j--)           //给4个595赋值
   {
      char_seg=disp_buff[j];      
      for(i=0;i<8;i++)         //把单片机内的数值转换为串行数据传送给595,由595自动再将串行转并行
      {
         srclk=0;
         ser=char_seg&0x01;
         srclk=1;
         char_seg=char_seg>>1;
      }
   }
   rclk=1;      //发送4个595里面的数值给数码管显示
}

void disp_num(int i,char dp_p)   //显示数字和小数点
{
   if(i>=10000)
   {
      disp_buff[3]=seg[14];
      disp_buff[2]=0xff;
      disp_buff[1]=0xff;
      disp_buff[0]=0xff;
   } else
   {
      disp_buff[3]=seg[i/1000];
      disp_buff[2]=seg[(i%1000)/100];
      disp_buff[1]=seg[(i%100)/10];
      disp_buff[0]=seg[i%10];
      
      if((dp_p<=3)&&(dp_p>=1))
      {
         disp_buff[dp_p] = disp_buff[dp_p]&0xfe;
      }
   }
   disp_buff_char();
}

⌨️ 快捷键说明

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