附件為:LCD12864顯示漢字和數(shù)字的程序與電路
/*
自定義延時(shí)子函數(shù)
*/
void delayms(uchar z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*
判斷LCD忙信號(hào)狀態(tài)
*/
void buys()
{
int dat;
RW=1;
RS=0;
do
{
P0=0x00;
E=1;
dat=P0;
E=0;
dat=0x80 & dat;
} while(!(dat==0x00));
}
/*
LCD寫(xiě)指令函數(shù)
*/
void w_com(uchar com)
{
//buys();
RW=0;
RS=0;
E=1;
P0=com;
E=0;
}
/*
LCD寫(xiě)數(shù)據(jù)函數(shù)
*/
void w_date(uchar date)
{
//buys();
RW=0;
RS=1;
E=1;
P0=date;
E=0;
}
/*
LCD選屏函數(shù)
*/
void select_screen(uchar screen)
{
switch(screen)
{
case 0: //選擇全屏
CS1=0;
CS2=0;
break;
case 1: //選擇左屏
CS1=0;
CS2=1;
break;
case 2: //選擇右屏
CS1=1;
CS2=0;
break;
/* case 3: //選擇右屏
CS1=1;
CS2=1;
break;
*/
}
}
/*
LCDx向上滾屏顯示
*/
void lcd_rol()
{
int x;
for(x=0;x<64;x++)
{
select_screen(0);
w_com(0xc0+x);
delayms(500);
}
}
/*
LCD清屏函數(shù):清屏從第一頁(yè)的第一列開(kāi)始,總共8頁(yè),64列
*/
void clear_screen(screen)
{
int x,y;
select_screen(screen); //screen:0-選擇全屏,1-選擇左半屏,2-選擇右半屏
for(x=0xb8;x<0xc0;x++) //從0xb8-0xbf,共8頁(yè)
{
w_com(x);
w_com(0x40); //列的初始地址是0x40
for(y=0;y<64;y++)
{
w_date(0x00);
}
}
}
/*
LCD顯示漢字字庫(kù)函數(shù)
*/
void lcd_display_hanzi(uchar screen,uchar page,uchar col,uint mun)
{ //screen:選擇屏幕參數(shù),page:選擇頁(yè)參數(shù)0-3,col:選擇列參數(shù)0-3,mun:顯示第幾個(gè)漢字的參數(shù)
int a;
mun=mun*32;
select_screen(screen);
w_com(0xb8+(page*2));
w_com(0x40+(col*16));
for ( a=0;a<16;a++)
{
w_date(hanzi[mun++]);
}
w_com(0xb8+(page*2)+1);
w_com(0x40+(col*16));
for ( a=0;a<16;a++)
{
w_date(hanzi[mun++]);
}
}
/*
LCD顯示字符字庫(kù)函數(shù)
*/
void lcd_display_zifuk(uchar screen,uchar page,uchar col,uchar mun)
{ //screen:選擇屏幕參數(shù),page:選擇頁(yè)參數(shù)0-3,col:選擇列參數(shù)0-7,mun:顯示第幾個(gè)漢字的參數(shù)
int a;
mun=mun*16;
select_screen(screen);
w_com(0xb8+(page*2));
w_com(0x40+(col*8));
for ( a=0;a<8;a++)
{
w_date(zifu[mun++]);
}
w_com(0xb8+(page*2)+1);
w_com(0x40+(col*8));
for ( a=0;a<8;a++)
{
w_date(zifu[mun++]);
}
}
/*
LCD顯示數(shù)字字庫(kù)函數(shù)
*/
void lcd_display_shuzi(uchar screen,uchar page,uchar col,uchar mun)
{ //screen:選擇屏幕參數(shù),page:選擇頁(yè)參數(shù)0-3,col:選擇列參數(shù)0-7,mun:顯示第幾個(gè)漢字的參數(shù)
int a;
mun=mun*16;
select_screen(screen);
w_com(0xb8+(page*2));
w_com(0x40+(col*8));
for ( a=0;a<8;a++)
{
w_date(shuzi[mun++]);
}
w_com(0xb8+(page*2)+1);
w_com(0x40+(col*8));
for ( a=0;a<8;a++)
{
w_date(shuzi[mun++]);
}
}
/*
LCD初始化函數(shù)
*/
void lcd_init()
{
w_com(0x3f); //LCD開(kāi)顯示
w_com(0xc0); //LCD行初始地址,共64行
w_com(0xb8); //LCD頁(yè)初始地址,共8頁(yè)
w_com(0x40); //LCD列初始地址,共64列
}
/*
LCD顯示主函數(shù)
*/
void main()
{
//第一行
int x;
lcd_init(); //LCD初始化
clear_screen(0); //LCD清屏幕
lcd_display_shuzi(1,0,4,5); //LCD顯示數(shù)字
lcd_display_shuzi(1,0,5,1); //LCD顯示數(shù)字
lcd_display_hanzi(1,0,3,0); //LCD顯示漢字
lcd_display_hanzi(2,0,0,1); //LCD顯示漢字 //LCD字符漢字
lcd_display_hanzi(2,0,1,2); //LCD顯示漢字
//第二行
lcd_display_zifuk(1,1,2,0); //LCD顯示字符
lcd_display_zifuk(1,1,3,0); //LCD顯示字符
lcd_display_zifuk(1,1,4,0); //LCD顯示字符
lcd_display_zifuk(1,1,5,4); //LCD顯示字符
lcd_display_shuzi(1,1,6,8); //LCD顯示字符
lcd_display_shuzi(1,1,7,9); //LCD顯示字符
lcd_display_shuzi(2,1,0,5); //LCD顯示字符
lcd_display_shuzi(2,1,1,1); //LCD顯示字符
lcd_display_zifuk(2,1,2,4);
lcd_display_zifuk(2,1,3,1);
lcd_display_zifuk(2,1,4,2);
lcd_display_zifuk(2,1,5,3);
//第三行
for(x=0;x<4;x++)
{
lcd_display_hanzi(1,2,x,3+x); //LCD顯示漢字
}
for(x=0;x<4;x++)
{
lcd_display_hanzi(2,2,x,7+x); //LCD顯示漢字
}
//第四行
for(x=0;x<4;x++)
{
lcd_display_zifuk(1,3,x,5+x); //LCD顯示漢字
}
lcd_display_shuzi(1,3,4,7);
lcd_display_shuzi(1,3,5,5);
lcd_display_shuzi(1,3,6,5);
lcd_display_zifuk(1,3,7,9);
lcd_display_shuzi(2,3,0,8);
lcd_display_shuzi(2,3,1,9);
lcd_display_shuzi(2,3,2,9);
lcd_display_shuzi(2,3,3,5);
lcd_display_shuzi(2,3,4,6);
lcd_display_shuzi(2,3,5,8);
lcd_display_shuzi(2,3,6,9);
lcd_display_shuzi(2,3,7,2);
while(1);
/* while(1)
{ // LCD向上滾屏顯示
lcd_rol();
}
*/
}
標(biāo)簽:
12864
LCD
漢字
數(shù)字
上傳時(shí)間:
2013-11-08
上傳用戶(hù):aeiouetla
TLC2543是TI公司的12位串行模數(shù)轉(zhuǎn)換器,使用開(kāi)關(guān)電容逐次逼近技術(shù)完成A/D轉(zhuǎn)換過(guò)程。由于是串行輸入結(jié)構(gòu),能夠節(jié)省51系列單片機(jī)I/O資源;且價(jià)格適中,分辨率較高,因此在儀器儀表中有較為廣泛的應(yīng)用。
TLC2543的特點(diǎn)
(1)12位分辯率A/D轉(zhuǎn)換器;
(2)在工作溫度范圍內(nèi)10μs轉(zhuǎn)換時(shí)間;
(3)11個(gè)模擬輸入通道;
(4)3路內(nèi)置自測(cè)試方式;
(5)采樣率為66kbps;
(6)線性誤差±1LSBmax;
(7)有轉(zhuǎn)換結(jié)束輸出EOC;
(8)具有單、雙極性輸出;
(9)可編程的MSB或LSB前導(dǎo);
(10)可編程輸出數(shù)據(jù)長(zhǎng)度。
TLC2543的引腳排列及說(shuō)明
TLC2543有兩種封裝形式:DB、DW或N封裝以及FN封裝,這兩種封裝的引腳排列如圖1,引腳說(shuō)明見(jiàn)表1
TLC2543電路圖和程序欣賞
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit clock=P1^0; sbit d_in=P1^1;
sbit d_out=P1^2;
sbit _cs=P1^3;
uchar a1,b1,c1,d1;
float sum,sum1;
double sum_final1;
double sum_final;
uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar wei[]={0xf7,0xfb,0xfd,0xfe};
void delay(unsigned char b) //50us
{
unsigned char a;
for(;b>0;b--)
for(a=22;a>0;a--);
}
void display(uchar a,uchar b,uchar c,uchar d)
{
P0=duan[a]|0x80;
P2=wei[0];
delay(5);
P2=0xff;
P0=duan[b];
P2=wei[1];
delay(5);
P2=0xff;
P0=duan[c];
P2=wei[2];
delay(5);
P2=0xff;
P0=duan[d];
P2=wei[3];
delay(5);
P2=0xff;
}
uint read(uchar port)
{
uchar i,al=0,ah=0;
unsigned long ad;
clock=0;
_cs=0;
port<<=4;
for(i=0;i<4;i++)
{
d_in=port&0x80;
clock=1;
clock=0;
port<<=1;
}
d_in=0;
for(i=0;i<8;i++)
{
clock=1;
clock=0;
}
_cs=1;
delay(5);
_cs=0;
for(i=0;i<4;i++)
{
clock=1;
ah<<=1;
if(d_out)ah|=0x01;
clock=0;
}
for(i=0;i<8;i++)
{
clock=1;
al<<=1;
if(d_out) al|=0x01;
clock=0;
}
_cs=1;
ad=(uint)ah;
ad<<=8;
ad|=al;
return(ad);
}
void main()
{
uchar j;
sum=0;sum1=0;
sum_final=0;
sum_final1=0;
while(1)
{
for(j=0;j<128;j++)
{
sum1+=read(1);
display(a1,b1,c1,d1);
}
sum=sum1/128;
sum1=0;
sum_final1=(sum/4095)*5;
sum_final=sum_final1*1000;
a1=(int)sum_final/1000;
b1=(int)sum_final%1000/100;
c1=(int)sum_final%1000%100/10;
d1=(int)sum_final%10;
display(a1,b1,c1,d1);
}
}
標(biāo)簽:
2543
TLC
上傳時(shí)間:
2013-11-19
上傳用戶(hù):shen1230