PIC16F877A单片机来制Nokia5110 LCD显示器.docx
- 文档编号:17183981
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:13
- 大小:327.49KB
PIC16F877A单片机来制Nokia5110 LCD显示器.docx
《PIC16F877A单片机来制Nokia5110 LCD显示器.docx》由会员分享,可在线阅读,更多相关《PIC16F877A单片机来制Nokia5110 LCD显示器.docx(13页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PIC16F877A单片机来制Nokia5110 LCD显示器 PIC16F877A 单片机 Nokia5110 LCD 显示器