?? st7920drive.c
字號:
/******************************************************************************
模塊名稱:st7920 并行方式驅(qū)動12864液晶驅(qū)動
功能概要:st7920顯示驅(qū)動
液晶型號: 生產(chǎn)廠家: 驅(qū)動芯片:st7920
******************************************************************************/
#include <reg52.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1
#define ADC 0x7FFF
unsigned char bdata flag;
sbit chang_over=flag^2;
static unsigned char data a[8];
sbit RS = P3^1; //H=data; L="command";
sbit RW = P3^4; //H=read; L="write";
sbit E = P3^5; //input enable;
sbit PSB= P1^3; //H=并口; L="串口";
sbit RST= P3^0; //Reset Signal 低電平有效
sbit busy=P2^7; //lcd busy bit
void wr_lcd (uchar dat_comm,uchar content);
void chk_busy (void);
void delay (uint us);
uchar code tab1[]=
{
" 北京理工大學(xué) " //0x80
" 學(xué)生畢業(yè)設(shè)計(jì) " //0x90
" 應(yīng)用物理系 " //0x88
" 測試程序 " //0x98
};
uchar code tab2[]=
{
" 交流電橋平衡 " //0x80
" " //0x90
" 指示儀的設(shè)計(jì) " //0x88
" 二零零八 " //0x98
};
uchar code tab3[]=
{
"頻率 :0.000 kHz" //0x80
"幅值1 : 0.00 V" //0x90
"相位差: 00.00 " //0x88
"幅值2 : 0.00 V" //0x98
};
uchar code pinlv[]= {"頻率 :kHz"};
static unsigned char data p[3];
uchar code xiangwei[]={"相位差:"};
static unsigned char data x[3];
uchar code fudu1[]= {"幅值1 :V"};
static unsigned char data f1[2];
uchar code fudu2[]= {"幅值2 :V"};
static unsigned char data f2[4];
/******************************************************************************************
* 函數(shù)名稱 :ADC轉(zhuǎn)換子程序
* 功能描述 :
* 修改說明 :
*****************************************************************************************/
unsigned char adc_change(void)
{
unsigned char change_over;
XBYTE[ADC]=0;
do flag=P1;
while(change_over==1);
a[1]=XBYTE[ADC];
}
/******************************************************************************************
* 函數(shù)名稱 :脈沖寬度測量
* 功能描述 :
* 修改說明 :
*****************************************************************************************/
/******************************************************************************************
* 函數(shù)名稱 :初始化液晶屏
* 功能描述 :
* 修改說明 :
******************************************************************************************/
void init_lcd (void)
{
RST = 1;
PSB = 1;
wr_lcd(comm,0x30); /*30---基本指令動作*/
wr_lcd(comm,0x01); /*清屏,地址指針指向00H*/
wr_lcd(comm,0x06); /*光標(biāo)的移動方向*/
wr_lcd(comm,0x0c); /*開顯示,關(guān)游標(biāo)*/
}
/******************************************************************************************
* 函數(shù)名稱 :chn_disp
* 功能描述 : 顯示漢字或字符
* 修改說明 :
******************************************************************************************/
void chn_disp(uchar code *chn)
{
uchar i,j;
wr_lcd(comm,0x30);
wr_lcd(comm,0x80);
for(j=0;j<4;j++)
{
for(i=0;i<16;i++)
wr_lcd(dat,chn[j*16+i]);
}
}
/******************************************************************************************
* 函數(shù)名稱 :clrram
* 功能描述 : 清DDRAM
* 修改說明 :
******************************************************************************************/
void clrram(void)
{
wr_lcd(comm,0x30);
wr_lcd(comm,0x01);
}
/******************************************************************************************
* 函數(shù)名稱 :wr_lcd
* 功能描述 :通過dat和comm位判斷寫入指令還是數(shù)據(jù)
* 修改說明 :
******************************************************************************************/
void wr_lcd(uchar dat_comm,uchar content)
{
chk_busy ();
if(dat_comm)
{
RS = 1; //data
RW = 0; //write
}
else
{
RS = 0; //command
RW = 0; //write
}
P2=content; //output data or comm
E = 1;
;
E = 0;
}
/******************************************************************************************
* 函數(shù)名稱 :chk_busy
* 功能描述 :判忙
* 修改說明 :
******************************************************************************************/
void chk_busy(void)
{
P2 = 0xff;
RS = 0;
RW = 1;
E = 1;
while(busy==1);
E = 0;
}
/******************************************************************************************
* 函數(shù)名稱 :
* 功能描述 :
* 修改說明 :
******************************************************************************************/
void delay(uint us) //delay time
{
while(us--);
}
void delay2(unsigned char cnt)
{
unsigned char i;
while(cnt--!=0)
for(i=10;i!=0;i--);
}
/******************************************************************************************
* 函數(shù)名稱 :
* 功能描述 :
* 修改說明 :
******************************************************************************************/
void delay1(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);
}
/******************************************************************************************
* 函數(shù)名稱 :
* 功能描述 :
* 修改說明 :
******************************************************************************************/
void main()
{
SP=0x5f;
init_lcd();
chn_disp(tab1);
delay1(5000);
clrram();
chn_disp(tab2);
delay1(2000);
clrram();
chn_disp(tab3);
delay1(2000);
clrram();
wr_lcd(comm,0x34);
delay(2);
wr_lcd(comm,0x02);
delay(2);
wr_lcd(comm,0x30);
wr_lcd(comm,0x01);
p[0]=0x31;
p[1]=0x32;
p[2]=0x33;
p[3]=0x34;
x[0]=0x31;
x[1]=0x32;
x[2]=0x33;
x[3]=0x34;
f1[0]=0x31;
f1[1]=0x32;
f1[2]=0x33;
f2[0]=0x31;
f2[1]=0x32;
f2[2]=0x33;
for(;;)
{int i;
wr_lcd(comm,0x80);//第一行顯示頻率
for(i=0;i<7;i++)
{
wr_lcd(dat,pinlv[i]);
}
wr_lcd(dat,p[3]);
wr_lcd(dat,0x2E);//小數(shù)點(diǎn)
wr_lcd(dat,p[2]);
wr_lcd(dat,p[1]);
wr_lcd(dat,p[0]);
wr_lcd(dat,0x20);//空白
wr_lcd(dat,pinlv[7]);
wr_lcd(dat,pinlv[8]);
wr_lcd(dat,pinlv[9]);//kHz
wr_lcd(comm,0x90);//第二行顯示相位
for(i=0;i<7;i++)
{
wr_lcd(dat,xiangwei[i]);
}
wr_lcd(dat,0x20);
wr_lcd(dat,x[3]);
wr_lcd(dat,x[2]);
wr_lcd(dat,0x2E);//小數(shù)點(diǎn)
wr_lcd(dat,x[1]);
wr_lcd(dat,x[0]);
wr_lcd(dat,0x20);//空白
wr_lcd(dat,0x20);//空白
wr_lcd(dat,0x20);//空白
wr_lcd(comm,0x88);//第三行顯示幅度
for(i=0;i<7;i++)
{
wr_lcd(dat,fudu1[i]);
}
wr_lcd(dat,0x20);
wr_lcd(dat,0x20);
wr_lcd(dat,f1[2]);
wr_lcd(dat,0x2E);//小數(shù)點(diǎn)
wr_lcd(dat,f1[1]);
wr_lcd(dat,f1[0]);
wr_lcd(dat,0x20);
wr_lcd(dat,0x20);
wr_lcd(dat,fudu1[7]);
wr_lcd(comm,0x98);//同上
for(i=0;i<7;i++)
{
wr_lcd(dat,fudu2[i]);
}
wr_lcd(dat,0x20);
wr_lcd(dat,0x20);
wr_lcd(dat,f2[2]);
wr_lcd(dat,0x2E);//小數(shù)點(diǎn)
wr_lcd(dat,f2[1]);
wr_lcd(dat,f2[0]);
wr_lcd(dat,0x20);
wr_lcd(dat,0x20);
wr_lcd(dat,fudu2[7]);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -