📄 main.c
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GZ16.h> /* include peripheral declarations */
#include <stdio.h>
#define D_I PTA_PTA3
#define R_W PTA_PTA2
#define E PTA_PTA4
#define CS1 PTC_PTC2
#define CS2 PTC_PTC3
char buf[20];
/*忙判别*/
void lcd_busy(void) {DDRD_DDRD7=0;
D_I=0;R_W=1;
while(1){E=1;asm nop;
if(!PTD_PTD7)break;}
E=0;DDRD_DDRD7=1;
}
/*设置xy*/
void set_xy(unsigned char x,unsigned char y) {
if (x>=64) {CS1=0;CS2=1;} else {CS2=0;CS1=1;}
lcd_busy();
E=1;D_I=0;R_W=0;PTD=0x40|x;E=0;
lcd_busy();
E=1;D_I=0;R_W=0;PTD=0xb8|y;E=0;
}
void lw(unsigned char x,unsigned char y,unsigned char dd) {
set_xy(x,y);
lcd_busy();E=1;D_I=1;R_W=0;PTD=dd;E=0;
}
/*显示初始化*/
void lcd_init(void) {
unsigned char x,y;
/*开显示*/
E=1;D_I=0;R_W=0;PTD=0x3f;E=0;
for (y=0;y<8;y++) {
for (x=0;x<128;x++) lw(x,y,0x00); //清空屏幕
}
}
void initial(void){
CONFIG2=0x0b; //Bit 3:Enable CAN, Bit 2:Disable extra divide-by-128 prescaler in timebase module
//Bit 0:Internal data bus clock used as clock source for SCI
CONFIG1=0x3b;//0x4b;//LVI disable, COP disable
SCBR = 0x00;
SCPSC=0x2e;
SCC1 = 0x40;SCC2 = 0x08;SCS1;
DDRA_DDRA2=1;
DDRA_DDRA3=1;
DDRA_DDRA4=1;
DDRC_DDRC2=1;
DDRC_DDRC3=1;
DDRD=0xff;
}
void Transmit (unsigned char* sMessage){
while(*sMessage!= 0){SCDR = *sMessage;sMessage++;while(!SCS1_SCTE);}
}
/*汉字点阵的提取:采用软件"字模提取软件",读法:先读前8行,黑点处为1,依次读完这16列,然后读后8行,依次再读完16列。*/
unsigned char hz[]={
/*汉字:一 */
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*汉字:倪*/
0x80,0x40,0xf0,0x0f,0x02,0x00,0xfe,0x92,0x92,0x81,0x91,0x92,0x92,0xfe,0x00,0x00,
0x00,0x00,0x7f,0x00,0x40,0x20,0x11,0x0c,0x03,0x00,0x3f,0x40,0x40,0x41,0x78,0x00,
/*汉字:水*/
0x00,0x10,0x10,0x10,0x90,0x70,0x00,0xff,0x20,0x60,0x90,0x08,0x04,0x00,0x00,0x00,
0x10,0x10,0x08,0x06,0x01,0x40,0x80,0x7f,0x00,0x00,0x01,0x06,0x0c,0x18,0x08,0x00,
/*汉字:好*/
0x10,0x10,0xf0,0x1f,0x10,0xf0,0x80,0x82,0x82,0x82,0xf2,0x8a,0x86,0x82,0x80,0x00,
0x80,0x43,0x22,0x14,0x0c,0x73,0x20,0x00,0x40,0x80,0x7f,0x00,0x00,0x00,0x00,0x00,
/*汉字:人*/
0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x3f,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x10,0x0c,0x03,0x00,0x00,0x01,0x06,0x0c,0x18,0x30,0x60,0x20,0x00
};
/*显示汉字,注意本函数参数 x 为屏幕横着的坐标(范围从0~128),y为屏幕纵向的坐标(范围为0~8),n为要显示数足hz[]中的第几个字符
注意:由于本例显示的是16*16点阵,所以第一个字符占据横着16个点,纵向16个点,也就是纵向2页,所以下一个字符应该从第2页开始,再下一个从第4页开始
如主程序中调用的dh(0,0,0); dh(0,2,1); dh(0,4,2); */
void dh(unsigned char x,unsigned char y,unsigned char n) {
unsigned char i,dd;
for (i=0;i<16;i++) {
dd=hz[i+n*32];
lw(x+i,y,dd);
dd=hz[i+n*32+16];
lw(x+i,y+1,dd);
}
}
void main(void) {
initial();
EnableInterrupts; /* enable interrupts */
/* include your code here */
lcd_init();
dh(0,0,0); //在横向0,纵向0页处显示汉字 "一"
dh(0,2,1); //在横向0,纵向第2页处显示汉字 "倪"
dh(0,4,2); //在横向0,纵向第四页处显示汉字 "水"
dh(18,0,3); //在横向第18点,纵向0页处显示汉字 "好"
dh(18,2,4);
for(;;) {
} /* loop forever */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -