📄 function.c
字号:
#include <./Atmel/at89x52.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#include "source.h"
void Msm_init(void){//初始化msm6255
MCSIO_ENABLE();
REG_INSTR=0X00;//选择模式控制寄存器
REG_DATA=0X0b;//光标关,显示开,4比特并行图形模式
REG_INSTR=0X01;//选择字符点数寄存器
REG_DATA=0X07;//一个字节的全部数据显示到屏幕上
REG_INSTR=0X02;//选择水平字符个数寄存器
REG_DATA=80;//每行显示81个字符,也就是81x8=648个点,这是根据AF1的时序设置的
REG_INSTR=0X03;//选择显示行数寄存器
REG_DATA=239;//选择行数为240行,因为是并行模式,所以总共为240x2=480行
REG_INSTR=0X05;//选择低端开始地址寄存器
REG_DATA=0; //设置显示存开始开始地址的低8位为0
REG_INSTR=0X06;//选择高端开始地址寄存器
REG_DATA=0; //设置显示存开始开始地址的高8位为0,这样显存开始地址就从0开始
}
void Clear_Screen(void){//清除整个屏幕
int i;
VRAM_BUSY=1;
for(i=0;i<81*480;i++){
while(VRAM_BUSY==0);//如果MSM6255正在取数据则等待
MCSIO_DISABLE();//把MSM6255的DIEN信号设置为低,访问显存
XBYTE[i]=0;//把显存相应的位置设置为0
MCSIO_ENABLE();//把MSM6255的DIEN信号设置为高,屏幕显示有效
}
}
void Draw_Pic(int x,int y,int w,int h,unsigned char *buf){
//在屏幕的x,y的位置上画高为h,宽度为W的图片,x和w必须为8的倍数,buf为图片数据
int i,j;
int vrbase;
VRAM_BUSY=1;
x=x/8;
w=w/8;
vrbase=SCREEN_WIDTH*y+x;//确定起始位置
for(j=0;j<h;j++){//遍历所有图片数据
for(i=0;i<w;i++){//画一行数据
while(VRAM_BUSY==0);//如果MSM6255正在取数据则等待
MCSIO_DISABLE();//把MSM6255的DIEN信号设置为低,访问显存
XBYTE[vrbase+i]=*(buf+j*SCREEN_WIDTH+i);//设置显存相应的为图片的数值
MCSIO_ENABLE();//把MSM6255的DIEN信号设置为高,屏幕显示有效
}
vrbase +=SCREEN_WIDTH;//换下一行
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -