四极管:AD转换之AVR AD TLC 5510

主函数:

四极管:main.c

#ifndef MAIN_C
#define MAIN_C

#include <avr/io.h>
#include <util/delay.h>
#include "1602driver.c"
#include "TLC_5510.c"
uint8_t num[]="0123456789";

int main(void)
{
    DDRB=0XFF;
	PORTB=0XFF;
    Init_1602(); 
    uint8_t   adc;
	uint32_t  adc_0;
	
	
	Displaypstr(0,0,"ad = ");
    while(1)
     {   
       
        adc = Tlc_5510();
		adc_0 = (adc*5000)>>8;
			
        Displaychar(0,1,num[adc/100]);
		Displaychar(1,1,num[adc%100/10]);
		Displaychar(2,1,num[adc%10]);
		
		
		Displaychar(3,0,num[adc_0/1000]);
		Displaychar(4,0,num[adc_0%1000/100]);
		Displaychar(5,0,num[adc_0%100/10]);
		Displaychar(6,0,num[adc_0%10]);
		
	
		_delay_ms(100);
     }

}


#endif


TLC_5510驱动:(TLC_5510.c)

#ifndef  TLC_5510_C
#define  TLC_5510_C
/***********************************
 函数功能:8位高速AD并行转换(TLC5510)

          
 使用环境:    硬件: MCU: ATmega32L 
                      F_CPU = 16000000
                      外部:16000000 
			  
 编译环境:WinAVR-20080610	
 包含子程序:#include <util/delay.h>			  
 日期:2009年7月13日
 作者:杨琦
 修改者: 			   	(日期:  )				   
***********************************/	
#include <util/delay.h>
#define DATA_IN()   { DDRA=0X00;}
#define DATA_PIN   PINA
  
#define  OE_0()    {DDRB|=(1<<0);PORTB&=~(1<<0);}
#define  OE_1()    {DDRB&=~(1<<0);PORTB|=(1<<0);}

#define  CLK_0()   {DDRB|=(1<<1);PORTB&=~(1<<1);}
#define  CLK_1()   {DDRB&=~(1<<1);PORTB|=(1<<1);}

/****************************************
** 函数名:Tlc_5510(void)
** 功能  :5510驱动
** 子函数:_delay_ms()
** 返回值 :uint8_t
****************************************/
uint8_t   Tlc_5510(void)
{
    
	uint8_t AD_value = 0;
	
	DATA_IN();
    OE_0();
	_delay_ms(1);
    CLK_1(); 
	_delay_ms(1);
    CLK_0();
	_delay_ms(1);
    
    AD_value = DATA_PIN; 
    return AD_value;
}
#endif

四极管:显示(1602driver.c)

/***********************************
 函数功能:1602 液晶显示两行数字和字符
 函数说明:四线方式,数据输出线:DATA_PORT
          
 使用环境:    硬件: MCU: ATmega32L 
                      F_CPU = 16000000
                      外部:16000000 
 接线方法:3跟数据线:PC1-RS   PC2-RW  PC3-E
           4跟数据线:PC				  
 编译环境:WinAVR-20080610	
 显示说明:  
         显示字符函数:
             Displaychar(unsigned char x,unsigned char y, unsigned char wdata)
            (x为横坐标   y为坐标 wdata为所要显示的东西)
		 显示字符串函数:
		     Displaypstr(unsigned char x,unsigned char y,unsigned char *str)
            (x为横坐标   y为坐标  wdata为所要显示的东西)
		  
 坐标定位说明:X:0-15
                Y:0-1	
 包含文件 :MyBit.h 	
 作者:杨琦			  
 日期:2009年7月13日
 修改者: 			   	(日期:  )				   
***********************************/		  
//管脚定义		  
#define DATA_PORT PORTC
#define RS_0() {DDRC |=(1<<1);PORTC &=~(1<<1);}       
#define RS_1() {DDRC |=(1<<1);PORTC |= (1<<1);}
#define RW_0() {DDRC |=(1<<2);PORTC &=~(1<<2);}
#define RW_1() {DDRC |=(1<<2);PORTC |= (1<<2);}
#define E_0()  {DDRC |=(1<<3);PORTC &=~(1<<3);} 
#define E_1()  {DDRC |=(1<<3);PORTC |= (1<<3);} 


#define budy_in()   {DDRC&=~(1<<7);PORTC|=(1<<7);}
#define budy_high    PINC&(1<<7)
#define busy_out()   {DDRC|=(1<<7);}
//注:读忙函数需对输出口最高位进行设置和判断
/****************************************
** 函数名:readbusy
** 功能  :读忙函数
** 子函数:无
** 变量  :无
----------------------------------------
****************************************/
void readbusy(void)
{
	 //检测忙位改为输入
	budy_in();//拉高
    RW_1();
	RS_0();
	E_1();
	while(budy_high);//等待为低电平   ????????@@@@@@
	E_0();
	busy_out(); 
}
/****************************************
** 函数名:sentbyte
** 功能  :发送一节数
** 子函数:readbusy()
** 变量  :数据或命令 tybe=1数据 0命令
----------------------------------------
****************************************/
void sentbyte(unsigned char i,unsigned char tybe)
{
    unsigned char temp;
	readbusy();
	
    if(tybe == 1)
	{
	    RW_0();
        RS_1();	
    }
	if(tybe == 0)
	{
	    RW_0();
		RS_0();
	}
	
	temp = i&0xf0;
	DATA_PORT &=0x0f;
    DATA_PORT |=temp;
    E_1();
    E_0(); 
	
	temp = (i<<4)&0xf0;
	DATA_PORT &=0X0f;
	DATA_PORT |=temp;
	E_1();
    E_0(); 
}
/****************************************
** 函数名:Init_1602()
** 功能  :初始化1602液晶显示
** 变量  :无
----------------------------------------
****************************************/
void Init_1602(void)
{
    DDRC = 0xff;
	
    sentbyte(0x30,0);
    sentbyte(0x30,0);
	sentbyte(0x30,0);
	sentbyte(0x02,0);

    sentbyte(0x28,0);   //设置工作方式:4位总线字符两行0x28,8位总线字符两行0x38
	sentbyte(0x01,0);  //清屏
	sentbyte(0x02,0);   //数据指针清零
	sentbyte(0x0c,0);   //开光标,但光标不闪
	sentbyte(0x06,0);   //写字符后光标加一
	sentbyte(0x01,0);   //清屏
}
/****************************************
** 函数名:Locate_xy()
** 功能  :写地址
** 变量  :x,y
----------------------------------------
****************************************/
void Locate_xy(unsigned char x,unsigned char y )
{
    unsigned char addr=0;
	if(y == 0)addr=0x80+x;
	if(y == 1)addr=0xc0+x;
    sentbyte(addr,0);
}

/****************************************
** 函数名:Displaychar()
** 功能  :1602液晶显示一个字符
** 变量  :x,y,wdata
----------------------------------------
****************************************/
void Displaychar(unsigned char x,unsigned char y,  unsigned char wdata)
{
    Locate_xy(x,y);   
    sentbyte(wdata,1);
}
/****************************************
** 函数名:Displaypstr()
** 功能  :1602液晶显示一个字符串
** 变量  :x,y,*str
----------------------------------------
****************************************/
void Displaypstr(unsigned char x,unsigned char y,unsigned char *str)
{
    unsigned int i=0;
	Locate_xy(x,y);   
	while(str[i]!='\0')
	{
	    sentbyte(str[i++],1);
	    x++;
	    if(x>15)
	    {
		   x=0;
		   y++;
		   if(y==2)y=0;
		   Locate_xy(x,y);   
		}
	}    
}


转载请注明出处。作者:四极管。广西师范大学 电子工程学院大学生科技创新基地 邮箱: [email protected]


你可能感兴趣的:(四极管:AD转换之AVR AD TLC 5510)