📄 c0ad7746459b001d114bb919ad30f862
字号:
#include <io.h>
#include "GUI.h"
#include "system.h"
#include "alt_types.h"
#include <math.h>
#include "stdio.h"
alt_u32 FRAME_BUFFER;
alt_u32 FRAME_LENGTH;
alt_u32 START_REG;
alt_u32 CURRENT_COLOR;
#define CN_CHAR_NUM 23
#define CN_CHAR_WIDTH 14
#define CN_CHAR_HEIGHT 14
#define EN_CHAR_WIDTH 8
#define EN_CHAR_HEIGHT 12
extern int Font14_CN [][14];
extern int Font08AscII[][12];
static alt_u32 base = LCD_INTERFACE_0_BASE;
static alt_u32 SDRAM_FRAMEBUFFER_ADDRESS = (SDRAM_0_BASE + 10000);
//设置颜色
void setColor(alt_u32 colorValue)
{
IOWR_32DIRECT(base,0,colorValue);
CURRENT_COLOR = colorValue;
}
//设置屏幕横宽
void setFrameLength(alt_u32 frameLength)
{
IOWR_32DIRECT(base,4,frameLength);
FRAME_LENGTH = frameLength;
}
//开始传输标志
void setStartReg(alt_u32 startReg)
{
IOWR_32DIRECT(base,8,startReg);
START_REG = startReg;
}
//帧缓存地址
void setFrameBuffer(alt_u32 frameBuffer)
{
IOWR_32DIRECT(base,12,frameBuffer);
FRAME_BUFFER = frameBuffer;
}
//初始化屏幕操作
void init_lcd()
{
int i,j;
int raw_data;
for(i = 0;i < 223938;i++){
IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i,55);
}
for(i = 0;i < 233;i++){
for(j = 0;j < 319;j++){
raw_data = IORD_8DIRECT(CFI_FLASH_0_BASE,i * 957 + j * 3 + 0x1000);
IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i * 957 + j * 3 + 2,raw_data);
raw_data = IORD_8DIRECT(CFI_FLASH_0_BASE,i * 957 + j * 3 + 1 + 0x1000);
IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i * 957 + j * 3 ,raw_data);
raw_data = IORD_8DIRECT(CFI_FLASH_0_BASE,i * 957 + j * 3 + 2 + 0x1000);
IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i * 957 + j * 3 + 1,raw_data);
}
}
setFrameBuffer(SDRAM_FRAMEBUFFER_ADDRESS);
setFrameLength(957);
setStartReg(1);
//setBKColor(GUI_RED);
}
//描点
void drawPixel(alt_u16 x,alt_u16 y)
{
alt_u32 pix_addr = FRAME_BUFFER + (y * FRAME_LENGTH + x*3) + 2;
IOWR_8DIRECT(pix_addr,0,CURRENT_COLOR);
IOWR_8DIRECT(pix_addr,1,CURRENT_COLOR>>8);
IOWR_8DIRECT(pix_addr,2,CURRENT_COLOR>>16);
}
//刷背景屏幕颜色
void setBKColor(alt_u32 bkColor)
{
int temColor;
temColor = CURRENT_COLOR;
setColor(bkColor);
fillRect(0,0,319,232);
setColor(temColor);
}
//画竖线
void drawVLine(alt_u16 x,alt_u16 y1,alt_u16 y2)
{
short int i;
short temp;
//保证y1上侧
if(y1 > y2){
temp = y1;
y1 = y2;
y2 = temp;
}
//画线
for(i = y1;i <= y2;i++){
drawPixel(x,i);
}
}
//填充矩形
void fillRect(alt_u16 x,alt_u16 y,alt_u16 width,alt_u16 height)
{
int i;
for(i = 0;i <= width;i++){
drawVLine(x + i,y,y + height);
}
}
//画字符
void drawChar(alt_u16 x,alt_u16 y,unsigned char asc)
{
int i,j;
unsigned short int Tmp;
int* TmpFontAddr;
unsigned char temp;
TmpFontAddr = Font08AscII[0] + ((EN_CHAR_HEIGHT)*(asc - 32));
for(i = 0;i < EN_CHAR_HEIGHT;i++){
Tmp = x;
temp = 0x01;
for(j = 0;j < EN_CHAR_WIDTH;j++){
if(((*TmpFontAddr) & temp) != 0){
drawPixel(Tmp,y);
}
temp = temp<<1;
Tmp++;
}
(TmpFontAddr)++;
y++;
}
}
//根据汉字机内码返回字模索引
int returnIndex(unsigned char high,unsigned char low)
{
int i;
for(i = 0;i < CN_CHAR_NUM;i++){//以数组长度为限
if(high == CNChar_Code[i][1] && low == CNChar_Code[i][0]){
return CNChar_Code[i][2];
}
}
return -1;
}
//画中文汉字
void drawCNChar(int x,int y,unsigned char* asc_cn)
{
int i,j,index;
unsigned short int TmpX,TemY;
int temp;
int* TmpFontAddr;
index = returnIndex(*asc_cn,*(asc_cn + 1));
if(index >= 0){
TmpFontAddr = Font14_CN[0] + (CN_CHAR_HEIGHT) * index;
TemY = y;
for(i = 0;i < CN_CHAR_HEIGHT;i++){
TmpX = x;
temp = 1;
for(j = 0;j < CN_CHAR_WIDTH;j++){
if(((*TmpFontAddr) & temp) != 0){
drawPixel(TmpX,TemY);
}
temp = temp<<1;
TmpX++;
}
TemY++;
TmpFontAddr++;
}
}
}
//画字符串
void drawString(alt_u16 x,alt_u16 y,unsigned char* string)
{
int flag = 0;
while(*string != '\0'){
if(*string > 0xa0){
if(! flag)
flag++;
else{
if(x > (FRAME_LENGTH - CN_CHAR_WIDTH)){
x = 0;
y = y + CN_CHAR_HEIGHT;
}
drawCNChar(x,y,--string);
x = x + CN_CHAR_WIDTH;
flag--;
string++;
}
}
else{
if(x > (FRAME_LENGTH - EN_CHAR_WIDTH)){
x = 0;
y = y + EN_CHAR_WIDTH;
}
drawChar(x,y,*string);
x = x + EN_CHAR_WIDTH;
}
string++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -