📄 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 + -