




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、j i a n g s u u n i v e r s i t ysoc单片机原理与应用课程设计报告 学院名称: 计算机科学与通信工程学院 专业班级: 计 算 机 0802 一、设计题目:液晶点阵显示屏程序设计二、设计要求:1)从下到上滚动显示:“江苏大学计算机学院”然后交替显示:“单片机课程设计”“液晶点阵显示屏程序设计”“作者姓名、班级、学号” 2)能进行正常的模拟量采样值显示(温度、压力、电位) 。 3) 改变字库的内容,显示其它汉字。 4) 改变页地址或列地址,使显示的内容改变位置。 5)其它功能不限,可自由发挥(左、右移,上下卷、显示图片等)。三、液晶显示器指令描述 1、显示开/关设
2、置code: r/w d/i db7 db6 db5 db4 db3 db2 db1 db0llllhhhhhh/l功能:设置屏幕显示开/关。db0=h,开显示;db0=l,关显示。不影响显示ram(dd ram)中的内容。2、设置显示起始行code: r/w d/i db7 db6 db5 db4 db3 db2 db1 db0llhh 行地址(063)功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由z地址计数器控制的,该命令自动将a0-a5位地址送入z地址计数器,起始地址可以是0-63范围内任意一行。z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一
3、。3、设置页地址code: r/w d/i db7 db6 db5 db4 db3 db2 db1 db0llhlhhh页地址(07)功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。页地址就是dd ram 的行地址,页地址存储在x地址计数器中,a2-a0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(rst)可把页地址计数器内容清零。 dd ram地址映像表 y 地址012616263db0 page0db7 x=0db0 page1db7 x=1db0 page6db7 x=7db0 page7db7 x=84、设置列地址code: r/w d/i db
4、7 db6 db5 db4 db3 db2 db1 db0lllh 列地址(063)功能: dd ram 的列地址存储在y地址计数器中,读写数据对列地址有影响,在对dd ram进行读写操作后,y地址自动加一。5、状态检测code: r/w d/i db7 db6 db5 db4 db3 db2 db1 db0hlbflon/offrstllll功能:读忙信号标志位(bf)、复位标志位(rst)以及显示状态位(on/off)。bf=h:内部正在执行操作;bf=l:空闲状态。rst=h:正处于复位初始化状态;rst=l:正常状态。on/off=h:表示显示关闭;on/off=l:表示显示开。6、写
5、显示数据code: r/w d/i db7 db6 db5 db4 db3 db2 db1 db0lhd7d6d5d4d3d2d1d0功能:写数据到dd ram,dd ram是存储图形显示数据的,写指令执行后y地址计数器自动加1。d7-d0位数据为1表示显示,数据为0表示不显示。写数据到dd ram前,要先执行“设置页地址”及“设置列地址”命令。7、读显示数据code: rs r/w db7 db6 db5 db4 db3 db2 db1 db0hhd7d6d5d4d3d2d1d0功能:从dd ram读数据,读指令执行后y地址计数器自动加1。从dd ram读数据前要先执行“设置页地址” 及“设
6、置列地址”命令。四、设计过程液晶显示器分为左右两半面,所以判断lcd控制芯片ks0108是否忙要分别判断左右两面。程序代码:判断液晶显示屏是否忙:void lcd_waitready1(void) /判断lcd控制芯片ks0108是否忙lcd_data=0xff;_nop_();lcd_cs2=selectcs;lcd_rw=1;lcd_rs=0;lcd_e=1;while (lcd_data&0x80);lcd_cs2=!selectcs;void lcd_waitready2(void) /判断lcd控制芯片ks0108是否忙lcd_data=0xff;_nop_();lcd_cs1=se
7、lectcs;lcd_rw=1;lcd_rs=0;lcd_e=1;while (lcd_data&0x80);lcd_cs1=!selectcs;向液晶显示屏发送控制命令:void lcd_writecommand1(char ch) /向lcd控制芯片ks0108发送控制命令lcd_waitready1();lcd_cs2=selectcs;lcd_rw=0;lcd_rs=0;lcd_data=ch;lcd_e=1;lcd_e=0;lcd_cs2=!selectcs;void lcd_writecommand2(char ch)/向lcd控制芯片ks0108发送控制命令lcd_waitrea
8、dy2();lcd_cs1=selectcs;lcd_rw=0;lcd_rs=0;lcd_data=ch;lcd_e=1;lcd_e=0;lcd_cs1=!selectcs;向单片机发送数据指令void lcd_writedata1(char ch)/向lcd控制芯片ks0108发送数据命令lcd_waitready1();lcd_cs2=selectcs;lcd_rw=0;lcd_rs=1;lcd_data=ch;lcd_e=1;lcd_e=0;lcd_cs2=!selectcs;void lcd_writedata2(char ch)/向lcd控制芯片ks0108发送数据命令lcd_wai
9、tready2();lcd_cs1=selectcs;lcd_rw=0;lcd_rs=1;lcd_data=ch;lcd_e=1;lcd_e=0;lcd_cs1=!selectcs;向液晶显示屏显示汉字,为16*16:void lcd_writehz(char x,char y,char *dot) /显示16*16点阵汉字char i;for (i=0;i32;i+)if (x+i%16)64)lcd_writecommand1(0xb8+y+i/16);lcd_writecommand1(0x40+x+i%16);lcd_writedata1(doti);elselcd_writecomm
10、and2(0xb8+y+i/16);lcd_writecommand2(0x40+x-64+i%16);lcd_writedata2(doti);由于数字只有汉字的宽度的一半,所以只显示8*16点阵的数字void lcd_writenum(char x,char y,char *dot) /显示8*16点阵数字char i;for (i=0;i16;i+)if (x+i%8)64)lcd_writecommand1(0xb8+y+i/8);lcd_writecommand1(0x40+x+i%8);lcd_writedata1(doti);elselcd_writecommand2(0xb8+
11、y+i/8);lcd_writecommand2(0x40+x-64+i%8);lcd_writedata2(doti);初始化lcd屏,开显示,分别清左半屏和右半屏void initlcd(void)/初始化lcdchar i,j;lcd_rst=0;delay1ms(1);lcd_rst=1;lcd_writecommand1(0xc0);/设置初始行lcd_writecommand2(0xc0);lcd_writecommand1(0x3f); /开显示lcd_writecommand2(0x3f);for (j=0;j8;j+)/清屏lcd_writecommand1(0xb8+j);
12、/清左半屏lcd_writecommand1(0x40);for (i=0;i64;i+)lcd_writedata1(0x00);lcd_writecommand2(0xb8+j);/清右半屏lcd_writecommand2(0x40);for (i=0;i64;i+)lcd_writedata2(0x00);显示一幅位图,128*64的大小void dispbmp(char *buf)/显示一幅位图 int i,j;for (j=0;j8;j+)/显示位图lcd_writecommand1(0xb8+j);lcd_writecommand1(0x40);for (i=0;i64;i+)l
13、cd_writedata1(buf(j*2)*64+i);lcd_writecommand2(0xb8+j);lcd_writecommand2(0x40);for (i=0;i64;i+)lcd_writedata2(buf(j*2+1)*64+i);显示一幅位图,128*32的大小,用于计算器功能上屏幕一半的说明性图片void dispbmp1(char *buf)/显示一幅位图 int i,j;for (j=0;j4;j+)/显示位图lcd_writecommand1(0xb8+j);lcd_writecommand1(0x40);for (i=0;i64;i+)lcd_writedat
14、a1(buf(j*2)*64+i);lcd_writecommand2(0xb8+j);lcd_writecommand2(0x40);for (i=0;i64;i+)lcd_writedata2(buf(j*2+1)*64+i);设置起始列的位图,参数k为起始列的位置,用于左右移动图像void ridispbmp(int k,char *buf)/设置起始列显示一幅位图 int i,j;for (j=0;j8;j+) lcd_writecommand1(0xb8+j);lcd_writecommand1(0x40);for (i=0;i64;i+)lcd_writedata1(buf(j*2
15、)*64+(i+k)%128);lcd_writecommand2(0xb8+j);lcd_writecommand2(0x40);for (i=0;i64;i+)lcd_writedata2(buf(j*2)*64+(i+k+64)%128);delay1ms(10);主程序执行菜单:菜单项0为显示基本信息,依次显示显示完毕后停留在菜单项上,等待输入菜单。代码: while(temp=0)/显示信息 char i;initlcd();dispbmp(screen);for (i=0;i=0&j=0&j=0&j=0&j=5)&j!=0&j!=-1)temp=j;initlcd();break;
16、delay1s(1);dispbmp(screen8); delay1ms(250);j=test7279();while(j5)|j=-1)j=test7279();/delay1s(1);temp=j;initlcd();break;菜单项1为显示一幅动态图像,原理就是找到一系列连续的静态图像,然后每个很短的时间内连续显示这几幅图像,不停的循环,从外观上就看起来有了一幅动态的图像。代码:while(temp=1)/显示图片dispbmp(screen4); delay1ms(3500);dispbmp(screen5); delay1ms(3500);j=test7279();if(j=0
17、&j=0&j=0&j=0&j=0&j=10&j=0&j3) lcd_writenum(k,5,num14); k+=8; break; i+; if(m=10) a1=c+f; a2=a1/100; lcd_writenum(k,5,numa2); k+=8; a3=a1%100/10; lcd_writenum(k,5,numa3); k+=8; a4=a1%100%10; lcd_writenum(k,5,numa4); k+=8; else if(m=11) a1=c-f; if(a1=0&j=0&j=0&j=5)&j!=4&j!=-1)temp=j;initlcd();break;菜单
18、项5是实现了图片的平移的功能,能实现图片的上下左右以及左上,左下,右上,右下的平移功能,其说明图片为:代码为:while(temp=5)/上下左右移动 unsigned int k=0,i=0;dispbmp(screen10);while(1) j=test7279();if(j=6)i=(i+1)%64;lcd_writecommand1(0xc0+i%64);lcd_writecommand2(0xc0+i%64);continue; else if(j=14)i=(i-1)%64;lcd_writecommand1(0xc0+i%64);lcd_writecommand2(0xc0+i
19、%64);continue; else if(j=9)k=(k+1)%128;ridispbmp(k,screen10);continue;else if(j=11)k=(k-1)%128;ridispbmp(k,screen10);continue;else if(j=12)i=(i+1)%64;lcd_writecommand1(0xc0+i%64);lcd_writecommand2(0xc0+i%64);k=(k+1)%128;ridispbmp(k,screen10);continue;else if(j=13)k=(k+1)%128;ridispbmp(k,screen10);i=
20、(i-1)%64;lcd_writecommand1(0xc0+i%64);lcd_writecommand2(0xc0+i%64);continue; else if(j=7)i=(i+1)%64;lcd_writecommand1(0xc0+i%64);lcd_writecommand2(0xc0+i%64);k=(k-1)%128;ridispbmp(k,screen10);continue; else if(j=15)k=(k-1)%128;ridispbmp(k,screen10);i=(i-1)%64;lcd_writecommand1(0xc0+i%64);lcd_writeco
21、mmand2(0xc0+i%64);continue;else if(j=8|j=10) j=test7279();else if(j!=-1) break; temp=j;initlcd();break;程序中用来判断按键值的函数为test7279(),当其返回为-1时表示没有按键。程序:char getkeyvalue(void)char keyvalue;if (cpt1cn&0x40) return -1;/无键按下 send7279byte(0x15);/发读键盘指令 keyvalue=receive7279byte();noselect7279; /置cs高电平 return ke
22、yvalue; char test7279(void)char keyvalue;delay1ms(25);/等待25ms复位时间 send7279byte(0xa4);/发复位指令 noselect7279; /置cs高电平 keyvalue=getkeyvalue(); return keyvalue;程序中用来的采集模拟量的程序:void read_analog_inputs(void)long temp_long; ad0int = 0; / clear conversion complete indicator ad0busy = 1; / initiate conversion w
23、hile (ad0int = 0); / wait for conversion completeswitch (mux_select)case mux_temp: temp_long = adc0 - 42380/2; temp_long = (temp_long * 200l) / 156;tem=temp_long;amx0sl = mux_volt;/ select ain1 for next readmux_select = mux_volt;break; case mux_volt:temp_long = adc0;volt = 24*temp_long/655;amx0sl =
24、mux_press;/ select on-chip temp sensormux_select = mux_press;break; case mux_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; unsigned int getadcvalue(char no)read_analog_inputs();read_analog_inputs();read_analog_inputs();switch (no)c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 证券从业资格证考试当前趋势试题及答案
- 项目实践中的决策分析框架试题及答案
- 注册会计师考试学员心得体会试题及答案
- 标准车位个人出租合同协议2025
- 微生物检验技师证书考试的试题及答案集中概览
- 2025年证券从业资格证成功路径试题及答案
- 在线学习2025年注册会计师考试的试题及答案
- 优化供应链管理的具体方案计划
- 家园共育的有效策略计划
- 2025年注册会计师考试时间管理技巧试题及答案
- 中学驻校教官管理方案
- Siemens Simcenter:Simcenter声振耦合分析技术教程.Tex.header
- 部编人教版七年级下-17课《紫藤萝瀑布》名师-特级教师-余映潮公开课课件
- 永辉超市存货管理问题及对策分析
- 2024数据中心基础设施运行维护管理规范
- 乙酸说课课件 2023-2024学年高一下学期化学人教版(2019)必修第二册
- 2023年重庆大渡口公安分局招聘辅警考试真题
- 2024年郑州信息科技职业学院单招职业适应性测试题库带答案
- 川剧讲解课件
- 2024年华阳新材料科技集团有限公司校园招聘考试试题及答案1套
- 时间的远方女声三部合唱谱
评论
0/150
提交评论