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

📄 595.c

📁 呕心沥血
💻 C
字号:
#include <reg52.h>
#include <intrins.h>	   /*used for _nop_() function*/

#define duanma P0
#define uchar unsigned char

sbit  SDATA_595 =P1^0 ;  /*串行数据输入*/   
sbit  RCK_595   =P1^1 ;  /*输出锁存器控制脉冲*/
sbit  SCLK_595  = P1^2;  /*移位时钟脉冲*/



/****************************************************************/
//显示段码										
unsigned char data disp_code[11]={0xc0,0xf9,0xa4,0xb0,	// 0, 1, 2, 3
				0x99,0x92,0x82,0xf8,0x80,0x90,0xff};// 4, 5, 6, 7, 8, 9, off


/****************************************************************/
/***************************************************************************/
void delay_1ms(unsigned int ms)
{
 unsigned char i;
  while(ms--)
  for(i=0;i<20;i++);
}
/***************************************************************************/
 
/*写数据到74HC595函数*/
 void  WR_595(uchar data num2)
 {
   uchar 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; /*产生上升沿*/
    
	}  

 }

 /****************************************************************/
 /*更新74HC595输出数据函数void  Out_595(void)*/
 void  Out_595(void)
 {
   RCK_595=0;
   _nop_();
   _nop_();
   RCK_595=1;  /*上升沿锁存数据*/


 }

 /****************************************************************/
 void Led_Drive(void)
 {

   
	 while(1)
	 {

		 WR_595(0x01); 
		 Out_595();
		 duanma=disp_code[1];
		 delay_1ms(2);
		 duanma=disp_code[10];
	     
		 WR_595(0x02); 
		 Out_595();
		 duanma=disp_code[2];
		 delay_1ms(2);
		 duanma=disp_code[10];
	     
		 WR_595(0x04); 
		 Out_595();
		 duanma=disp_code[3];
		 delay_1ms(2);
		 duanma=disp_code[10];

	     WR_595(0x08); 
		 Out_595();
		 duanma=disp_code[4];
		 delay_1ms(2);
		 duanma=disp_code[10];
	     
		 WR_595(0x10); 
		 Out_595();
		 duanma=disp_code[5];
		 delay_1ms(2);
		 duanma=disp_code[10];

	     WR_595(0x20); 
		 Out_595();
		 duanma=disp_code[6];
		 delay_1ms(2);
		 duanma=disp_code[10];
	     
		 WR_595(0x40); 
		 Out_595();
		 duanma=disp_code[7];
		 delay_1ms(2);
		 duanma=disp_code[10];

	     WR_595(0x80); 
		 Out_595();
		 duanma=disp_code[8];
		 delay_1ms(2);
		 duanma=disp_code[10];
	     
	  }
   }
/****************************************************************/
  main()
{
  
   Led_Drive();	 //自身是个无限循环显示的程序
   

   
}
//当MR为高电平,OE为低电平时,数据在SHCP上升沿进入移位寄存器,在STCP上升沿输出到并行端口。 

⌨️ 快捷键说明

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