历史上的今天
返回首页

历史上的今天

今天是:2024年11月09日(星期六)

正在发生

2019年11月09日 | PIC单片机驱动LCD12864显示字符源代码

2019-11-09 来源:51hei

#include       //调用头文件,可以去PICC软件下去查找PIC16F87XA单片机的头文件

__CONFIG(XT&WDTDIS&LVPDIS);    

//定义配置字,晶振类型:XT,关闭开门狗,禁止低电压编程

#define Rs  RB0 //并行数据/控制字选择 H:数据  L:控制字

#define RW  RB1 //并行读/写选择       H:读    L:写

#define E   RB2 //并行读写使能        H有效,下降沿锁定数据

#define Psb RB3 //串口,并口选择       H:并口  L:串口(开发板上引脚标识为CS1)

#define Rst RB5 //复位引脚            L:液晶复位

//---------------------------------------

//名称: 延时函数


//-----------------------------------------

void delay(unsigned int t)

{

unsigned int i,j;

for(i=0;i{

  for(j=0;j<10;j++)

  {

   asm("NOP");

  }

}

}

//---------------------------------------

//名称: 数据总线处理函数


//ND118开发板中,因为布线的原因液晶的8位数据总线和单片机的8位数据线

//是反的,所以需要调换过来,即DB0-RD7、DB1-RD6。。。。DB7-RD0

//-----------------------------------------

void write_bus(unsigned char buf)

if(buf&0x01) RD7=1;   

else RD7=0;

if(buf&0x02) RD6=1;   

else RD6=0;

if(buf&0x04) RD5=1;   

else RD5=0;

if(buf&0x08) RD4=1;   

else RD4=0;

if(buf&0x10) RD3=1;   

else RD3=0;

if(buf&0x20) RD2=1;   

else RD2=0;

if(buf&0x40) RD1=1;   

else RD1=0;

if(buf&0x80) RD0=1;

else RD0=0; 

}

//---------------------------------------

//名称: 写命令字节到12864函数


//-----------------------------------------

void write_com(unsigned char cmdcode)

{

unsigned int ii=20000;

Rs=0;                    //设置该字节数据为命令代码

RW=1;                    //设置此次操作为读

E=1;                     //使能

TRISD=0B11111111;     //RD设置为输入

while((PORTD&0X01)&&(ii>0))          //读忙状态,不忙时退出

{

  ii--;

}

E=0;                    //失能

TRISD=0B00000000;    //RD设置为输出

Rs=0;                   //设置该字节数据为控制命令

RW=0;                   //设置此次操作为读写

write_bus(cmdcode);     //通过数据总线处理函数将命令字写进总线中去

E=1;                    //使能写

asm("NOP");             //略加延迟

asm("NOP");

asm("NOP");

E=0;                    //失能写

}

//---------------------------------------

//名称: 写数据字节到12864函数


//-----------------------------------------

void write_data(unsigned char Rsspdata)

{

unsigned int ii=20000;

Rs=0;                    //设置该字节数据为命令代码

RW=1;                    //设置此次操作为读

E=1;                     //使能

TRISD=0B11111111;     //RD设置为输入

while((PORTD&0X01)&&(ii>0))          //读忙状态,不忙时退出

{

  ii--;

}

E=0;                    //失能

TRISD=0B00000000;    //RD设置为输出

Rs=1;                   //设置该字节数据为数据

RW=0;                   //设置此次操作为读写

write_bus(Rsspdata);    //通过数据总线处理函数将命令字写进总线中去

E=1;                    //使能写

asm("NOP");             //略加延迟

asm("NOP");

asm("NOP");

E=0;                    //失能写

}

//---------------------------------------

//名称: 写地址函数

//输入参数:x,y:显示字符串的位置,x:0-7,y:0-3


//-----------------------------------------

void write_xy(unsigned char x,unsigned char y)

{

unsigned char address;

switch(y){

  case 0:address=0x80+x;break;  //第一行的首地址是0x80

  case 1:address=0x90+x;break;  //第二行的首地址是0x90

  case 2:address=0x88+x;break;  //第三行的首地址是0x88

  case 3:address=0x98+x;break;  //第四行的首地址是0x98

  default:address=0x80+x;

   }

write_com(address); 

}

//---------------------------------------

//名称: 初始化LCD屏


//-----------------------------------------

void init_lcd(void)

{

Rst=0;           //复位液晶

delay(250);      //加些延时

delay(250);

Rst=1;           //复位结束

delay(250);      //加些延时

Psb=1;           //选择8bit并口


write_com(0x30);  //基本指令集  

write_com(0x0c);  //显示开

write_com(0x06);  //光标右移,整体显示不移动

write_com(0x01);  //清除显示(清零DDRAM)

delay(250);


}

//---------------------------------------

//名称: 指定地址中英文字符串显示函数


//-----------------------------------------

void write_string(unsigned char x,unsigned char y,const unsigned char *s)

{

write_xy(x,y);   //先写入地址参数

while(*s)        //只要字符串没写完就继续写

{

  write_data(*s); //写入一个字符串数据

  s++;            //指针转到下一个

  delay(10);

}

}

//---------------------------------------

//名称: 整行中英文字符串显示函数


//-----------------------------------------

void lcd12864_dis_oneline(unsigned char line,const unsigned char *p)

{

  unsigned char c;

  switch(line%4)

  {

    case 0:   

            write_com(0x80);  //第一行的首地址为0x80

            for(c=0;c<16;c++) //将本行的16个字符全部写进去,汉字占两个字符位

            {

              write_data(*p);

              p++;

              if(*p==0)

              {

                break;

              }

            }    

            break;

    case 1:

            write_com(0x90);  //第二行的首地址为0x90

            for(c=0;c<16;c++) //将本行的16个字符全部写进去,汉字占两个字符位

            {

              write_data(*p);

            p++;

              if(*p==0)

              {

                break;

              }

            }    

            break;

    case 2:

            write_com(0x88);  //第三行的首地址为0x88

            for(c=0;c<16;c++) //将本行的16个字符全部写进去,汉字占两个字符位

            {

              write_data(*p);

              p++;

              if(*p==0)

              {

                break;

              }

            }    

            break;

    case 3:

            write_com(0x98);  //第四行的首地址为0x98

            for(c=0;c<16;c++) //将本行的16个字符全部写进去,汉字占两个字符位

            {

              write_data(*p);

              p++;

              if(*p==0)

              {

                break;

              }

            }    

            break;

    default : break; 

  }

}

//---------------------------------------

//名称: 主函数   


//----------------------------------------- 

void main(void)

{    

   TRISB=0B11000000;    //RB0-5设置为输出

TRISD=0B00000000;    //RD设置为输出

   init_lcd();             //初始化12864

write_string(0,0,"XXXX电子有限");

    write_string(0,1,"公司");

write_string(0,2,"MovingChip.com");

write_string(0,3,"0574-86878555");

while(1)

{  


}  

}


推荐阅读

史海拾趣

Arctic Silicon Devices公司的发展小趣事

面对全球电子市场的竞争压力,Arctic Silicon Devices制定了国际化发展战略。公司积极拓展海外市场,通过设立分支机构、与当地企业合作等方式,将产品和技术推向全球。同时,公司还加大了对国际人才的引进力度,提升了自身的研发实力和市场竞争力。这一战略的成功实施,使Arctic Silicon Devices在全球电子行业中占据了重要地位。

Foxconn_Optical_Interconnect_Technologies__Inc.公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Arctic Silicon Devices深知这一点,因此非常重视品质管理。公司建立了严格的质量管理体系,从原材料采购到产品生产、测试、包装等各个环节都进行严格把控。同时,公司还加强了对供应商的管理和评估,确保原材料的质量稳定可靠。这些措施使得Arctic Silicon Devices的产品在市场上赢得了良好的口碑和信誉。

CDIL[Continental Device India Pvt. Ltd.]公司的发展小趣事

自1964年起,CDIL便踏上了半导体制造的先驱之路。当时,电子产业正处于蓬勃发展的初期,CDIL凭借对技术的敏锐洞察和不懈追求,迅速成为印度乃至全球半导体制造领域的佼佼者。其硅芯片和器件的制造质量和技术水平均达到了世界级标准,为印度电子产业的发展奠定了坚实基础。

ETTINGER公司的发展小趣事

在快速发展的电子行业中,Ettinger始终坚持传统工艺和品质至上的原则。公司不仅仍然由Ettinger家族所有,所有的产品制作也依然保持纯手工制作,以确保每一件产品都达到最高的品质标准。这种对品质和工艺的执着追求,使得Ettinger在竞争激烈的电子行业中独树一帜,赢得了消费者的信任和尊重。

振华新云(CEC)公司的发展小趣事

背景:在快速发展的同时,振华新云注重法治建设和企业文化建设,努力营造良好的经营环境。

内容:公司严格按照法治央企的各项建设要求,积极推进企业法治文化建设。同时,注重加强企业文化建设,弘扬“自力更生、艰苦奋斗、大力协同、无私奉献”的精神。通过开展各种文化活动和培训等方式,提高员工的文化素养和综合素质。

成果:法治建设和企业文化建设的不断推进,为公司的健康稳定发展提供了有力保障。同时,也增强了公司的凝聚力和向心力,激发了员工的积极性和创造力。

请注意,以上故事仅为概述,具体细节和内容需要根据实际情况进行补充和完善。

意普(ESPE)公司的发展小趣事

随着工业自动化和智能化的不断发展,意普(ESPE)公司开始将光电保护技术与智能制造相结合,推出了多款智能光电保护产品。这些产品具有更高的检测精度和更快的反应速度,能够更好地保护操作人员的安全。同时,公司还积极参与工业互联网和物联网的建设,推动光电保护技术的智能化发展。

问答坊 | AI 解惑

2010年北京电子信息大赛

本帖最后由 paulhyde 于 2014-9-15 09:33 编辑 2010年北京电子信息大赛定于5月30号举行,赛方提供xilinx的SOPC开发板,定于4月份发放,就此请大家发一些建设性的培训意见和关于xilinx的sopc的一些技术文档,请大家多多支持。  …

查看全部问答>

DMA模式什么意思啊?如何应DMA接收串口数据?

DMA模式什么意思啊?如何应DMA接收串口数据?…

查看全部问答>

vs2005 mfc工程移植入windows mobile

写的一个很简单的拼音输入程序,想植入windows mobile。我自己水平不行,希望哪个牛人帮忙做一下。愿意帮忙的留下邮箱,我发过来。…

查看全部问答>

怎样让spce061CPU跑起来???

我现在已经将spce61板连,probe,电脑接好了,Load的了一个程序,调试状态下,怎么也还是从main可以呢?不连接板的时候调试也是从main开始,我是通过PC指针开始进入程序是一样的,觉的cpu是没有跑起来。要怎样cpu才能跑起来,也是从main开始吗?还 ...…

查看全部问答>

请教做过270的camera驱动的大侠

最近一直在搞pxa270的camera的驱动,用的是ov2640,ov9653,现在遇到了一个奇怪的问题,就是YUV预览的时候,我设置dma直接从quick capture的3个数据寄存器到LCD的frame buffer。如果不去读pxa 270 quick capture那边的那3个数据寄存器的话,LCD上只 ...…

查看全部问答>

【问】哪里有repllog.exe下载?

想把PPC与PC通过串口连接同步(PPC上用的是CF转RS232 的连接卡) 但PPC上找不到repllog.exe ,不知哪里可以下载到? (目前可以通过USB同步传送文件) PPC型号是COMPAQ 3630 …

查看全部问答>

帮我看下代码C2061 C2660错误原因,我搞好长时间不知道为什么错 给分

帮我看下代码C2061  C2660错误原因,我搞好长时间不知道为什么错: //presetdlgs.h // int ReadHospitalInfo (const char *path, Hospital_Info *hospital_info); //presetdlgs.cpp ...... int ReadHospitalInfo (const char *path ...…

查看全部问答>

支持全系列STCortex-M3STM32Fxx的ARM开发工具

ARM公司和英蓓特公司今年5月底推出的RealView MDK中国版,共分3个版本:大众版2500元/套;企业版4600元/套;专业版8000元/套。可以支持全系列ST公司的ARM芯片,包括:最新的Cortex-M3  STM32系列芯片,还有ST公司以往发布的ARM ...…

查看全部问答>

AVR学习入门

请问谁有好的视频学习资料??…

查看全部问答>

DSP2407A中连续转换模式下的AD转换问题

本帖最后由 dontium 于 2015-1-23 13:29 编辑 我使用的DSP2407A的EVM仿真板,AD转换引脚全部悬空,在AD转换过程中使用连续转换模式时,测得引脚上的电压是1.1V左右,而在启动/停止模式下测得AD转换引脚上的电压大约是500mV;在这两种情况下,当接 ...…

查看全部问答>