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

上传人:壹****1 文档编号:425388654 上传时间:2024-01-04 格式:DOC 页数:29 大小:171KB
返回 下载 相关 举报
点阵式液晶显示屏的显示程序设计单片机课程设计报告1_第1页
第1页 / 共29页
点阵式液晶显示屏的显示程序设计单片机课程设计报告1_第2页
第2页 / 共29页
点阵式液晶显示屏的显示程序设计单片机课程设计报告1_第3页
第3页 / 共29页
点阵式液晶显示屏的显示程序设计单片机课程设计报告1_第4页
第4页 / 共29页
点阵式液晶显示屏的显示程序设计单片机课程设计报告1_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《点阵式液晶显示屏的显示程序设计单片机课程设计报告1》由会员分享,可在线阅读,更多相关《点阵式液晶显示屏的显示程序设计单片机课程设计报告1(29页珍藏版)》请在金锄头文库上搜索。

1、J I A N G S U U N I V E R S I T Y单片机原理及应用课程设计点阵式液晶显示屏的显示程序设计点阵式液晶显示屏的显示程序设计一、设计目的1熟练掌握C51系统仿真开发系统的应用。2加强单片机的综合运用能力、提高单片机的软件编程和调试能力,为以后的学习和开发工作打下良好基础。3掌握的液晶的工作原理以及应用设计。4掌握小系统开发设计的流程以及设计思路。二、设计方案 实验要求:1)从下到上左到右滚动显示:自己设计的图片 2)能进行正常的模拟量采样值显示(温度、压力、电位) 。3)未按键时菜单要可以停下来 设计思路:由于实验指导书中做过液晶显示和模数转换得实验,根据两个实验的功

2、能实现和流程原理进行设计将程序分成四个模块:主函数模块main.c模数转换模块ADC.c液晶显示模块KS0108.c按键调试模块Test7179.c其中让主函数模块做一些初始化和函数调用工作,模数转换模块主要是将温度,压力,点位的值转化为数字量供液晶显示用,液晶显示模块得到模数转换模块传递过来的数字量显示到液晶面板上,按键调试模块是输入按键显示温度,电压,压力等。程序流程图:1系统主流程图如下开始主函数模块显示模块模数转换模块2主函数流程图开始使能比较器1开中断初始化系统时钟钟初始化定时器0初始化IO端口初始化SPI0使能片内参考电压使能DAC3 显示模块流程图开始初始化LCD滚屏显示江苏大学

3、计算机学院读取数字量并显示调用模数转换得到值显示课程设计题目、班级、姓名健值是否1.2.34 模数转换模块流程图开始读取No和模拟量返回温度返回点位结束返回压力No=2?No=3?No=1? 主要的源程序及注释主函数:#include c8051f020.h #include void Delay1us(unsigned char us) while (us) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); -us; void SYSCLK_Init (void) int i; / delay counter OSCXCN = 0x67; / star

4、t external oscillator with / 18.432MHz crystal for (i=0; i 256; i+) ; / Wait for osc. to start up while (!(OSCXCN & 0x80) ; / Wait for crystal osc. to settle OSCICN = 0x88; / select external oscillator as SYSCLK / source and enable missing clock / detector / OSCICN = 0x07; file:/interal 16MHZ #defin

5、e PRT0CF P0MDOUT #define PRT1CF P1MDOUT #define PRT2CF P2MDOUT void PORT_Init (void) XBR0 = 0x07; / Enable SMBus, SPI0, and UART0 XBR1 = 0x00; XBR2 = 0x44; / Enable crossbar and weak pull-ups EMI0CF = 0x27; EMI0TC = 0x21; P74OUT = 0xFF; P0MDOUT = 0x15; P1MDOUT |= 0x3C; /P1.2-P1.5推挽输出 P1 &= 0xc3; /P1

6、.2-P1.5=0 void SPI0_Init (void) SPI0CFG = 0x07; / data sampled on 1st SCK rising edge / 8-bit data words SPI0CFG|=0xC0; /CKPOL =1; SPI0CN = 0x03; / Master mode; SPI enabled; flags / cleared SPI0CKR = SYSCLK/2/8000000-1; / SPI clock 8; / set Timer0 to overflow in 1ms TL0 = -SYSCLK/1000; TR0 = 1; / ST

7、ART Timer0 IE|= 0x2; void Timer0_ISR (void) interrupt 1 /1ms TH0 = (-SYSCLK/1000) 8; TL0 = -SYSCLK/1000; if (Count1ms) Count1ms-; void Delay1ms(unsigned char T) Count1ms=T; while (Count1ms); void Delay1s(unsigned char T) while (T) Delay1ms(200); Delay1ms(200); Delay1ms(200); Delay1ms(200); Delay1ms(

8、200); T-; char GetKeyValue(void); void init_adc(void); unsigned int GetADCValue(char No); void TestLCD(void); void DispLCD(char *DispBuf,char num); void InitLCD(void); /初始化LCD void ShowWenDu(void); void Test7279(bit LoopFlag) ;void main (void) unsigned int w; char No,i,buf5; No=1; WDTCN = 0xde; WDTC

9、N = 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 = GetADCVa

10、lue(1); for (;) i=GetKeyValue(); if (i=0)&(i=3) No=i; switch(No) case 1: ShowWenDu();break; case 2: ShowDianYa();break; case 3: ShowYaLi();break; case 0:goto loop;break; default: break; w = GetADCValue(No); Delay1ms(30); switch(No) case 1: buf0=(w%10000)/1000; buf1=(w%1000)/100; buf2= ; buf3=(w%100)/10; buf4=(w%10); DispLCD(buf,1); showdu(); break; case 2: buf0=(w%10000)/1000; buf1=(w%1000)/100; buf2= ; buf3=(w%100)/10; buf4=(w%10); DispLCD(buf,2); showfu(); break; case 3: buf0=(w%10000)/1000; buf1=(w%1000)/100; buf2= ; buf3=(w%100)/1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 销售管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号