高分悬赏急求哪位单片机C语言编程高手帮我翻译这个程序,由于要提问到每句,请务必能帮我每句都解释哦!急

#ifndef _LCD_SHOW_H // 防止lcd_show.h被重复引用

#define _LCD_SHOW_H

#include <at898252.h>
#include <absacc.h>
unsigned char code QING[32]={
/* 请 */
0x20,0x22,0xEC,0x00,0x20,0x22,0xAA,0xAA,
0xAA,0xBF,0xAA,0xAA,0xEB,0xA2,0x20,0x00,
0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x0A,
0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00
};

unsigned char code CHA[32]={
/* 插 */
0x10,0x10,0x10,0xFF,0x90,0x24,0x24,0xA4,
0x24,0xFC,0x22,0x23,0x22,0xB0,0x20,0x00,
0x02,0x42,0x81,0x7F,0x00,0xFF,0x49,0x48,
0x40,0x7F,0x40,0x49,0x49,0xFF,0x01,0x00
};

unsigned char code KA[32]={
/* 卡 */
0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x44,
0x44,0x44,0x46,0x44,0x40,0x60,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,
0x02,0x04,0x0C,0x18,0x00,0x00,0x00,0x00
};

#define LCD XBYTE[0xffff] /* LCD端口 */
#endif
主程序文件除了主函数以外,还包括多个对液晶操作的子函数,其主要内容如下。
#include "lcd_show.h"

#define uint unsigned int
#define uchar unsigned char

#define CSA P2_1
#define CSB P2_0
#define E P2_3
#define RW P2_5
#define DI P2_6

sbit busy_bit=ACC^7; //lcd state byte bit 7

/*下面是对液晶屏gxm12864d操作的函数, 128x64点阵,汉字显示,CSA,CSB用来进行左右显示区的选择。*/

/* 发命令i到主窗口*/
void lcd_mwc(uchar i)
{
CSA=1;
CSB=0;
RW=1;
DI=0;
do {ACC=LCD;}
while (busy_bit) ;//wait for lcd not busy
RW=0;
LCD=i;
}

/* 写数据i到主窗口*/
void lcd_mwd(uchar i)
{
CSA=1;
CSB=0;
RW=1;
DI=0;
do {ACC=LCD;} while (busy_bit);//wait for lcd not busy
RW=0;
DI=1;
LCD=i;
}

/* 清屏 */
void lcd_clear(void)
{
uchar i;
uchar page;
for (page=0xb8;page<0xc0;page++)
{
lcd_mwc(page); /*设置显示页面*/

lcd_mwc(0x40); /*设置列地址*/

for (i=0;i<64;i++)
{

lcd_mwd(0);
}
}
}

//初始化lcd
void lcd_init(void)
{
lcd_mwc(0xc0);

lcd_mwc(0x3f);

}

//dispm_hz_up() display up half of a hanzi in left area
void dispm_hz_up(uchar code * hz)
{
uchar i;
for (i=0;i<16;i++) lcd_mwd(*(hz+i));
}

//dispm_hz_down() display down half of a hanzi in left area
void dispm_hz_down(uchar code * hz)
{
uchar i;
for (i=16;i<32;i++) lcd_mwd(*(hz+i));
}

void main(void)
{
E=1;
lcd_clear();
lcd_init();

lcd_mwc(0xb8);
lcd_mwc(0x40);

dispm_hz_up(&QING);
dispm_hz_up(&CHA);
dispm_hz_up(&KA);

lcd_mwc(0xb9);
lcd_mwc(0x40);

dispm_hz_down(&QING);
dispm_hz_down(&CHA);
dispm_hz_down(&KA);//display "请插卡"

}

拜托大家了!拜托了!~~~
lcd_mwc(0xb9);
lcd_mwc(0x40);
lcd_mwc(0xb9);
lcd_mwc(0x40);这4句分别是什么意思,什么作用,这个是最后的补充了!告诉我吧!谢谢!~~

内容太多了,你就说哪些你不会吧,减少下工作量吧。

/***********************************************************/
#define LCD XBYTE[0xffff] // 定义LCD显示的数组,这边用0xffff浪费
// 只要32就可以了
#define uint unsigned int // 宏定义“短表示”,方便书写
#define uchar unsigned char // 同上

void lcd_mwc(uchar i) // 这个函数是用来写命令的:如启动液晶
// 锁定液晶等,可以查看液晶控制字就知道
// 0xb8和0x40是什么命令了,估计是启动
/*********************************************/
// 属于函数void lcd_clear(void) 要查看液晶的规格书
uchar i; // 定义液晶每页的地址个数,用来清0
uchar page; // 定义液晶的Page地址(page=0xb8;page<0xc0;page++) // 循环清零
/*********************************************/
uchar i; // 定义传送数据的个数
for (i=16;i<32;i++) lcd_mwd(*(hz+i)); // lcd_mwd函数的作用是通过给LCD
// 数组初始化地址,然后根据地址
// 递增将数组QING[32]等的对应地
// 数据传送到液晶数据口;这边是
// 循环传送后面16个数据

for (i=0;i<16;i++) lcd_mwd(*(hz+i)); // 同上,传送前面的16个数据
/*****************************************************************/
从你的程序上看,液晶应该由上下两块显示Page组成,然后上面的Page显示4个汉字的上半段,下面显示4个汉字的下半段,所以有8个Page,和你的void lcd_clear(void) 函数也就对应了。

void dispm_hz_down(uchar code * hz)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-05
等待答案!
第2个回答  2008-11-05
这么多,累死人啊
相似回答