OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2599|回复: 5

这个代码的引脚怎么正确修改

[复制链接]

21

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2017-12-22
在线时间
65 小时
发表于 2018-9-5 15:43:01 | 显示全部楼层 |阅读模式
5金钱
这是12864的程序,它定义的引脚是PC8,PC7,PC6,PC9,我想修改成PF1,PF2,PF3,PF4改以后12864就不能显示字符了
我是在.h文件中修改的,是不是还需要修改其他地方?
[mw_shl_code=c,true]/*LCD 12864*/
#define RS_H PFout(1)=1 //RS=1   4PIN
#define RS_L PFout(1)=0 //RS=0
#define RW_H PFout(2)=1 //RW=1    5PIN
#define RW_L PFout(2)=0  //RW = 0
#define EN_H PFout(3)=1   //EN = 1   6PIN
#define EN_L PFout(3)=0  //EN = 0
#define RESET_L PFout(4)=0
#define RESET_H PFout(4)=1
#define RW_READ PFout(1)[/mw_shl_code]

以下是原来的.h文件,按照它定义的引脚是能够显示字符的。

[mw_shl_code=c,true]#ifndef __LCD12864_H
#define __LCD12864_H

#include "sys.h"
#include "delay.h"

/*LCD 12864*/
#define RS_H PCout(8)=1 //RS=1   4PIN
#define RS_L PCout(8)=0 //RS=0

#define RW_H PCout(7)=1 //RW=1    5PIN
#define RW_L PCout(7)=0  //RW = 0

#define EN_H PCout(6)=1   //EN = 1   6PIN
#define EN_L PCout(6)=0  //EN = 0

#define RESET_L PCout(9)=0
#define RESET_H PCout(9)=1


#define RW_READ PCout(7)

void initLCD12864(void);
void displayString(unsigned char row,unsigned char col,char *ptr);
void clearLcdTxt(void);
void clearLcd(void);
void dispBlack(void);
void writeWhiteLine(unsigned char line);


#endif

[/mw_shl_code]

下面的是.c的
[mw_shl_code=c,true]#include "lcd12864.h"

unsigned char whiteLine=0;

unsigned char TABLE[]={
        0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
        0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
        0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,        
        0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f};

//′®DDÄ£ê½ ·¢Ëíò»×Ö½úêy¾Y
void sendByte(unsigned char data)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                EN_L;
                if(data&0x80)RW_H;
                else RW_L;
                delay_us(2);
                EN_H;
                data=data<<1;
                delay_us(2);
        }
}

//D′&#191;&#216;&#214;&#198;&#195;üá&#238;
void sendCMD(unsigned char cmd)
{
        RS_H;
        //delay_us(100);
        sendByte(0xF8);
        sendByte(cmd&0xF0);
        sendByte((cmd&0x0F)<<4);
        RS_L;
        //delay_us(100);
}

//D′êy&#190;Y&#195;üá&#238;
void sendData(unsigned char data)
{
        RS_H;
        //delay_us(100);
        sendByte(0xFA);
        sendByte(data&0xF0);
        sendByte((data&0x0F)<<4);
        RS_L;
        //delay_us(100);
}

//′óLCD&#189;óê&#213;ò&#187;&#184;&#246;êy&#190;Y
unsigned char receiveByte(void)
{
        unsigned char i,temp1=0,temp2=0;
        for(i=0;i<8;i++)
        {
                temp1=temp1<<1;
                EN_L;
                delay_us(10);
                EN_H;
                delay_us(10);
                EN_L;
                if(RW_READ)temp1++;
        }
        for(i=0;i<8;i++)
        {
                temp2=temp2<<1;
                EN_L;
                delay_us(10);
                EN_H;
                delay_us(10);
                EN_L;
                if(RW_READ)temp2++;
        }
        return ((temp1&0xF0)+(temp2&0x0F));
}
       
//&#188;ì2é&#195;|±ê&#214;&#190;
void checkBusy(void)
{
        do sendByte(0xFC);
        while(0x80&receiveByte());
}



//&#207;&#212;ê&#190;ò&#187;&#184;&#246;×&#214;·&#251;′&#174;μ&#189;&#214;&#184;&#182;¨&#206;&#187;&#214;&#195;
void displayString(unsigned char row,unsigned char col,char *ptr)
{
        sendCMD(TABLE[8*row+col]);
        while(*ptr != '\0')
        {
                sendData(*ptr++);
        }
}
//·′°×&#214;&#174;&#199;°&#207;è&#199;&#229;&#187;&#230;í&#188;′&#230;′¢&#199;&#248;
void dispBlack(void)
{
        unsigned char i,j;
        sendCMD(0x34);
        for(i=0;i<32;i++)
        {
                //checkBusy();
                sendCMD(0x80+i);
                sendCMD(0x80);
                for(j=0;j<16;j++) sendData(0x00);
        }
        for(i=0;i<32;i++)
        {
                sendCMD(0x80+i);
                sendCMD(0x88);
                for(j=0;j<16;j++) sendData(0x00);
        }
        sendCMD(0x34);
}

//·′°×μúYDDμ&#196;μúX&#184;&#246;μ&#189;end_x&#184;&#246;×&#214;·&#251;  
void writeWhite(unsigned char CX,unsigned char CY,unsigned char width,unsigned char YN,unsigned char f)
{
        unsigned char halfLineCnt,basicBlock,lcdPosX,lcdPosY;
        if (f==1)dispBlack();
        lcdPosY=0x80;
        if (CX == 0)
        {
                CX=0x80;
                halfLineCnt=16;
        }
        else if (CX ==1)
        {
                CX=0x80;
                halfLineCnt =32;
        }
        else if (CX ==2)
        {
                CX=0x88;
                halfLineCnt =16;
        }
        else if (CX == 3)
        {
                CX=0x88;
                halfLineCnt =32;
        }
        lcdPosX=CX+CY;
        for(;halfLineCnt !=0;halfLineCnt--)
        {
                basicBlock=width;
                sendCMD(0x34);
                sendCMD(lcdPosY);
                sendCMD(lcdPosX);
                sendCMD(0x30);
                for(;basicBlock !=0;basicBlock--)
                {
                        if(halfLineCnt>16)
                        {
                                sendData(0x00);
                        }
                        else
                        {
                                if(YN==1)sendData(0xFF);
                                else sendData(0x00);
                        }
                }
                lcdPosY++;
        }
        sendCMD(0X36);
        sendCMD(0x30);
}


//·′°×&#207;&#212;ê&#190;μúxDD
void writeWhiteLine(unsigned char line)
{
        if(line==0)
        {
                if (line != whiteLine)
                {
                        writeWhite(whiteLine,0,16,0,1);
                        whiteLine = line;
                }
        }else
        {
                if (line != whiteLine)
                {
                        writeWhite(line-1,0,16,1,1);
                        whiteLine = line;
                }
        }
}

void clearLcd(void)
{
        clearLcdTxt();
        writeWhiteLine(0);
}
//&#199;&#229;&#198;átxt
void clearLcdTxt(void)
{
        unsigned char i;
        sendCMD(0x30);
        sendCMD(0x80);
        for(i=0;i<64;i++)sendData(0x20);

}
//&#199;&#229;&#198;áBMP
void clearLcdBMP(void)
{
        unsigned char i,j;
        sendCMD(0x34);
        sendCMD(0x36);
        for(i=0;i<32;i++)
        {
                sendCMD(0x80|i);
                sendCMD(0x80);
                for(j=0;j<32;j++)sendData(0x00);
        }
}

void initLCD12864(void)
{
        RS_L;
        RESET_L;
        delay_ms(100);
        RESET_H;
        delay_ms(20);
        sendCMD(0x30);
        sendCMD(0x0C);
        sendCMD(0x01);
        sendCMD(0x02);
        sendCMD(0x80);
}









[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

还有在初始化GPIO需要修改
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-9-5 15:43:02 | 显示全部楼层
还有在初始化GPIO需要修改
回复

使用道具 举报

21

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2017-12-22
在线时间
65 小时
 楼主| 发表于 2018-9-5 15:50:43 | 显示全部楼层
douxiaolingyun 发表于 2018-9-5 15:46
还有在初始化GPIO需要修改

sys.h文件中是这样定义好的

[mw_shl_code=c,true]//IO&#191;ú2ù×÷,&#214;&#187;&#182;&#212;μ¥ò&#187;μ&#196;IO&#191;ú!
//è·±£nμ&#196;&#214;μD&#161;óú16!
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //ê&#228;3&#246;
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //ê&#228;è&#235;

#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //ê&#228;3&#246;
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //ê&#228;è&#235;

#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //ê&#228;3&#246;
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //ê&#228;è&#235;

#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //ê&#228;3&#246;
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //ê&#228;è&#235;

#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //ê&#228;3&#246;
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //ê&#228;è&#235;

#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //ê&#228;3&#246;
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //ê&#228;è&#235;[/mw_shl_code]
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-9-5 15:54:11 | 显示全部楼层
void LED_Init(void)
{

GPIO_InitTypeDef  GPIO_InitStructure;
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;               
GPIO_Init(GPIOC, &GPIO_InitStructure);                                       
GPIO_SetBits(GPIOC,GPIO_Pin_5);                                               

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                             
GPIO_Init(GPIOC, &GPIO_InitStructure);                                         
GPIO_SetBits(GPIOC,GPIO_Pin_13);                                                
}



类似这样的GPIO初始化 你有改吗???
回复

使用道具 举报

21

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2017-12-22
在线时间
65 小时
 楼主| 发表于 2018-9-5 16:28:40 | 显示全部楼层

可以了,十分感谢!
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-9-5 16:58:59 | 显示全部楼层
不客气!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 10:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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