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

📄 voltage.c

📁 采用51系列单片机 用TI公司的TLC549采样
💻 C
字号:
#include"reg51.h"  
#include<INTRINS.H>
#define uchar unsigned char
/*MAX7219寄存器功能说明**********************************/
#define shutdown 0x0c //0  关闭  1  开启
#define decodemode 0x09 //0  ndecode all
       //1  decode 0
          //0f decode 0-3
       //ff decode all
#define intensity 0x0a //亮度控制寄存器 0-f
/*显示位控制寄存器***************************************/
/*0-第一位  1-第一、二位  ......7-全显示*****************/
#define scanlimit 0x0b 

#define testreg  0x0f //测试模式 0 普通模式  1显示测试模式
#define dataaddr 0x01 //显示基址
 
/********************************************************/
#define set_0(X) X=0
#define set_1(X) X=1

#define timerh 0xee
#define timerl 0xff

sbit ADDR0 = P2^5 ;
sbit ADDR1 = P2^6 ;
sbit ADDR2 = P2^7 ;

#define SELECT_TLC549()		ADDR0=1; ADDR1=1; ADDR2=0
#define SELECT_NONE()		ADDR0=1; ADDR1=1; ADDR2=1

unsigned char seg[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b}; // 0--9
unsigned char sega[]={0xfe,0xb0,0xed,0xf9,0xb3,0xdb,0xdf,0xf0,0xff,0xfb};
sbit TLC549_CLK=P2^3;
sbit TLC549_DATA=P2^4;
sbit clk=P1^0;
sbit load_cs=P1^1;
sbit din=P1^2;

unsigned char cs;
unsigned char dispram[4];

void initial(void);
void intimer(void);
void selectcs(void);
void select_none(void);
void delay(unsigned int time);
unsigned char TLC549_AD(void);
void max7219_data_send(uchar addr,uchar data_send);

unsigned char  adcnt,advalue;
long adsum,addisplay;
float m,n;

void main()
{
  P2=0xff;
  initial(); 
  intimer();
  
  max7219_data_send(decodemode,0x00);
  max7219_data_send(intensity,0x06);
  max7219_data_send(scanlimit,0x03);
  max7219_data_send(shutdown,0x01); 
  max7219_data_send(testreg,0x00);

  dispram[0]=0;
  dispram[1]=1;
  dispram[2]=2;
  dispram[3]=3;

  
  TR1=1;

  while(1)
  {  
    advalue=TLC549_AD();
    if(adcnt==255)
      {
       adcnt=0;      
       m=(float)adsum*5/65025;
       n=m*m/8;
      addisplay=(long)(n*1000);
      dispram[0]=addisplay/1000;
      dispram[1]=(addisplay%1000)/100;   
      dispram[2]=(addisplay%100)/10;
      dispram[3]=addisplay%10;
      adsum=0;
	  delay(1000);
      }
	else
	  {
	    adcnt++;
		adsum+=advalue;
	  }
   }	 
}

void initial(void)
{
 set_0(clk);
 set_0(load_cs);
 set_0(din);
}

void max7219_data_send(uchar addr,uchar data_send)
{
  uchar i,a;
  set_0(load_cs);
  for(i=0;i<4;i++)
      { 
       set_0(clk);
       set_1(clk);  
       }

 addr=addr<<4;
 for(i=0;i<4;i++)
     {
       set_0(clk);
       a=addr&0x80;
       if(a) set_1(din);
      else set_0(din);
      addr=addr<<1;
      set_1(clk);
        }
 for(i=0;i<8;i++)
      {
        set_0(clk);
        a=data_send&0x80;
        if(a) set_1(din);
        else set_0(din);
        data_send=data_send<<1;
        set_1(clk); 
       }
 set_1(load_cs);
}

unsigned char TLC549_AD(void)
{
  char i;
  unsigned char rt=0;
  TLC549_DATA=1;
  TLC549_CLK=0;
  SELECT_TLC549();	

  if(TLC549_DATA&1)
    rt|=0x80;
  TLC549_CLK=1;
  TLC549_CLK=0;

  for(i=6;i>=0;i--)
     {
 	   TLC549_CLK=1;
	   if(TLC549_DATA&1)
		  rt|=1<<i;
       TLC549_CLK=0;
 	 }
  TLC549_CLK=1;
  SELECT_NONE();	
  return rt;
}

void intimer(void)
{
  cs=0;
  dispram[0]=dispram[1]=dispram[2]=dispram[3]=0;

  TMOD=0x10;
  TH1=timerh;
  TL1=timerl;

  EA=1;
  ET1=1;
}

void timer(void) interrupt 3 using 2
{ 
  uchar m;
  TH1=timerh;
  TL1=timerl;
  TF1=0;

  if(cs==4)
     cs=0;
     m=dispram[cs];
  if(cs==0)
      max7219_data_send(cs+1,sega[m]);
  else
      max7219_data_send(cs+1,seg[m]);
  cs++;  
}

void delay(unsigned int time)     // time*0.1ms延时
{
   unsigned int i,j;

   for(j=0;j<time;j++)
     {
       for(i=0;i<60;i++)
       {;}
      }
}




  






        




⌨️ 快捷键说明

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