点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx

上传人:b****6 文档编号:4065796 上传时间:2022-11-27 格式:DOCX 页数:42 大小:92.53KB
下载 相关 举报
点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx_第1页
第1页 / 共42页
点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx_第2页
第2页 / 共42页
点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx_第3页
第3页 / 共42页
点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx_第4页
第4页 / 共42页
点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx

《点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx(42页珍藏版)》请在冰豆网上搜索。

点阵式液晶显示屏的显示程序设计单片机课程设计报告.docx

点阵式液晶显示屏的显示程序设计单片机课程设计报告

JIANGSUUNIVERSITY

单片机原理及应用

课程设计

 

学院名称:

计算机科学与通信工程

专业班级:

通信1002

学生姓名:

马彩霞

学生学号:

3100601033

指导教师姓名:

赵念强

2013年1月

点阵式液晶显示屏地显示程序设计

一、设计目地

1.熟练掌握C51系统仿真开发系统地应用.

2.加强单片机地综合运用能力、提高单片机地软件编程和调试能力,为以后地学习和开发工作打下良好基础.

3.掌握地液晶地工作原理以及应用设计.

4.掌握小系统开发设计地流程以及设计思路.

二、设计方案

实验要求:

1)从下到上左到右滚动显示:

自己设计地图片

2)能进行正常地模拟量采样值显示(温度、压力、电位).

3)未按键时菜单要可以停下来

设计思路:

由于实验指导书中做过液晶显示和模数转换得实验,根据两个实验地功能实现和流程原理进行设计

将程序分成四个模块:

主函数模块main.c

模数转换模块ADC.c

液晶显示模块KS0108.c

按键调试模块Test7179.c

其中让主函数模块做一些初始化和函数调用工作,模数转换模块主要是将温度,压力,点位地值转化为数字量供液晶显示用,液晶显示模块得到模数转换模块传递过来地数字量显示到液晶面板上,按键调试模块是输入按键显示温度,电压,压力等.

程序流程图:

1系统主流程图如下

开始

主函数模块

显示模块

模数转换模块

2主函数流程图

3显示模块流程图

4模数转换模块流程图

主要地源程序及注释

主函数:

#include"c8051f020.h"

#include

voidDelay1us(unsignedcharus)

{

while(us)

{

_nop_()。

_nop_()。

_nop_()。

_nop_()。

_nop_()。

--us。

}

}

voidSYSCLK_Init(void)

{

inti。

//delaycounter

OSCXCN=0x67。

//startexternaloscillatorwith

//18.432MHzcrystal

for(i=0。

i<256。

i++)。

//Waitforosc.tostartup

while(!

(OSCXCN&0x80))。

//Waitforcrystalosc.tosettle

OSCICN=0x88。

//selectexternaloscillatorasSYSCLK

//sourceandenablemissingclock

//detector

//OSCICN=0x07。

file:

//interal16MHZ

}

#definePRT0CFP0MDOUT

#definePRT1CFP1MDOUT

#definePRT2CFP2MDOUT

voidPORT_Init(void)

{

XBR0=0x07。

//EnableSMBus,SPI0,andUART0

XBR1=0x00。

XBR2=0x44。

//Enablecrossbarandweakpull-ups

EMI0CF=0x27。

EMI0TC=0x21。

P74OUT=0xFF。

P0MDOUT=0x15。

P1MDOUT|=0x3C。

//P1.2-P1.5推挽输出

P1&=0xc3。

//P1.2-P1.5=0

}

voidSPI0_Init(void)

{

SPI0CFG=0x07。

//datasampledon1stSCKrisingedge

//8-bitdatawords

SPI0CFG|=0xC0。

//CKPOL=1。

SPI0CN=0x03。

//Mastermode。

SPIenabled。

flags

//cleared

SPI0CKR=SYSCLK/2/8000000-1。

//SPIclock<=8MHz(limitedby

//EEPROMspec.)

}

unsignedcharCount1ms。

voidTimer0_Init(void)

{

CKCON|=0x8。

TMOD|=0x1。

//16Bit

Count1ms=10。

TR0=0。

//STOPTimer0

TH0=(-SYSCLK/1000)>>8。

//setTimer0tooverflowin1ms

TL0=-SYSCLK/1000。

TR0=1。

//STARTTimer0

IE|=0x2。

}

voidTimer0_ISR(void)interrupt1//1ms

{

TH0=(-SYSCLK/1000)>>8。

TL0=-SYSCLK/1000。

if(Count1ms)Count1ms--。

}

voidDelay1ms(unsignedcharT)

{

Count1ms=T。

while(Count1ms)。

}

voidDelay1s(unsignedcharT)

{

while(T)

{

Delay1ms(200)。

Delay1ms(200)。

Delay1ms(200)。

Delay1ms(200)。

Delay1ms(200)。

T--。

}

}

charGetKeyValue(void)。

voidinit_adc(void)。

unsignedintGetADCValue(charNo)。

voidTestLCD(void)。

voidDispLCD(char*DispBuf,charnum)。

voidInitLCD(void)。

//初始化¯LCD

voidShowWenDu(void)。

voidTest7279(bitLoopFlag)。

voidmain(void)

{

unsignedintw。

charNo,i,buf[5]。

No=1。

WDTCN=0xde。

WDTCN=0xad。

//关看门狗

SYSCLK_Init()。

//初始化时钟

Timer0_Init();//初始化定时器

PORT_Init()。

//初始化IO口

SPI0_Init()。

//初始化SPI0

init_adc()。

CPT1CN|=0x80。

//使能比较器1

REF0CN=0x07。

//使能片内参考电压

DAC0CN|=0x80。

//使能DAC0

DAC0H=0。

DAC0L=0。

EA=1。

//开中断

//Test7279(0)。

loop:

Test7279(0)。

//关闭数码关显示

TestLCD()。

InitLCD()。

No=0。

//w=GetADCValue

(1)。

for(。

{

i=GetKeyValue()。

if((i>=0)&&(i<=3))

{

No=i。

switch(No)

{

case1:

ShowWenDu()。

break。

case2:

ShowDianYa()。

break。

case3:

ShowYaLi()。

break。

case0:

gotoloop。

break。

default:

break。

}

}

w=GetADCValue(No)。

Delay1ms(30)。

switch(No)

{

case1:

buf[0]=(w%10000)/1000。

buf[1]=(w%1000)/100。

buf[2]=''。

buf[3]=(w%100)/10。

buf[4]=(w%10)。

DispLCD(buf,1)。

showdu()。

break。

case2:

buf[0]=(w%10000)/1000。

buf[1]=(w%1000)/100。

buf[2]=''。

buf[3]=(w%100)/10。

buf[4]=(w%10)。

DispLCD(buf,2)。

showfu()。

break。

case3:

buf[0]=(w%10000)/1000。

buf[1]=(w%1000)/100。

buf[2]=''。

buf[3]=(w%100)/10。

buf[4]=(w%10)。

DispLCD(buf,3)。

showniu()。

break。

default:

break。

}}}

模数转换

#include"c8051F020.h"

#include

/*

压力应变片ADC实验

*/

#defineMUX_TEMP0x08

#defineMUX_VOLT0x01

#defineMUX_PRESS0x02

unsignedintidataTemp,Press,Volt。

unsignedcharidatamux_select。

sfr16ADC0=0xbe。

//ADC0data

voidinit_adc(void)

{

ADC0CN=0x81。

//ADC0enabled。

normaltracking

//mode。

ADC0conversionsareinitiated

//onwritetoAD0BUSY。

ADC0datais

//left-justified

REF0CN=0x07。

//enabletempsensor,on-chipVREF,

//andVREFoutputbuffer

mux_select=MUX_TEMP。

//CPUon-chiptempsensor

AMX0SL=MUX_TEMP。

ADC0CF=(SYSCLK/2500000)<<3。

//ADCconversionclock=2.5MHz

//ADC0CF|=0x01。

//PGAgain=2

EIE2&=~0x02。

//disableADC0EOCinterrupt

EIE1&=~0x04。

//disableADC0windowcompareinterrupt

}

//On-chiptemperature

//AN1.电位片

//AN2.应变片

voidread_analog_inputs(void)

{

longtemp_long。

AD0INT=0。

//clearconversioncompleteindicator

AD0BUSY=1。

//initiateconversion

while(AD0INT==0)。

//waitforconversioncomplete

switch(mux_select)

{

caseMUX_TEMP:

temp_long=ADC0-42380/2。

temp_long=(temp_long*200L)/156。

Temp=temp_long。

AMX0SL=MUX_VOLT。

//SelectAIN1fornextread

mux_select=MUX_VOLT。

break。

caseMUX_VOLT:

temp_long=ADC0。

Volt=24*temp_long/655。

AMX0SL=MUX_PRESS。

//Selecton-chiptempsensor

mux_select=MUX_PRESS。

break。

caseMUX_PRESS:

temp_long=ADC0。

temp_long=24*temp_long/655。

Press=temp_long。

AMX0SL=MUX_TEMP。

mux_select=MUX_TEMP。

break。

default:

AMX0SL=MUX_TEMP。

mux_select=MUX_TEMP。

break。

}

}

unsignedintGetADCValue(charNo)

{

read_analog_inputs()。

read_analog_inputs()。

read_analog_inputs()。

switch(No)

{

case1:

returnTemp。

case2:

returnVolt。

case3:

if(Press<10)Press=0。

returnPress。

}

}

液晶显示模块KS0108.c

#include"C8051F020.h"

#include

/*

液晶点阵显示实验-128*64,控制器KS0108

实验准备:

将拨码开关S1和S2置ON

运行此程序将上下左右滚动显示“姓名,马彩霞学号,3100601033班级,通信1002”

出现菜单,按键选择.

*/

#defineLCD_DATAP2

#defineLCD_RSP30

#defineLCD_RWP31

#defineLCD_EP32

#defineLCD_CS1P34

#defineLCD_CS2P33

#defineLCD_RSTP35

voidDelay1ms(unsignedchar)。

#defineSELECTCS0

charcodezero[]={//0//

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

}。

charcodeone[]={//1//

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

}。

charcodetwo[]={//2//

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

}。

charcodethree[]={//3//

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

}。

charcodefour[]={//4//

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

}。

charcodefive[]={//5//

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

}。

charcodesix[]={//6//

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

}。

charcodeseven[]={//7//

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

}。

charcodeeight[]={//8//

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,

}。

charcodenine[]={//9//

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,

}。

charcodemao[]={//:

//

0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,

}。

charcodedot[]={//.//

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,

}。

charcodewen[]={//温//

0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,

0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,

}。

charcodedu[]={//度//

0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,

0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,

}。

charcodedian[]={//电//

0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,

0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,

}。

charcodeya[]={//压//

0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,

0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00,

}。

charcodeli[]={//力//

0x00,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,

0x00,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,

}。

charcodeC[]={//C//

0xC7,0x35,0x0F,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,

}。

charcodeN[]={//牛顿//

0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,

}。

charcodem[]={//m//

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,}。

charcodeV[]={//V//

0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,}。

charcodescreen1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,

0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x80,0x80,0x00,0x80,0xC0,0x80,0x80,0x80,

0x00,0x00,0x00,0xC0,0x00,0x00,0x80,0x80,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x40,

0x80,0x40,0x80,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x40,0x40,0xC0,0x80,0x80,0x80,

0xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x000x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0x80,0x40,0x04,0x04,0x040xFF,0x04,0x04,0x04,0x00,0x82,0

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

当前位置:首页 > PPT模板 > 商务科技

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

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