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

📄 2.c

📁 是本人在省赛是写的ad采集和显示的程序
💻 C
字号:
				   #include<reg51.h>
#define uchar unsigned char
#define uint unsigned int


//寄存器地址宏定义
#define DECODE_MODE  0x09   	//译码控制寄存器
#define INTENSITY    0x0A  		 //亮度控制寄存器
#define SCAN_LIMIT   0x0B   	//扫描界限寄存器
#define SHUT_DOWN    0x0C   	//关断模式寄存器
#define DISPLAY_TEST 0x0F  		 //测试控制寄存器       


//数码管位定义
#define	 D0	   0x01			//Digit0
#define	 D1	   0x02			//Digit1
#define	 D2	   0x03			//Digit2
#define	 D3	   0x04			//Digit3
#define	 D4	   0x05			//Digit4
#define	 D5	   0x06			//Digit5
#define	 D6	   0x07			//Digit6
#define	 D7	   0x08			//Digit7
//数组定义
uint Ad_Value[5];

//数码管不译码按段显示定义	 		七段+点格式   D7-D0  DP-A-B-C-D-E-F-G

//不带点	0  0x7e		1  0x30		2  0x6d		3  0x79		4  0x33		
//			5  0x5b		6  0x5f		7  0x70		8  0xff		9  0x7c
//			-  0x01		E  0x4f		H  0x37		L  0x0e		P  0x67		  blank 0x00

	
//MAX7219管脚定义
sbit CLK=P1^0;           //MAX7219串行时钟        	   13脚
sbit LOAD=P1^1;          //MAX7219片选      ( CS )     12脚
sbit DIN=P1^2;           //MAX7219串行数据       	    1脚




//TLC2543定义四线制接口

sbit     clk =     P3^4;       //时钟		18
sbit     din =     P3^5;       //数据入口	17
sbit    dout =     P3^6;       //数据出口	16
sbit      cs =     P3^7;       //片选		15
					
//函数声明 
void Initial(void);								//MAX7219初始化函数
void Write7219(uchar address,uchar dat); 		//数码管

void delay();       							//延时函数
uint AD_Conver(uchar channel);  				//AD转换


//主函数
void main()
{
	uint j;	 
	uchar d0,d1,d2,d3;

    Initial();               //MAX7219初始化
   	
     delay();
     while(1)
     {
	 
      		Ad_Value[0] = AD_Conver(1); //0通道,转换数据12位,高位在前,低位在后
     
	 		d3=Ad_Value[0]/1000;
			d2=(Ad_Value[0]%1000)/100;
			d1=Ad_Value[0]%100/10;
			d0=Ad_Value[0]%10;
	
			Write7219(D3,d3);
			Write7219(D2,d2);
			Write7219(D1,d1);
			Write7219 (D0,d0);
		
			for(j=0;j<45000;j++);
		
     }
}
//--------------------------------------------------
//              函数名称:    delay
//              函数功能:    延时55us
//              入口参数:     无
//              出口参数:     无
//--------------------------------------------------
void delay()
{
       uchar i = 5;
       while(i--);
}
//--------------------------------------------------
//              函数名称:    AD_Conver
//              函数功能:    AD转换
//              入口参数:     地址命令字
//              出口参数:     AD值
//--------------------------------------------------
uint AD_Conver(uchar channel)
{
       uchar i;
       uint ad_value = 0;

       clk = 0;
       cs  = 1;
       delay();
       cs  = 0;
     
       channel <<=4;
       for (i = 0; i < 12; i++)          //注意:在12个时钟周期的下降沿产生了数据输出
       {                                 //在前4个时钟周期内,TLC2543已经知道下一次将
			if (dout)    ad_value |= 1;      //哪个通道做转换,在后8个时钟内就一直对此通道
			din = (bit)(channel & 0x80); //进行采样,并保持到第12个时钟周期结束,此后才
			clk = 1;                       //开始进行A/D转换,转换时间需要10us.
			delay();                       //在第4-8个时钟周期内输入的是命令控制字
			clk = 0;                       //可根据需要输入
			channel<<=1;
         	ad_value<<=1;

       }

       clk =1;
       ad_value>>=1;

       return ad_value;				   

}





//地址、数据发送子程序

void Write7219(uchar address,uchar dat)
{   
    uchar i;
    LOAD=0;    						//拉低片选线,选中器件
    								//发送地址
    for (i=0;i<8;i++)        		//移位循环8次              
    {   
       CLK=0;        				//清零时钟总线
       DIN=(bit)(address&0x80); 	//每次取高字节      
       address<<=1;             	//左移一位
       CLK=1;        				//时钟上升沿,发送地址
    }
    								//发送数据
    for (i=0;i<8;i++)               
    {   
       CLK=0;
       DIN=(bit)(dat&0x80);     
       dat<<=1;  
       CLK=1;        				//时钟上升沿,发送数据
    }
    LOAD=1;    						//发送结束,上升沿锁存数据                       
}


						//MAX7219初始化,设置MAX7219内部的控制寄存器
void Initial(void)                 
{ 
    Write7219(SHUT_DOWN,0x01);         //开启正常工作模式(0xX1)	关断状态(0xX0)
    Write7219(DISPLAY_TEST,0x00);      //选择工作模式(0xX0)	   	测试状态(0xX1)
    Write7219(DECODE_MODE,0xff);       //选用全译码模式 (0xff)	  	不译码(0x00)
									   //只Digit0译码 (0x01)	  	只Digit0-3(0x0f)
    Write7219(SCAN_LIMIT,0x03);        //8只LED全用	(0xX7)		  	0xXN 用Digit0--DigitN
    Write7219(INTENSITY,0x04);         //设置初始亮度(0xX0--0xXF )  
}

⌨️ 快捷键说明

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