📄 hx8310tft.c
字号:
//------------------------------------------------------------------
//向LCM写入一字数据程序
//对于16位设置数据,中间位和最低位不用, 对于18位图像数据,则18位全用,
// 调用本函数的程序在向RGB_OUTU写入设置数据时,要向ins_16b_h ins_16b_l 写入数据
// 向RGB_OUTU写入图像数据时, 要向red_data_buf gre_data_buf blu_data_buf写入数据
//输入: 存放在RGB_OUTU 中的数据,
//输出:无
//注:写入的是当前单元的内容, 写入地址的设置需要单独进行,然后调用本函数写入数据
//------------------------------------------------------------------
void wr_1word_reg_data(void)
{
lcm_CD=1; //写数据
// set_lcd_cd(); //写数据
dataiol=ins_16b_l<<1; //使数据在D17~D10 D8~D1上
dataiom=ins_16b_l>>7;
dataiom=dataiom|(ins_16b_h<<2);
dataioh=ins_16b_h>>6;
lcm_IOH=dataioh;
lcm_IOM=dataiom;
lcm_IOL=dataiol;
lcm_CE=0;
nop();
lcm_WR=0;
nop();
lcm_WR=1;
nop();
// lcm_CE=1;
}
//------------------------------------------------------------------
//------------------------------------------------------------------
void rd_1word_reg_data(void)
{
lcm_CD=1; //
// set_lcd_cd(); //数据
lcm_CE=0;
lcm_RD=0;
lcm_datah_dir=DEFA_PCR&0xfc; //高2位用的口方向寄存器需要考虑其余6位情况
lcm_datam_dir=0x00; //置为输入
lcm_datal_dir=0x00;
dataioh=lcm_IOH;
dataiom=lcm_IOM;
dataiol=lcm_IOL;
lcm_datah_dir=DEFA_PCR; //高2位用的口方向寄存器需要考虑其余6位情况
lcm_datam_dir=0xff; //置为输出
lcm_datal_dir=0xff;
lcm_RD=1;
// lcm_CE=1;
}
//------------------------------------------------------------------
//向LCM Index寄存器写入一字程序
//输入: 存放在RGB_OUTU 中的数据,
//输出:无
//------------------------------------------------------------------
void wr_1word_index(void)
{
lcm_CD=0; //写Index
// clr_lcd_cd(); //写
// dataiol=ins_16b_l<<1; //使数据在D17~D10 D8~D1上
// dataiom=ins_16b_l>>7;
// dataiom=dataiom|(ins_16b_h<<2);
// dataioh=ins_16b_h>>6;
// lcm_IOH=dataioh;
// lcm_IOM=dataiom;
// lcm_IOL=dataiol;
lcm_IOH=0;
lcm_IOM=0;
lcm_IOL=ins_16b_l<<1;
lcm_CE=0;
nop();
lcm_WR=0;
nop();
lcm_WR=1;
nop();
// lcm_CE=1;
}
//------------------------------------------------------------------
//从LCM读出一字数据程序
//输入:无
//输出:存放在RGB_OUTU 中的数据
//注:读取的是当前单元的内容, 读取地址的设置需要单独进行,然后调用本函数读取数据
//------------------------------------------------------------------
void rd_1word_data(void)
{
lcm_CD=1; //读数据
// set_lcd_cd(); //
lcm_CE=0;
lcm_RD=0;
lcm_datah_dir=DEFA_PCR&0xfc; //高2位用的口方向寄存器需要考虑其余6位情况
lcm_datam_dir=0x00; //置为输入
lcm_datal_dir=0x00;
nop();
dataioh=lcm_IOH;
dataiom=lcm_IOM;
dataiol=lcm_IOL;
lcm_datah_dir=DEFA_PCR; //高2位用的口方向寄存器需要考虑其余6位情况
lcm_datam_dir=0xff; //置为输出
lcm_datal_dir=0xff;
lcm_RD=1;
// lcm_CE=1;
}
//------------------------------------------------------------------
//从LCM读出状态寄存器程序
//输入:无
//输出:存放在RGB_OUTU中的数据
//------------------------------------------------------------------
void rd_1word_status(void)
{
lcm_CD=1; //读Status
// set_lcd_cd(); //写数据
lcm_CE=0;
lcm_RD=0;
lcm_datah_dir=DEFA_PCR&0xfc; //高2位用的口方向寄存器需要考虑其余6位情况
lcm_datam_dir=0x00; //置为输入
lcm_datal_dir=0x00;
dataioh=lcm_IOH;
dataiom=lcm_IOM;
dataiol=lcm_IOL;
lcm_datah_dir=DEFA_PCR|0x03; //高2位用的口方向寄存器需要考虑其余6位情况
lcm_datam_dir=0xff; //置为输出
lcm_datal_dir=0xff;
lcm_RD=1;
// lcm_CE=1;
}
//------------------------------------------------------------------
//------------------------------------------------------------------
void ini_lcm(void)
{
lcm_RST=0;
delayms(60);
lcm_RST=1;
delayms(10);
lcm_CE=0; //???????先一直选通HX8310
ins_16b_h=0;
ins_16b_l=0;
wr_1word_index(); //对寄存器R00操作
rd_1word_reg_data();
ins_16b_h=0x00;
ins_16b_l=0x01; //Oscillation Start
wr_1word_reg_data();
delayms(40);
ins_16b_h=0;
ins_16b_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x04; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x0d;
wr_1word_index(); //对寄存器R0D操作
ins_16b_h=0x03;
ins_16b_l=0x04; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x0e;
wr_1word_index(); //对寄存器R0E操作
ins_16b_h=0x16;
ins_16b_l=0x1a; //
wr_1word_reg_data();
delayms(60);
ins_16b_h=0;
ins_16b_l=0x01;
wr_1word_index(); //对寄存器R01操作
ins_16b_h=0x01;
ins_16b_l=0x13; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x02;
wr_1word_index(); //对寄存器R02操作
ins_16b_h=0x07;
ins_16b_l=0x00; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x05;
wr_1word_index(); //对寄存器R05操作
ins_16b_h=0x10;
ins_16b_l=0x30; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x06;
wr_1word_index(); //对寄存器R06操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x0b;
wr_1word_index(); //对寄存器R0B操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x0c;
wr_1word_index(); //对寄存器R0C操作
ins_16b_h=0x00;
ins_16b_l=0x0d; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x03;
wr_1word_index(); //对寄存器R03操作
ins_16b_h=0x04;
ins_16b_l=0x10; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x04;
wr_1word_index(); //对寄存器R04操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x0e;
wr_1word_index(); //对寄存器R0E操作
ins_16b_h=0x12;
ins_16b_l=0x1a; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x0d;
wr_1word_index(); //对寄存器R0D操作
ins_16b_h=0x01;
ins_16b_l=0x19; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x0f;
wr_1word_index(); //对寄存器R0F操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x11;
wr_1word_index(); //对寄存器R11操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x14;
wr_1word_index(); //对寄存器R14操作
ins_16b_h=0x9f;
ins_16b_l=0x00; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x15;
wr_1word_index(); //对寄存器R15操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x16;
wr_1word_index(); //对寄存器R16操作
ins_16b_h=0x7f;
ins_16b_l=0x00; //水位RAM位置,128列
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x17;
wr_1word_index(); //对寄存器R17操作
ins_16b_h=0x9f;
ins_16b_l=0x00; //垂直RAM位置, 160行
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x21;
wr_1word_index(); //对寄存器R21操作
ins_16b_h=0x00;
ins_16b_l=0x00; //RAM地址设置
wr_1word_reg_data();
ins_16b_h=0;
ins_16b_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x05; //
wr_1word_reg_data();
delayms(10);
ins_16b_h=0;
ins_16b_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x25; //
wr_1word_reg_data();
delayms(10);
ins_16b_h=0;
ins_16b_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x27; //
wr_1word_reg_data();
delayms(10);
ins_16b_h=0;
ins_16b_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x37; //
wr_1word_reg_data();
delayms(10);
}
/*
void ini_lcm(void)
{
lcm_RST=0;
delayms(50);
delayms(50);
lcm_RST=1;
delayms(50);
lcm_outu_h=0;
lcm_outu_l=0;
wr_1word_index(); //对寄存器R00操作
ins_16b_h=0x00;
ins_16b_l=0x01; //Oscillation Start
wr_1word_data();
delayms(20);
lcm_outu_h=0;
lcm_outu_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x04; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x0d;
wr_1word_index(); //对寄存器R0D操作
ins_16b_h=0x03;
ins_16b_l=0x04; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x0e;
wr_1word_index(); //对寄存器R0E操作
ins_16b_h=0x16;
ins_16b_l=0x1a; //
wr_1word_data();
delayms(20);
lcm_outu_h=0;
lcm_outu_l=0x01;
wr_1word_index(); //对寄存器R01操作
ins_16b_h=0x01;
ins_16b_l=0x13; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x02;
wr_1word_index(); //对寄存器R02操作
ins_16b_h=0x07;
ins_16b_l=0x00; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x05;
wr_1word_index(); //对寄存器R05操作
ins_16b_h=0x10;
ins_16b_l=0x30; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x06;
wr_1word_index(); //对寄存器R06操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x0b;
wr_1word_index(); //对寄存器R0B操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x0c;
wr_1word_index(); //对寄存器R0C操作
ins_16b_h=0x00;
ins_16b_l=0x0d; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x03;
wr_1word_index(); //对寄存器R03操作
ins_16b_h=0x04;
ins_16b_l=0x10; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x04;
wr_1word_index(); //对寄存器R04操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x0e;
wr_1word_index(); //对寄存器R0E操作
ins_16b_h=0x12;
ins_16b_l=0x1a; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x0d;
wr_1word_index(); //对寄存器R0D操作
ins_16b_h=0x01;
ins_16b_l=0x19; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x0f;
wr_1word_index(); //对寄存器R0F操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x11;
wr_1word_index(); //对寄存器R11操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x14;
wr_1word_index(); //对寄存器R14操作
ins_16b_h=0x9f;
ins_16b_l=0x00; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x15;
wr_1word_index(); //对寄存器R15操作
ins_16b_h=0x00;
ins_16b_l=0x00; //
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x16;
wr_1word_index(); //对寄存器R16操作
ins_16b_h=0x7f;
ins_16b_l=0x00; //水位RAM位置,128列
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x17;
wr_1word_index(); //对寄存器R17操作
ins_16b_h=0x9f;
ins_16b_l=0x00; //垂直RAM位置, 160行
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x21;
wr_1word_index(); //对寄存器R21操作
ins_16b_h=0x00;
ins_16b_l=0x00; //RAM地址设置
wr_1word_data();
lcm_outu_h=0;
lcm_outu_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x05; //
wr_1word_data();
delayms(5);
lcm_outu_h=0;
lcm_outu_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x25; //
wr_1word_data();
delayms(5);
lcm_outu_h=0;
lcm_outu_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x27; //
wr_1word_data();
delayms(5);
lcm_outu_h=0;
lcm_outu_l=0x07;
wr_1word_index(); //对寄存器R07操作
ins_16b_h=0x00;
ins_16b_l=0x37; //
wr_1word_data();
delayms(5);
}
*/
//---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---
//--- --- 对 --- R --- A --- M --- 操 --- 作 ---
#define ram_IO IO.PDR5.BYTE //RAM 数据读写口线
#define ram_WR IO.PDR7.BIT.B5 //RAM 写使能口线
#define ram_RD IO.PDR7.BIT.B4 //RAM READ使能口线
#define ram_CE IO.PDR6.BIT.B4 //RAM 片选口线
//---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---
//------------------------------------------------------------------
//送入1字节数据, 地址在其它函数中确定,这里不关心地址
//输入:要送入的数据
//------------------------------------------------------------------
void wr_ram_1byte_data(data)
{
ram_IO=data;
ram_CE=0;
ram_WR=0;
nop();
ram_WR=1;
ram_CE=1;
}
//------------------------------------------------------------------
//读出1字节数据, 地址在其它函数中确定,这里不关心地址
//输出:读出的数据
//------------------------------------------------------------------
uchar rd_ram_1byte_data(void)
{
uchar data;
lcm_datal_dir=0x00;
ram_CE=0;
ram_RD=0;
nop();
data=ram_IO;
lcm_datal_dir=0xff;
ram_RD=1;
ram_CE=1;
return(data);
}
//------------------------------------------------------------------
//送出地址,
//输入:要送出的地址
//------------------------------------------------------------------
void set_ram_add(uint add)
{
add_ALE=1;
ram_IO=(uchar)(add%256);
add_ALE=0;
ram_ADDH=(uchar)(add/256);
}
//------------------------------------------------------------------
//读RAM任意地址数据程序
//------------------------------------------------------------------
uchar rd_ram_rand(uint add)
{
uchar data;
set_ram_add(add);
data=rd_ram_1byte_data();
return (data);
}
//------------------------------------------------------------------
//写RAM任意地址数据程序
//------------------------------------------------------------------
void wr_ram_rand(uchar data,uint add)
{
set_ram_add(add);
wr_ram_1byte_data(data);
}
//---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---
//--- --- 中 --- 断 --- 服 --- 务 --- ---
//---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---
//------------------------------------------------------------------
//TMR W 中断服务程序-----定时20毫秒
//------------------------------------------------------------------
void tmrw_isrp(void)
{
// TW.TSRW.BYTE&=0x7f;
// TW.TCNT=25536;
// if (IRR2.BIT.IRRTB1) IRR2.BIT.IRRTB1=0;
if (TV.TCSRV.BIT.CMFA) TV.TCSRV.BIT.CMFA=0;
TV.TCSRV.BIT.CMFA=0;
TV.TCSRV.BIT.CMFB=0;
TV.TCORA=2500;
TV.TCNTV=0;
clock_20ms_flg=1;
clock_100ms_ct++;
if (clock_100ms_ct>=50)
{
clock_100ms_ct=0;
clock_500ms_flg=1;
}
buzzer_ct++;
// if (buzzer_ct>=200) buzzer=0;
clock_1s_ct++;
if (clock_1s_ct>=50)
{
clock_1s_ct=0;
clock_1s_flg=1;
disp_dlt_ct++;
}
clock_2s_ct++;
if (clock_2s_ct>=100)
{
clock_2s_ct=0;
}
}
//-----------------------------------------------------------------------//
//延时程序;
//-----------------------------------------------------------------------//
void delays(uchar dlt)
{
uchar k;
delayt_1:
if (dlt==0) return;
dlt--;
for (k=0;k<10;k++)
{
delayms(100);
}
goto delayt_1;
}
void delayms(uchar dlt)
{
uchar i;
delayt_1:
if (dlt==0) return;
dlt--;
for (i=0;i<250;i++)
{
nop();
nop();
nop();
nop();
nop();
nop();
}
goto delayt_1;
}
void delayus(uchar dlt)
{
uchar i;
delayt_1:
if (dlt==0) return;
dlt--;
for (i=0;i<8;i++)
{
nop();
}
goto delayt_1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -