一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 3509|回复: 20
收起左侧

[51单片机] C51程序问题求解

[复制链接]
发表于 2013-2-21 12:19 | 显示全部楼层 |阅读模式
因想将手上的金鹏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);   
            }
}
发表于 2013-2-21 12:41 | 显示全部楼层
缺少pic.h文件呗,把pic.h和这个.c放到一个文件夹里再编译。

点评

呵呵,谢谢了。只是这个“pic.h”在那找?我是在keil里编译时出错,难道这可keil 里的89C52宏定义里没有,而“roger”在编译的软件里有?  详情 回复 发表于 2013-2-21 15:11
1楼说得对。  详情 回复 发表于 2013-2-21 13:43
发表于 2013-2-21 13:42 | 显示全部楼层
楼上的正解
发表于 2013-2-21 13:43 | 显示全部楼层
199003326 发表于 2013-2-21 12:41 static/image/common/back.gif
缺少pic.h文件呗,把pic.h和这个.c放到一个文件夹里再编译。

1楼说得对。

点评

搜了下,明白了"pic.h"是pic16系列芯片C语言的头文件,可是怎么会出现、应用在C51的芯片中呢。  详情 回复 发表于 2013-2-21 15:16
 楼主| 发表于 2013-2-21 15:11 | 显示全部楼层
199003326 发表于 2013-2-21 12:41 static/image/common/back.gif
缺少pic.h文件呗,把pic.h和这个.c放到一个文件夹里再编译。

呵呵,谢谢了。只是这个“pic.h”在那找?我是在keil里编译时出错,难道这可keil 里的89C52宏定义里没有,而“roger”在编译的软件里有?

点评

看原作者发布的应该是个压缩包,不知道里边有没有。  详情 回复 发表于 2013-2-21 15:55
 楼主| 发表于 2013-2-21 15:16 | 显示全部楼层
chjj0 发表于 2013-2-21 13:43 static/image/common/back.gif
1楼说得对。

搜了下,明白了"pic.h"是pic16系列芯片C语言的头文件,可是怎么会出现、应用在C51的芯片中呢。
发表于 2013-2-21 15:55 | 显示全部楼层
ylwwp 发表于 2013-2-21 15:11 static/image/common/back.gif
呵呵,谢谢了。只是这个“pic.h”在那找?我是在keil里编译时出错,难道这可keil 里的89C52宏定义里没有, ...

看原作者发布的应该是个压缩包,不知道里边有没有。
发表于 2013-2-21 16:27 | 显示全部楼层
ylwwp 发表于 2013-2-21 15:16 static/image/common/back.gif
搜了下,明白了"pic.h"是pic16系列芯片C语言的头文件,可是怎么会出现、应用在C51的芯片中呢。

pic.h 不是pic系列单片机的头文件,应该是原作者自定义的一个头文件,pic可能是picture的简写吧。

点评

有道理,看来我有想错了,但如果真是他自定义的一个文件,那可真不好找了。谢谢指点迷津。  详情 回复 发表于 2013-2-21 17:47
B系列的东东-----可直接找-肇庆金鹏实业有限公司资料!  详情 回复 发表于 2013-2-21 16:50
发表于 2013-2-21 16:50 | 显示全部楼层



              B系列的东东-----可直接找-肇庆金鹏实业有限公司资料!


ex_Bxl.rar (4.43 MB, 下载次数: 320)

点评

呵呵,谢谢老大啊。那个压缩包里也没见pic.h文件呀,那里多事关于触屏部分的。  详情 回复 发表于 2013-2-21 17:45
 楼主| 发表于 2013-2-21 17:45 | 显示全部楼层
倪大德 发表于 2013-2-21 16:50 static/image/common/back.gif
B系列的东东-----可直接找-肇庆金鹏实业有限公司资料!

呵呵,谢谢老大啊。那个压缩包里也没见pic.h文件呀,那里多事关于触屏部分的。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-6-6 02:01 , Processed in 0.075033 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表