?? tddrv.c
字號:
/**
* tddrv.c - Tie dian memory's driver
*/
#include "tddrv.h"
#include "status.h"
#include "presel.h"
#define LCD_CONTROL 0x4200000
#define LCD_RAM 0x4200001
#define REG_WLCR 0
#define REG_MISC 1
extern __packed struct device_context *G_Device_Context; //現(xiàn)場參數(shù)(關(guān)鍵)
extern __packed struct channel_para channel;
extern __packed struct lockout_freq lockoutfreq;
extern const U16 IFBW_DATA[22];
extern struct LockOutInfo *pLockInfo;
extern unsigned char presel[1000];
extern U16 PS[100][2];
extern U8 dBTable[50][2];
int write_TD(U32 offset, U8 *pdat, U32 size)
{
U32 i;
U8 *pdst;
pdst = (U8 *)(offset);
for (i = 0; i < size; i++)
{
*pdst++ = *pdat++;
}
return TRUE;
}
int read_TD(U32 offset, U8 *pbuf, U32 size)
{
U32 i;
U8 *psrc;
psrc = (U8 *)(offset);
for (i = 0; i < size; i++)
{
*pbuf++ = *psrc++;
}
return TRUE;
}
void __irq LCD_ISR(void)
{
rI_ISPC=BIT_EINT0;
}
int check_lcdbusy()
{
int a;
a = rPDATD&1;
return a;
}
void lcd_writeram(U8 addr,U8 dat)
{
// while(check_lcdbusy());
// *(U8 *)LCD_RAM = addr;
*(U8 *)LCD_RAM = dat;
delay(10);
}
U8 lcd_readram(U8 addr)
{
U8 a;
// while(check_lcdbusy());
// *(U8 *)LCD_RAM = addr;
a = *(U8 *)LCD_RAM;
delay(10);
return a;
}
void lcd_writereg(U8 addr,U8 dat)
{
*(U8 *)LCD_CONTROL = addr;
*(U8 *)LCD_CONTROL = dat;
delay(10);
}
U8 lcd_readreg(U8 addr)
{
U8 a;
*(U8 *)LCD_CONTROL = addr;
delay(10);
a = *(U8 *)LCD_CONTROL;
return a;
}
void gotoxy(U8 x,U8 y)
{
lcd_writereg(0x60,x);
lcd_writereg(0x70,y);
}
void lcdclear()
{
lcd_writereg(0xe0,0);
lcd_writereg(0xf0,0xa8);
lcd_writereg(0xf0,0xa0);
}
void test()
{
U8 a,i;
a= 0;
for (i=0;i<50;i++)
{
*(U8 *)LCD_CONTROL = i;
a = *(U8 *)LCD_CONTROL;
delay(1);
}
}
void lcd_init()
{
lcd_writereg(0x00,0xcc); // lcd控制寄存器: 正常文字模式
lcd_writereg(0x01,0xf2); // 中斷與忙碌寄存器: 8M的晶振高電平觸發(fā)
lcd_writereg(0x02,0x10); // ORM、RAM寄存器: 字體大小,水平一倍,垂直2倍
lcd_writereg(0x03,0x80); // 光標(biāo)顯示寄存器: 光標(biāo)平移動(dòng)、不自動(dòng)
lcd_writereg(0x10,0x7f); // 光標(biāo)指針寄存器: 自動(dòng)移位。正常字體顯示
lcd_writereg(0x11,0x00); // 光標(biāo)高度與寬度: 默認(rèn)
lcd_writereg(0x12,0x11); // 圖形顯示寄存器: 先水平后垂直
//窗口大小改動(dòng)
lcd_writereg(0x21,0x13); // 窗口顯示寄存器: 右邊位置(320*240)=(320/8)-1=39=27H
lcd_writereg(0x31,0xef); // 窗口顯示寄存器: 底邊位置(320*240)=240-1=239=EFH
lcd_writereg(0x41,0x00); // 窗口顯示寄存器: 左邊位置
lcd_writereg(0x51,0x00); // 窗口顯示寄存器: 頂邊位置
lcd_writereg(0x20,0x13); // 工作窗口顯示寄存器: 右邊 (320*240)=(320/8)-1=39=27H
lcd_writereg(0x30,0xef); // 工作窗口顯示寄存器: 底邊(320*240)=240-1=239=EFH
lcd_writereg(0x40,0x00); // 工作窗口顯示寄存器: 左邊
lcd_writereg(0x50,0x00); // 工作窗口顯示寄存器: 頂邊
lcd_writereg(0x60,0x00); // 光標(biāo)地址移位寄存器: CPXR=00H
lcd_writereg(0x61,0x00); // begin segment position register(bgsg)
lcd_writereg(0x70,0x00); // 光標(biāo)地址移位寄存器: CPYR=00H
lcd_writereg(0x71,0x00); // 光標(biāo)滾動(dòng)其始地址: 00H
lcd_writereg(0x72,0xef); // 光標(biāo)滾動(dòng)結(jié)束地址: EFH
lcd_writereg(0xf1,0x0f);
/*
lcd_writereg(0x80,0xaa); // 光標(biāo)閃爍時(shí)間設(shè)定:=Bit[7....0]*1/Frame_Rate
lcd_writereg(0x81,0x00); // 保留:設(shè)定00H
//lcd_writereg(0x81,0x0c); // 保留:設(shè)定00H
lcd_writereg(0x91,0x00); // 保留:設(shè)定00H
lcd_writereg(0x90,0x06); // 屏幕周期更新設(shè)定:SCCR=(SCLK*DBW)/(Column*ROW*FRS)
// =(8MHz*4)/(320*240*70)
lcd_writereg(0xa0,0x0); // 中斷寄存器:
lcd_writereg(0xa1,0x00); // key scan control register(kscr)
lcd_writereg(0xa2,0x00); // key scan data register(ksdr)
lcd_writereg(0xa3,0x00); // key scan data expand register(kser)
lcd_writereg(0xb0,0x27); // 中斷緩存器(intx)與CPXR相同發(fā)生中斷
lcd_writereg(0xb1,0xef); // 中斷緩存器(inty)與CPYR相同發(fā)生中斷
lcd_writereg(0xc0,0x00); // 觸摸功能寄存器(C0):
lcd_writereg(0xc1,0x0a);
lcd_writereg(0xc8,0x80);
lcd_writereg(0xc9,0x80);
lcd_writereg(0xca,0x00);
lcd_writereg(0xd0,0x80);
lcd_writereg(0xe0,0x0);
lcd_writereg(0xf0,0xa8);
lcd_writereg(0xf1,0x0f);
*/
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -