标题:
12864m C51单片机并行C程序
[打印本页]
作者:
huxiao
时间:
2015-1-24 16:03
标题:
12864m C51单片机并行C程序
本人亲测,绝对没有问题,如果不对,请注意你的端口定义,而且数据口只能用P0,我用的是89S52,12M,祝大家好运!
#include <regx52.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char //自定义关键字
#define BUSY_FLAG P0_7 //液晶模块忙标志
#define MPU_RS_CH P2_7 //寄存器选择输入 RS
#define MPU_RW_CH P2_6 //读写控制 RW
#define MPU_ENABLE P2_5 //使能控制 E
#define MPU_PS_CH P3_6 //串/并传输控制 PSB
#define MPU_RESET P3_7 //液晶复位控制 RST
#define LCD_DATA P0 //液晶数据口 P0
#define LOW 0 //低电平
#define HIGH 1 //高电平
#define OFF 0 //逻辑关
#define ON 1 //逻辑开
//-----------------------------------------------
//液晶模块指令集定义
#define cClearDisplay 0x01 //清显示指令
#define cEntryModeSet 0x06 //设置输入模式
#define cDisplayOnCtrl 0x0c //设置开显控制
#define cFunctionSetB 0x30 //功能设定(基本指令)
#define cFunctionSetE 0x34 //功能设定(扩充指令)
//-----------------------------------------------
void checkLcdBusy (void)
{
LCD_DATA = 0xff;
MPU_RS_CH = LOW;
MPU_RW_CH = HIGH;
MPU_ENABLE = HIGH;
while (BUSY_FLAG);
MPU_ENABLE = LOW;
}
//===============================================
void delayMs (uchar ms)
{
uchar i;
while (--ms)
for (i = 0; i < 125; i++);
}
//===============================================
void delaySec (uchar sec)
{
uchar i;
while (--sec)
for (i = 0; i < 200; i++)
delayMs (6);
}
//===============================================
void lcdWriteCommand (uchar Command)
{
checkLcdBusy();
MPU_RS_CH = LOW;
MPU_RW_CH = LOW;
LCD_DATA = Command;
MPU_ENABLE = HIGH;
delayMs(1);
MPU_ENABLE = LOW;
}
//===============================================
void lcdClear (void)
{
lcdWriteCommand(cClearDisplay);
}
//===============================================
void lcdInit (void) //初始化LCD子程序
{
MPU_RESET = LOW;
delayMs(40);
MPU_RESET = HIGH;
delayMs(1);
MPU_PS_CH = HIGH;
lcdWriteCommand(cFunctionSetE);
lcdWriteCommand(cFunctionSetB);
lcdClear();
lcdWriteCommand(cEntryModeSet);
lcdWriteCommand(cDisplayOnCtrl);
}
//===============================================
void lcdWriteData (uchar Data)
{
checkLcdBusy();
MPU_RS_CH = HIGH;
MPU_RW_CH = LOW;
LCD_DATA = Data;
MPU_ENABLE = HIGH;
delayMs(1);
MPU_ENABLE = LOW;
}
//===============================================
void dispString (uchar X, Y, speed, uchar *msg)
{
if (X == 0) X = 0x80;
else if (X == 1) X = 0x90;
else if (X == 2) X = 0x88;
else if (X == 3) X = 0x98;
Y = X + Y;
lcdWriteCommand(Y);
while (*msg)
{
lcdWriteData(*msg++);
delayMs(speed);
}
}
//===============================================
void main (void)
{
lcdInit (); lcdClear();
while(1)
{
dispString(0, 0, 100, "西安建筑科技大学"); delaySec(1);
dispString(1, 0, 100, "雁塔路中段13号"); delaySec(1);
dispString(2, 1, 100, "冶金工程学院"); delaySec(1);
dispString(3, 1, 100, "材料加工工程"); delaySec(6);
lcdClear();
dispString(0, 1, 100, "单片机开发"); delaySec(1);
dispString(1, 0, 100, "电子设备研究开发"); delaySec(1);
dispString(2, 1, 100, "工业过程模拟"); delaySec(1);
dispString(3, 0, 100, "结构有限元分析"); delaySec(6);
lcdClear();
dispString(0, 0, 100, "联系人:crasyboye"); delaySec(1);
dispString(1, 0, 100, "电话:02982203875"); delaySec(1);
dispString(2, 0, 100, "手机:13519198625"); delaySec(1);
dispString(3, 1, 100, "共同学习共同进步"); delaySec(6);
lcdClear();
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1