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

📄 tlc2543.c

📁 ad转换一简单的程序 型号:TI公司的TLC2543芯片
💻 C
字号:
/**************************************
              TLC2543驱动程序
*************************************/

#include <AT89X52.h>
#include <intrins.h>

#define CLOCK P1_7 /*2543时钟*/
#define D_IN P1_6/*2543输入*/
#define D_OUT P1_5 /*2543输出*/
#define _CS P1_4 /*2543片选*/

#define uint unsigned int
#define uchar unsigned char

uchar b1,b2,b3,b4;
/*******************************************************************************************************/
#define E1 P1_2
#define E2 P1_3
#define RS P3_5
#define R_W P3_6
#define E P3_7
uchar page,column;                    //define page and column;
bit Un_Flag;                         //取反标志;
code uchar mo[]=   {0x10,0xD0,0xFF,0x50,0x90,0x04,0xF4,0x54,0x5F,0x54,0x54,0x5F,0xF4,0x04,0x00,0x00,
                   0x03,0x00,0xFF,0x00,0x00,0x84,0x85,0x45,0x35,0x0F,0x15,0x25,0x65,0xC4,0x44,0x00};
code uchar jiao[]= {0x00,0x40,0x20,0xF0,0x98,0x97,0x92,0x92,0xF2,0x92,0x9A,0x96,0x92,0xF0,0x00,0x00,
                   0x00,0x80,0x60,0x1F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x44,0x84,0x7F,0x00,0x00};
code uchar dao[]=  {0x00,0x00,0x00,0x3E,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0xCA,0x4E,0x40,0x70,0x00,0x00,
                   0x02,0x02,0x02,0x02,0x06,0x3A,0x12,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x00};
code uchar na[]=   {0x20,0x30,0x2C,0xA3,0x60,0x18,0xF8,0x08,0x08,0x88,0x7F,0x88,0x08,0x08,0xF8,0x00,
                   0x10,0x32,0x13,0x12,0x0A,0x0A,0xFF,0x04,0x02,0x01,0x00,0x00,0x47,0x82,0x7F,0x00};
code uchar point[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};
code uchar mao[]=  {0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};
code uchar num[10][16]=
{
 {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",0*/
 {0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",1*/
 {0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",2*/
 {0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},/*"3",3*/
 {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},/*"4",4*/
 {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},/*"5",5*/
 {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"6",6*/
 {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},/*"7",7*/
 {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",8*/
 {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}};/*"9",9*/
void delay(uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
    _nop_();
}
}
void F_Wate_E1()                  //读E1状态
{
 E1=1;E2=0;
 P2=0xff;
 R_W=1;                    
 RS=0;                    
 E=1;
 while(P2&0x80);
 E=0;
}
void F_Wate_E2()                  //读E1状态
{
 E1=0;E2=1;
 P2=0xff;
 R_W=1;                  
 RS=0;                     
 E=1;
 while(P2&0x80);
 E=0;
}
void F_Wtcode_E1(uchar cod)        //向E1写指令
{
 F_Wate_E1();             
 P2=cod;                  
 R_W=0;                   
 RS=0;                  
 E1=1;E2=0;
 E=1;                       
 E=0;
}
void F_Wtcode_E2(uchar cod)         //向E2写指令
{
 F_Wate_E2();             
 P2=cod;                    
 R_W=0;                     
 RS=0;                      
 E1=0;E2=1;
 E=1;                       
 E=0;
}
void F_Wtdata_E1(uchar dat)        //向E1写数据 
{
 F_Wate_E1();
 if(!Un_Flag)P2=dat;
 else P2=~dat;
 R_W=0;
 RS=1;                       
 E1=1;E2=0;
 E=1;
 E=0;                         
}
void F_Wtdata_E2(uchar dat)        //向E2写数据 
{
 F_Wate_E2();
 if(!Un_Flag)P2=dat;
 else P2=~dat;
 R_W=0;
 RS=1;                         
 E1=0;E2=1;
 E=1;
 E=0;                          
}
void F_Clear_LCD()			      //清屏子程序。
{
 uchar page,count;
 for(page=0xb8;page<0xc0;page++)   
  {
   F_Wtcode_E1(page);      //设置页地址
   F_Wtcode_E2(page);
   F_Wtcode_E1(0x40);      //设置列地址
   F_Wtcode_E2(0x40);            
   for(count=0;count<64;count++)    
   {
    F_Wtdata_E1(0x00);       
    F_Wtdata_E2(0x00);
   }
  }
}
void F_Init_LCD()          //初始化
{
 F_Wtcode_E1(0x3f);
 F_Wtcode_E2(0x3f);
 F_Wtcode_E1(0x60);
 F_Wtcode_E2(0x60);
 F_Wtcode_E1(0xc0);
 F_Wtcode_E2(0xc0);
 F_Clear_LCD();
}
void F_Write_Char(uchar *Charptr)  //写一汉字子程序
{
 uchar i,column0;
 F_Wtcode_E1(page|0xb8);
 F_Wtcode_E2(page|0xb8);          //设置页地址
 column0=column;
 if(column0<64)
 {
   F_Wtcode_E1(column0|0x40);     //设置列地址
   for(i=0;i<16;i++)
   {
    if(column0<64){F_Wtdata_E1(Charptr[i]);column0+=1;}
    else break;
   }
   if(column0>=64)
   {
    F_Wtcode_E2((column0-64)|0x40);
    for(;i<16;i++){F_Wtdata_E2(Charptr[i]);column0+=1;}
   }
 }
 else if(column0<128)
  {  
     F_Wtcode_E2((column0-64)|0x40);
     for(i=0;i<16;i++)
     {
      F_Wtdata_E2(Charptr[i]);
      column0+=1;
      if(column0==128)break;
     } 
   } 
 
 F_Wtcode_E1(page+1|0xb8);
 F_Wtcode_E2(page+1|0xb8); 
  if(column<64)
 {
   F_Wtcode_E1(column|0x40);//设置列地址
   for(i=16;i<32;i++)
   {
    if(column<64){F_Wtdata_E1(Charptr[i]);column+=1;}
    else break;
   }
   if(column>=64)
   {
    F_Wtcode_E2((column-64)|0x40);
    for(;i<32;i++){F_Wtdata_E2(Charptr[i]);column+=1;}
   }
 }
 else if(column<128)
  {
     F_Wtcode_E2((column-64)|0x40);
     for(i=16;i<32;i++)
     {
      F_Wtdata_E2(Charptr[i]);
      column+=1;
      if(column==128)break;
     } 
   } 
 }
 void F_Write_CharW(uchar *Charptr)//写一字符子程序
{
 uchar i,column0;
 F_Wtcode_E1(page|0xb8);
 F_Wtcode_E2(page|0xb8);          //设置页地址
 if(column<64)
   F_Wtcode_E1(column|0x40);      //设置列地址
 else 
   F_Wtcode_E2((column-64)|0x40);
 column0=column;
 for(i=0;i<8;i++)
 {
  if(column0<64)
      F_Wtdata_E1(Charptr[i]);
  else 
      if(column0<128) 
	      F_Wtdata_E2(Charptr[i]); 
  column0+=1;
  }
 F_Wtcode_E1(page+1|0xb8);
 F_Wtcode_E2(page+1|0xb8); 
 if(column<64)F_Wtcode_E1(column|0x40);
 else F_Wtcode_E2((column-64)|0x40); 
 for(i=8;i<16;i++)
 {
  if(column<64)F_Wtdata_E1(Charptr[i]);
  else if(column<128)F_Wtdata_E2(Charptr[i]);
  column+=1;
 }
}
/***************************************************菜单显示程序**********************************************************/

/**********************************驱动程序结束,主程序开始**********************************************/

/********************************************************************************************************8/


/**************************************
   功能:TLC2543驱动模块
   输入参数:port通道号
   输出参数:ad转换值
*************************************/
uint read2543(uchar port)
{
uint ad=0,i;
CLOCK=0;
_CS=0;
port<<=4;
for(i=0;i<12;i++)
{
   if(D_OUT) ad|=0x01;
   D_IN=(bit)(port&0x80);
   CLOCK=1;
   delay(3);
   CLOCK=0;
   delay(3);
   port<<=1;
   ad<<=1;
}
_CS=1;
ad>>=1;
return(ad);
}
/**************************************/
void deal_addata(uint ad)
{
   b1=ad%10;
   b2=ad/10;
   b2=b2%10;
   b3=ad/100;
   b3=b3%10;
   b4=ad/1000;
}
void Page1(void)
{
 column=0;page=0;
 F_Write_Char(mo);F_Write_CharW(mao);
 F_Write_CharW(num[b4]);
 F_Write_CharW(num[b3]);
 F_Write_CharW(num[b2]);F_Write_CharW(num[b1]);
}
void Page2(void)
{
 column=0;page=2;
 F_Write_Char(dao);F_Write_Char(na);F_Write_CharW(mao);
 F_Write_CharW(num[0]);F_Write_CharW(point);
 F_Write_CharW(num[0]);
 column=64;page=2;
 F_Write_CharW(num[0]);
}
void Page3(void)
{
 column=0;page=0;
 F_Write_Char(mo);
 F_Write_Char(dao); F_Write_Char(na);
}

/**************************************
   名称:main
*************************************/
void main()
{
 uint ad;
 uchar i,j;
F_Init_LCD();
Page3();
delay(100);
delay(100);
delay(100);
delay(100);

 for(i=0;i<10;i++)
     {ad=read2543(0); 

	 deal_addata(ad);
	 F_Init_LCD();
     Page1();
	 for(j=0;j<100;j++)
         delay(300);
     Page2();
 	 for(j=0;j<240;j++)
         delay(500);
}} 

⌨️ 快捷键说明

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