📄 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; //现场参数(关键)
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的晶振高电平触发
lcd_writereg(0x02,0x10); // ORM、RAM寄存器: 字体大小,水平一倍,垂直2倍
lcd_writereg(0x03,0x80); // 光标显示寄存器: 光标平移动、不自动
lcd_writereg(0x10,0x7f); // 光标指针寄存器: 自动移位。正常字体显示
lcd_writereg(0x11,0x00); // 光标高度与宽度: 默认
lcd_writereg(0x12,0x11); // 图形显示寄存器: 先水平后垂直
//窗口大小改动
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); // 光标地址移位寄存器: CPXR=00H
lcd_writereg(0x61,0x00); // begin segment position register(bgsg)
lcd_writereg(0x70,0x00); // 光标地址移位寄存器: CPYR=00H
lcd_writereg(0x71,0x00); // 光标滚动其始地址: 00H
lcd_writereg(0x72,0xef); // 光标滚动结束地址: EFH
lcd_writereg(0xf1,0x0f);
/*
lcd_writereg(0x80,0xaa); // 光标闪烁时间设定:=Bit[7....0]*1/Frame_Rate
lcd_writereg(0x81,0x00); // 保留:设定00H
//lcd_writereg(0x81,0x0c); // 保留:设定00H
lcd_writereg(0x91,0x00); // 保留:设定00H
lcd_writereg(0x90,0x06); // 屏幕周期更新设定: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相同发生中断
lcd_writereg(0xb1,0xef); // 中断缓存器(inty)与CPYR相同发生中断
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);
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -