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

📄 tlc1543.c

📁 TLC1543与单片机进行连接
💻 C
字号:
#include<c8051f020.h>
#include <intrins.h>

#define SYSCLK 2000000
#define PORT      0

sbit CLOCK=P0^4;           //TLC1543与单片机的硬件连接
sbit D_IN = P0^3;
sbit D_OUT= P1^0;
sbit _CS = P0^2;
sbit EOC = P1^1;

unsigned long x;
unsigned char xdata LCDdata[7]={0x30,0x30,0x2e,0x30,0x30,0x30,0x56};
unsigned char *lcdpoint;
unsigned char lcd_data_count;

void PORT_Init(void);
void LCD_Init(void);

void main(void)
{
 
 unsigned char data1,p;
 unsigned long voltage;
 unsigned int v_int,v_frac;
 unsigned int data ad;unsigned int i;
 unsigned char data al=0,ah=0;

 WDTCN=0xde;
 WDTCN=0xad;

 PORT_Init();
 p=PORT;
  
 while(1)
 {  
     ah=0,al=0,ad=0; 
     CLOCK = 0;
     _CS = 0;

      for (i=0;i<4;i++) //把通道号打入1543
    {
      D_IN=(p&0x0f);CLOCK=1;CLOCK=0;
      p<<=1;
     }

      for (i=0;i<6;i++) //填充6个CLOCK
    {
      CLOCK=1;CLOCK=0;
     }

     _CS=1;
     _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
     _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
     _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
     _nop_();_nop_();_nop_();
     _CS=0; //等待AD转换



     _nop_();_nop_();_nop_();

      for (i=0;i<2;i++) //取D9-D6
    {
      D_OUT=1;
      CLOCK=1;
      ah<<=1;
      if (D_OUT) ah|=0x01;
      CLOCK=0;
     } 

      for (i=0;i<8;i++) //取D5--D2
    {
      D_OUT=1;
      CLOCK=1;
      al<<=1;
      if (D_OUT) al|=0x01;
      CLOCK=0;
     } 

     _CS=1;
     ad=(unsigned int)ah;ad<<=8;ad|=(unsigned int)al; //得到AD值
     
     voltage=ad;     

     for(x=0;x<50000;x++);

     
	 voltage=(voltage*5000L)/1024;       
	 v_int=voltage/1000;
	 v_frac=voltage-(v_int*1000);
     LCDdata[0]=v_int/10+0x30;LCDdata[1]=v_int%10+0x30;      //整数部分
	 LCDdata[3]=v_frac/100+0x30;LCDdata[4]=v_frac%100/10+0x30;LCDdata[5]=v_frac%100%10+0x30; //小数部分

	 LCD_Init();            //LCD初始化	 
	 P2=0xA0;               //准备送数据
	 for(x=0;x<50000;x++);   //通过改变延时量可改变LCD显示速度
	 lcdpoint=&LCDdata;
	 for(lcd_data_count=7;lcd_data_count>0;lcd_data_count--)      //显示第一行字符
	 {
	  data1=*lcdpoint;
	  
	  P3=data1;             //送显
	  P2=0x20;
	  P2=0xA0;
	  lcdpoint++;
	  for(x=0;x<5000;x++);
	  }
   }
}

void PORT_Init (void)
{ 
 XBR0    = 0x00;
 XBR1    = 0x00;                     
 XBR2    = 0x40;
 P0MDOUT  =0xff;
 P1MDIN  = 0xff;
 P2MDOUT = 0xe0;
 P3MDOUT = 0xff;
                   
}
void LCD_Init(void)
{
 P2 = 0X80;
 for(x=0;x<50000;x++);
 P3 = 0x30;				
 P2 = 0X00;
 P2 = 0X80;
 for(x=0;x<1000;x++);
 P3 = 0x0e;
 P2 = 0x00;
 P2 = 0x80;
 for(x=0;x<1000;x++);
 P3=  0x06;
 P2 = 0x00;
 P2 = 0x80;
 for(x=0;x<5000;x++);
 P3 = 0x01;
 P2 = 0x00;
 P2 = 0x80; 
 for(x=0;x<5000;x++);
}

⌨️ 快捷键说明

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