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

📄 new2.c

📁 运用PTOTEUS仿真74595对6个LED数码管的驱动显示
💻 C
字号:
					   #include <reg51.h>     //包括一个52标准内核的头文件
#include<absacc.h>
#include<stdlib.h>
#include <intrins.h>	   /*used for _nop_() function*/

sbit  SDATA_595 =P0^0 ;/*串行数据输入*/  
sbit  SCLK_595  = P0^1;/*移位时钟脉冲*/
sbit  RCK_595   =P0^2 ;  /*输出锁存器控制脉冲*/
sbit  YELLOW=P2^0; //黄色
sbit  ALARM=P2^1; //报警
sbit  RED=P2^2;   //红色

bit b_flash;

//#define TM_second    XBYTE[0xFE00]
//#define TM_minute   XBYTE[0xFE02]
//#define TM_hour   XBYTE[0xFE04]
#define TM_week   XBYTE[0xFE06]
#define TM_day   XBYTE[0xFE07]
#define TM_month   XBYTE[0xFE08]
#define TM_year   XBYTE[0xFE09]
#define REG_A   XBYTE[0xFE0A]
#define REG_B   XBYTE[0xFE0B]
#define REG_C   XBYTE[0xFE0C]
#define REG_D   XBYTE[0xFE0D]
#define RAM_114   XBYTE[0xFE0e]

#define uchar  unsigned char 
#define uint   unsigned int
#define ulong unsigned long
#define	WriteDeviceAddress 0xa0	  //定义器件在IIC总线中的写地址
#define	ReadDviceAddress 0xa1	  //器件在IIC总线中的读地址

sbit	SCL=P1^6;				  //定义IIC器件串行总线
sbit	SDA=P1^7;				  //定义IIC器件串行总线 

unsigned char Temp;
unsigned char Dis_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*0~9的共阴极段码表*/
unsigned char Dis_Date[5];
unsigned char CarID =2134 ;
int countv;
int count,countv;
int counter;
uchar bdata dat;






void DelayMs(unsigned int number) 	  //延时函数
{
	unsigned char temp;
	for(;number!=0;number--) 
	{
		for(temp=112;temp!=0;temp--) ;
	}
}



///}   
/***************************
  初始化(定时器0为定时器,定时器1为计数器)
***************************/
void Init()
{


TMOD=0x51;

TL0 = -50000%256;
TH0 = -50000/256;        //2.5ms定时

TR0 = 1;        //"T0运行控制"
ET0 = 1;        //1"定时器0中断允许"
TR1 = 1;        //"T1运行控制"

TH1=TL1=0;
EA=1;          //总中断允许
counter=0;	  //计数器清零
}

  //*延时子程序void Delay(unsinged char data i)*/
void Delay(unsigned char i)
{
 	 while(--i); 

}


void UPdate( )
 {
 	  float  data  temp2;//定义存放计算得到的速度值
 	   uchar i,ch;
  int TM_hour=15;
  int TM_minute=30;

 	


  temp2=3.6*3*0.4*counter;
  
    Temp=(unsigned int)temp2;//强制转型

   Dis_Date[5]=Temp%10;
   Dis_Date[4]=Temp/10;
   Dis_Date[3]=TM_minute%10;
   Dis_Date[2]=TM_minute/10;
   Dis_Date[1]=TM_hour%10;
   Dis_Date[0]=TM_hour/10;

    if(Temp>35)
	{
	    YELLOW=0; //黄色
            ALARM=1; //报警
           RED=1;   //红色

	}
	else if((Temp)>20&&(Temp<35))
		{
			YELLOW=1; //黄色
                   ALARM=1; //报警
                 RED=0;   //红色
		}
	else 
      {};


   
}
/*写数据到74HC595函数*/
 void  WR_595(unsigned char data num2 )
 {
   unsigned char data count1;
   
   for(count1=0;count1<=7;count1++)
   {
	 num2<<=1;    /*右移位*/
	 SDATA_595=CY;
	 	_nop_();
	 _nop_();
	 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)
 {
      int i;
      for(i=0;i<=5;i++)//一次输出六位
	 {
		   WR_595(Dis_Tab[Dis_Date[i]]);  
        }

	Out_595();
	Delay(1000);
		  					  
        TL1=0;  

  }
/****************************************************************/
  main()
{

 Init();
 YELLOW=0;
ALARM=0;
RED=0;
while(1)
   {
  
      

   }
   

}
void Time0 (void) interrupt 1
{
     
      uchar scan;

       TR0=0; 
	   Delay(1000); 
	    scan++; 
        if(scan==20)
        { scan = 0;
          counter=TL1;  
          UPdate();
	    Led_Drive();
	      }       
	       
        TL0 = -50000%256;
        TH0 = -50000/256;        //2.5ms定时
        TR0=1;
}

⌨️ 快捷键说明

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