PIC16F877A单片机来制Nokia5110 LCD显示器.docx

上传人:b****2 文档编号:17183981 上传时间:2023-04-24 格式:DOCX 页数:13 大小:327.49KB
下载 相关 举报
PIC16F877A单片机来制Nokia5110 LCD显示器.docx_第1页
第1页 / 共13页
PIC16F877A单片机来制Nokia5110 LCD显示器.docx_第2页
第2页 / 共13页
PIC16F877A单片机来制Nokia5110 LCD显示器.docx_第3页
第3页 / 共13页
PIC16F877A单片机来制Nokia5110 LCD显示器.docx_第4页
第4页 / 共13页
PIC16F877A单片机来制Nokia5110 LCD显示器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

PIC16F877A单片机来制Nokia5110 LCD显示器.docx

《PIC16F877A单片机来制Nokia5110 LCD显示器.docx》由会员分享,可在线阅读,更多相关《PIC16F877A单片机来制Nokia5110 LCD显示器.docx(13页珍藏版)》请在冰豆网上搜索。

PIC16F877A单片机来制Nokia5110 LCD显示器.docx

PIC16F877A单片机来制Nokia5110LCD显示器

课程设计

 

课程名称_微机原理与单片机技术实践

学生学院_____自动化学院________

专业班级_电子信息科学与技术

学号_____

学生姓名______________

指导教师

 

2012年4月25日

摘要

本次实训使用PIC16F877A单片机设计最小系统并扩展,进一步了解PIC16系列单片机的功能与应用。

在扩展功能上应用PIC16F877A单片机来控制Nokia5110LCD显示器,通过单片机接收到不同的信息,编写正确的程序,来控制Nokia5110LCD显示器显示自己的名字。

关键词:

PIC16F877A单片机,Mplab,C语言,

目录

1设计任务目的及要求4

2实验原理4

2.1PIC16F877A单片机简介4

3设计方案7

4实验结果8

5心得体会8

参考文献9

1设计任务目的及要求

使用PIC16F877A单片机设计一个最小系统,在单片机小系统上开发应用系统,对其进行功能扩展,编写相应的程序,使设计功能得到实现。

2实验原理

2.1PIC16F877A单片机简介

PIC系列单片机是美国Microchip公司生产的产品,具有性能完善,功能强大,学习容易,开发应用方便等突出优点。

PIC系列单片机采用哈佛总线结构,彻底将芯片内部的数据总线和指令总线分开,大大提高了CPU的执行指令速度和工作效率。

采用精简指令RISC技术,优先选取使用频率最高的简单指令,避免复杂指令,采用控制逻辑为主的设计理念。

采用更为简单的寻址方式,功耗低,驱动能力强,这也是PIC系列单片机的一大特点。

实验采用的单片机封装方式是如下图:

 

3设计方案:

本次实训应用PIC16F877A单片机来控制Nokia5110LCD显示器显示自己名字。

代码如下:

#include

__CONFIG(XT&WDTEN);

#defineuintunsigned int

#defineucharunsigned char

#definesce  RD2//片选

#definedc   RD1//1写数据,0写指令

#definesdin RC5//数据

#definesclk RC3//时钟

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

//6x8font

//1pixelspaceatleftandbottom

//index=ASCII-32

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

constunsignedcharfont6x8[][6]=

{

{0x00,0x00,0x00,0x00,0x00,0x00},//sp

{0x00,0x00,0x00,0x2f,0x00,0x00},//!

{0x00,0x00,0x07,0x00,0x07,0x00},//"

{0x00,0x14,0x7f,0x14,0x7f,0x14},//#

{0x00,0x24,0x2a,0x7f,0x2a,0x12},//$

{0x00,0x62,0x64,0x08,0x13,0x23},//%

{0x00,0x36,0x49,0x55,0x22,0x50},//&

{0x00,0x00,0x05,0x03,0x00,0x00},//'

{0x00,0x00,0x1c,0x22,0x41,0x00},//(

{0x00,0x00,0x41,0x22,0x1c,0x00},//)

{0x00,0x14,0x08,0x3E,0x08,0x14},//*-10

{0x00,0x08,0x08,0x3E,0x08,0x08},//+

{0x00,0x00,0x00,0xA0,0x60,0x00},//,

{0x00,0x08,0x08,0x08,0x08,0x08},//-

{0x00,0x00,0x60,0x60,0x00,0x00},//.

{0x00,0x20,0x10,0x08,0x04,0x02},///

{0x00,0x3E,0x51,0x49,0x45,0x3E},//0

{0x00,0x00,0x42,0x7F,0x40,0x00},//1

{0x00,0x42,0x61,0x51,0x49,0x46},//2

{0x00,0x21,0x41,0x45,0x4B,0x31},//3

{0x00,0x18,0x14,0x12,0x7F,0x10},//4-20

{0x00,0x27,0x45,0x45,0x45,0x39},//5

{0x00,0x3C,0x4A,0x49,0x49,0x30},//6

{0x00,0x01,0x71,0x09,0x05,0x03},//7

{0x00,0x36,0x49,0x49,0x49,0x36},//8

{0x00,0x06,0x49,0x49,0x29,0x1E},//9

{0x00,0x00,0x36,0x36,0x00,0x00},//:

{0x00,0x00,0x56,0x36,0x00,0x00},//;

{0x00,0x08,0x14,0x22,0x41,0x00},//<

{0x00,0x14,0x14,0x14,0x14,0x14},//=

{0x00,0x00,0x41,0x22,0x14,0x08},//>-30

{0x00,0x02,0x01,0x51,0x09,0x06},//?

{0x00,0x32,0x49,0x59,0x51,0x3E},//@

{0x00,0x7C,0x12,0x11,0x12,0x7C},//A

{0x00,0x7F,0x49,0x49,0x49,0x36},//B

{0x00,0x3E,0x41,0x41,0x41,0x22},//C

{0x00,0x7F,0x41,0x41,0x22,0x1C},//D

{0x00,0x7F,0x49,0x49,0x49,0x41},//E

{0x00,0x7F,0x09,0x09,0x09,0x01},//F

{0x00,0x3E,0x41,0x49,0x49,0x7A},//G

{0x00,0x7F,0x08,0x08,0x08,0x7F},//H-40

{0x00,0x00,0x41,0x7F,0x41,0x00},//I

{0x00,0x20,0x40,0x41,0x3F,0x01},//J

{0x00,0x7F,0x08,0x14,0x22,0x41},//K

{0x00,0x7F,0x40,0x40,0x40,0x40},//L

{0x00,0x7F,0x02,0x0C,0x02,0x7F},//M

{0x00,0x7F,0x04,0x08,0x10,0x7F},//N

{0x00,0x3E,0x41,0x41,0x41,0x3E},//O

{0x00,0x7F,0x09,0x09,0x09,0x06},//P

{0x00,0x3E,0x41,0x51,0x21,0x5E},//Q

{0x00,0x7F,0x09,0x19,0x29,0x46},//R-50

{0x00,0x46,0x49,0x49,0x49,0x31},//S

{0x00,0x01,0x01,0x7F,0x01,0x01},//T

{0x00,0x3F,0x40,0x40,0x40,0x3F},//U

{0x00,0x1F,0x20,0x40,0x20,0x1F},//V

{0x00,0x3F,0x40,0x38,0x40,0x3F},//W

{0x00,0x63,0x14,0x08,0x14,0x63},//X

{0x00,0x07,0x08,0x70,0x08,0x07},//Y

{0x00,0x61,0x51,0x49,0x45,0x43},//Z

{0x00,0x00,0x7F,0x41,0x41,0x00},//[

{0x00,0x55,0x2A,0x55,0x2A,0x55},//55-60

{0x00,0x00,0x41,0x41,0x7F,0x00},//]

{0x00,0x04,0x02,0x01,0x02,0x04},//^

{0x00,0x40,0x40,0x40,0x40,0x40},//_

{0x00,0x00,0x01,0x02,0x04,0x00},//'

{0x00,0x20,0x54,0x54,0x54,0x78},//a

{0x00,0x7F,0x48,0x44,0x44,0x38},//b

{0x00,0x38,0x44,0x44,0x44,0x20},//c

{0x00,0x38,0x44,0x44,0x48,0x7F},//d

{0x00,0x38,0x54,0x54,0x54,0x18},//e

{0x00,0x08,0x7E,0x09,0x01,0x02},//f-70

{0x00,0x18,0xA4,0xA4,0xA4,0x7C},//g

{0x00,0x7F,0x08,0x04,0x04,0x78},//h

{0x00,0x00,0x44,0x7D,0x40,0x00},//i

{0x00,0x40,0x80,0x84,0x7D,0x00},//j

{0x00,0x7F,0x10,0x28,0x44,0x00},//k

{0x00,0x00,0x41,0x7F,0x40,0x00},//l

{0x00,0x7C,0x04,0x18,0x04,0x78},//m

{0x00,0x7C,0x08,0x04,0x04,0x78},//n

{0x00,0x38,0x44,0x44,0x44,0x38},//o

{0x00,0xFC,0x24,0x24,0x24,0x18},//p-80

{0x00,0x18,0x24,0x24,0x18,0xFC},//q

{0x00,0x7C,0x08,0x04,0x04,0x08},//r

{0x00,0x48,0x54,0x54,0x54,0x20},//s

{0x00,0x04,0x3F,0x44,0x40,0x20},//t

{0x00,0x3C,0x40,0x40,0x20,0x7C},//u

{0x00,0x1C,0x20,0x40,0x20,0x1C},//v

{0x00,0x3C,0x40,0x30,0x40,0x3C},//w

{0x00,0x44,0x28,0x10,0x28,0x44},//x

{0x00,0x1C,0xA0,0xA0,0xA0,0x7C},//y

{0x00,0x44,0x64,0x54,0x4C,0x44},//z-90

{0x14,0x14,0x14,0x14,0x14,0x14}//horizlines

}; 

//*************************************************

//******functiondeclaration********************

voidLCD_init(void);

voidinit(void);

voidLCD_write_byte(unsignedchardt,unsignedcharcommand);

voiddelay(uintx);

voidLCD_set_XY(unsignedcharX,unsignedcharY);

voidLCD_clear(void);

voidLCD_write_char(unsignedcharx,unsignedchary,unsignedcharc);

voidmain(void)

  init();      

  LCD_init(); //初始化LCD模块 

 LCD_clear();//清屏幕

 LCD_write_char(0,0,41);//I

 LCD_write_char(1,0,78);//i

 LCD_write_char(2,0,65);//u

 LCD_write_char(3,0,12);//,

 LCD_write_char(4,0,41);//J

 LCD_write_char(8,0,54)//i

 LCD_write_char(6,0,44);//a

 LCD_write_char(7,0,47);//n

 LCD_write_char(9,0,37);//Z

 LCD_write_char(10,0,0);//h

 LCD_write_char(11,0,57);//o

 LCD_write_char(12,0,47);//n

 LCD_write_char(13,0,53);//g

 

  while

(1)

  {

     asm("CLRWDT");    

  }

}

//***********initialPICMCU************************

voidinit(void)

{

  asm("CLRWDT");  

  ADCON1=0X06;

  OPTION=0x81;

  TRISA=0B00000000;

  TRISB=0B00000000;

  TRISC=0B00000000;

  TRISD=0B00000000;

  TRISE=0B00000000;

   PORTA=0X00;

  PORTB=0x00;

  PORTC=0x01; 

  PORTD=0x01;  

  PORTE=0x07; 

  RBIE=0;      

}

//*******************************************************

//********************writedataorcommand***********************************************************

voidLCD_write_byte(unsignedchardt,unsignedcharcommand)

{

 unsignedchari; 

 sce=0; //片选

 dc=command; //1写数据,0写指令。

 for(i=0;i<8;i++)

 { 

  if(dt&0x80)

   sdin=1;

  else

   sdin=0;

  dt=dt<<1;  

  sclk=0; 

  asm("CLRWDT");

  asm("CLRWDT"); 

  sclk=1;//在时钟正边沿采样

 } //for循环传送八个bit。

 dc=1; 

 sce=1; 

 sdin=1;

}

//**************************************************************

//****************initiallcd**********************************************

voidLCD_init(void)

{

 sce=1; //sce为高时,串行接口被初始化。

sce为高时忽略时钟信号。

 sdin=1;

 dc=1;

 sclk=1; 

 LCD_write_byte(0x21,0);//0b00100001LCD功能设置:

芯片活动,水平寻址,使用扩展指令

 LCD_write_byte(0xd0,0);//设置VOP值

 LCD_write_byte(0x20,0);//LCD功能设置:

芯片活动,水平寻址,使用基本指令

 LCD_write_byte(0x0C,0);//设定显示配置:

普通模式

}

//****************************************************************

//*************defineXYcoordinate****************************************************

voidLCD_set_XY(unsignedcharX,unsignedcharY)

{

 LCD_write_byte(0x40|Y,0);//column0b01000000

 LCD_write_byte(0x80|X,0);//row   0b10000000

}

//****************************************************************

//***********clearlcd***************************************************** 

voidLCD_clear(void)

{

 unsignedchart;

 unsignedchark;

 LCD_set_XY(0,0);

 for(t=0;t<6;t++)

 { 

  for(k=0;k<84;k++)

  { 

   LCD_write_byte(0x00,1);

   asm("CLRWDT");   

  } 

 }

}

//***************************************************************

//*******displaychar*********************************************************

//Lcdrow=48,48/8=6,y表示第y个6block,一共6个block,相当于6行,y相当于第y行。

//字符的宽度位6.

voidLCD_write_char(unsignedcharx,unsignedchary,unsignedcharc)

{

  unsignedcharline;

  LCD_set_XY(x*6,y);  

  for(line=0;line<6;line++)

   LCD_write_byte(font6x8[c][line],1);

}

//******************************************************************

//*********************************************************************

//************delayfunction,delayxms****************************************************

voiddelay(uintx)

{

 uinta,b;

 for(a=x;a>0;a--)

  for(b=110;b>0;b--);

}

外观:

 

最小系统:

实验电路图:

PIC16F877A实验电路图

 

4实验结果

通过Mplab软件编程之后,编译通过,之后使用ICD2下载程序到单片机上,经验证,通过接通电源后,成功控制Nokia5110LCD显示器显示自己的名字LiuJianZhong。

5心得体会

通过这次试验,我收获良多,单片机试验要求的是一种思维的创新,而不是简单的重复老师所说的试验步骤。

单片机随着城市的发展,已经得到了进一步的应用,在今后将会有更大的发展。

在这次试验当中,一开始我不断的调试,都无法显示出想要的效果,我开始以为是程序的问题,所以在程序上花了比较大的功夫,不过发现不管我怎样修改程序,都无法显示或者显示乱码。

于是,我请教了老师,老师告诉我这是电路连接的问题,后来经过我的仔细检查,发现真的是电路连接错误了。

于是在改进之后,达到了我预期的效果。

当然,在试验中我还遇到了许多问题,不过不管做什么事,计划是很重要的,做事没有顺序,做事情就会比较乱,很难成功。

而且做事要多动脑,选出最好的方法。

最后还要注重细节,细节决定成败,这句话在这次课题中不仅一次得到了验证。

今后在实验课上,我会更认真去动手操作,把理论与实际相结合!

参考文献

[1]李荣正王诚杰戴国银编著.PIC单片机原理及应用(第4版).北京:

北京航空航天大学出版社.2010

[2]童诗白华成英主编.模拟电子技术基础(第四版).北京:

高等教育出版社,2009

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1