本帖最后由 wpami 于 2013-2-21 11:53 编辑
因想将手上的金鹏ICMJ8X15B点阵屏点亮在出给坛友,所以在网上搜到一个名为“roger”的作者很多年前写的一个C51驱动金鹏ICMJ8X15B点阵屏程序,可是在Keil里编译时出错、警告等,无法通过。本人菜鸟,程序看的似懂非懂,特在此求进来了的指教一、二。程序原本为
http://read.pudn.com/downloads99 ... 3/OCMJ8X15B.C__.htm
编译后警告不能打开(使用)“pic.h”以及主程序中的“chn”"eng""eng1""pic"等出错。求解....
/*************************************
型号:OCMJ8X15B(无触摸屏)
MCU:89C52
功能:演示
编写:roger
日期:2007/4/14
**************************************/
#include <reg52.h>
#include <intrins.h>
#include "pic.h"
#define data_ora P1 //MCU P1<------> LCM
#define uchar unsigned char
#define uint unsigned int
sbit req =P3^0; //请求信号,H有效
sbit busy=P3^1; //H:已收到数据并在处理中,L:空闲可接收数据
/**********nus延时子程序*************/
void delay_nus(uint n)
{
while(n--);
}
/**********nms延时子程序*************/
void delay_nms(uint n)
{
uint i,j;
for(i=0;i<n;i++)
for(j=0;j<1000;j++)
;
}
/**********写命令或数据*************/
void SendData(uchar content)
{
while(busy==1);
data_ora=content;
req=1;
while(busy==0);
req=0;
}
/**********写命令或数据到LCD*************/
void SendDataToLCD(uchar cmd,uchar addr_x,uchar addr_y)
{
SendData(cmd);
SendData(addr_x);
SendData(addr_y);
}
/**************显示点阵******************/
void display_Grid(uchar data1,uchar data2)
{
uchar i,j,k;
for(k=0;k<128;k=k+4)
{
for(j=0;j<2;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf3,i,k+j);
SendData(data1);
}
}
for(j=2;j<4;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf3,i,k+j);
SendData(data2);
}
}
}
}
/*************显示图形***************/
void display_Picture(uchar code *img)
{
uchar i,j;
for(j=0;j<128;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf3,i,j);
SendData(img[j*30+i]);
}
}
}
/************显示中文*****************/
void display_chn(uchar code *chn)
{
uchar i,j;
for(j=0;j<8;j++)
{
for(i=0;i<15;i++)
{
SendDataToLCD(0xf0,i,j);
SendData(chn[i*2+30*j]-0xa0);
SendData(chn[i*2+30*j+1]-0xa0);
}
}
}
/************显示字符(8X16)****************/
void display_eng(uchar n,uchar code *eng)
{
uchar i,j;
for(j=0;j<n;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf9,i,j*16);
SendData(eng[j*30+i]);
}
}
}
/************显示字符(8X8)****************/
void display_eng1(uchar addr_y,uchar n,uchar code *eng)
{
uchar i,j;
for(j=0;j<n;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf1,i,addr_y+j*8);
SendData(eng[j*30+i]);
}
}
}
/***********主程序***************/
void main (void)
{
req=0;
busy=1;
while(1)
{
SendData(0xf4);
display_Grid(0xff,0xff);
delay_nms(300);
SendData(0xf4);
display_chn(chn);
delay_nms(300);
SendData(0xf4);
display_Grid(0xff,0x00);
delay_nms(300);
SendData(0xf4);
display_Grid(0x00,0xff);
delay_nms(300);
SendData(0xf4);
display_eng(4,eng);
display_eng1(64,6,eng+120);
display_eng1(112,2,eng1);
delay_nms(300);
SendData(0xf4);
display_Picture(pic);
delay_nms(300);
SendData(0xf4);
display_Grid(0xcc,0xcc);
delay_nms(300);
SendData(0xf4);
display_Grid(0x33,0x33);
delay_nms(300);
}
}
一周热门 更多>