单片机实习报告
更新时间:2023-03-08 05:35:23 阅读量: 综合文库 文档下载
- 单片机实训报告推荐度:
- 相关推荐
实习报告
题目:银行信息显示系统 学院:电气信息工程学院 专业:电子信息科学与技术 班级:13-1 学号:13 姓名:黄洵 指导教师:刘海波
日期:2015年3月7日~3月19日
一、设计总体方案
1.1设计要求
通过单片机控制显示器的显示银行信息,并且滚动显示。
1.2 设计思路
用单片机控制lcd12864液晶显示和银行的各种信息,并用4×4矩阵键盘控制液晶
显示滚动的方向和信息滚动的快慢。
1.3 设计方案
首先将该系统划分成硬件和软件两大模块:将硬件模块划分成单片机系统,显示系统,键盘系统和其他模块四个部分;再将软件模块划分成矩阵键盘和12864显示驱动两个部分。整个系统即有这几个小系统构成。
二、硬件电路设计
2.1 单片机系统
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
2.2 其他器件介绍
该电路设计思路为先通过变压器来将220V电压将为22V低压,然后再通过桥式整流电路将交流整流为直流,最后通过LM317变压输出所需的5V电压。
2.3 显示系统设计
12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。分为两种,带字库的和不带字库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的LCD提供字库字模,但是只能显示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理图如下所示。
2.4 键盘系统介绍
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
图1为矩阵键盘电路图,行线接P3.4-P3.7,列线接P3.0-P3.3。
三、程序设计
3.1主程序流程图
开始初始化键盘扫描左移右移加速减速lcd显示结束 3.2各部分流程图
矩阵键盘
12864驱动程序
四、实习心得
通过这次实训,使我们能够学以致用,在实践中进一步掌握并巩固我们的单片机理论知识。虽然在实训中遇到了不少难题与困惑,暴露出了不少问题和缺乏实践的弱点,但是在老师与同学们的帮助与指导下,我们最终解决与克服了一个个的困难与困惑,顺利的完成了老师交给的实训任务。
通过几天下来的实训,感觉就是自己的知识实在是太浅了。在课本上学到的知识感觉自己都懂了,但在实际应用中还是无从下手。所以我们不应满足于课本上的知识,只有通过不
断的实践,才能够真正掌握理论知识。虽然只有几天的时光,但还是学了很多的东西,比之于平常的上课更觉得学到更多。所以,这对于我们还是一门很必要的课程。当然,要真正学有所用,我们还要在实践中去不断提高,不断完善。其实刚开始还是不太喜欢实训,也有点害怕的。但过后才觉得只有几天的实训时间还是有点少,毕竟是刚开始对单片机进行实际应用,还是很陌生的。由于时间的仓促,自己的作品也远还没达到完善的地步。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。想借此机会感谢一直以来给我帮助的所有老师和同学。尤其我的指导老师们,他们一直都以一位长辈的风范来给我不厌其烦的指导。在此,特向他们道声谢谢。
五、参考资料
[1]何立民.单片机应用系统设计.北京:北京航空航天大学出版社,2004. [2] 张洪润等.单片机应用设计200例.北京:北京航空航天大学出版社,2006.
[2]刘德营,张志霞,龚丽农等.单片机原理及接口技术.北京:中国水利水电出版社,2006
[3]陈伟人.单片微型计算机原理及其应用.北京.清华大学出版社,1989 3.何立民.单片机应用系统设计.北京:航空航天大学出版社,1995 4.王建校等.51系列单片机及C51程序设计.北京:科学出版社,2002
[4].余锡存,曹国华.单片机微机原理及接口技术[M].西安:西安电子科技出版社,2000: [5]付家才.单片机控制工程实践技术.北京:化学工业出版社,2001 [6]雷晓平等.单片计算机及其应用.成都:电子科技大学出版社,2005.
六、附录(程序清单)
#include
#define uchar unsigned char #define uint unsigned int
/************* 12864LCD引脚定义 *************/ #define LCD_data P0 //数据口
sbit LCD_RS = P3^0; //寄存器选择输入 sbit LCD_RW = P3^2; //液晶读/写控制 sbit LCD_EN = P3^1; //液晶使能控制
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
/*********************************************************/ uchar code DIS1[] = {\ 存款利率 %uchar code DIS2[] = {\ 一年:2.79% %uchar code DIS3[] = {\ 二年:3.37% %uchar code DIS4[] = {\ 五年:5.56% \
uchar code DIS5[] = {\ 请一号到窗台 %uchar code DIS6[] = {\ 办理业务 %uchar code DIS7[] = {\ 请二号到窗台 %uchar code DIS8[] = {\ 请四号到窗台 %uchar code DIS10[] = {\ \
uchar code DIS9[] = {\ 欢迎光临 %uchar index = 0; uchar key,s=0;
uint v;
void matrixkeyscan() ; //矩阵 void delay(int ms) {
while(ms--) {
uchar i; for(i=0;i<150;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } }
void matrixkeyscan() {
uchar temp; P2=0xfe; temp=P2;
temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P2; temp=temp&0xf0; if(temp!=0xf0) { temp=P2; switch(temp) {
case 0xee:key=1,index = 0;break; case 0xde:key=2,index = 0;break; case 0xbe:key=3,index = 0;break; case 0x7e:key=4,index = 0;break; }
while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } }
P2=0xfd; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P2; temp=temp&0xf0; if(temp!=0xf0) { temp=P2; switch(temp) { case 0xed:key=5,index = 0; break; case 0xdd:key=2, index = 0, s++; break; case 0xbd:key=7;index = 0; break; case 0x7d:key=8;index = 0; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } } }
void delay1(int ms) {
while(ms--) {
uchar y; for(y=0;y<100;y++) ; } } bit lcd_busy()
{ bit result;
LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP();
result = (bit)(P0&0x80); LCD_EN = 0; return(result); }
void lcd_wcmd(uchar cmd)
{ while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
void lcd_wdat(uchar dat)
{ while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
void lcd_init() {
lcd_wcmd(0x34); delay(5);
lcd_wcmd(0x30); delay(5);
lcd_wcmd(0x0C); //扩充指令操作 //基本指令操作 //显示开,关光标
delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容 delay(5); }
void lcd_pos(uchar X,uchar Y) { uchar pos; if (X==1) {X=0x80;} else if (X==2) {X=0x90;} else if (X==3) {X=0x88;} else if (X==4) {X=0x98;} pos = X+Y ;
lcd_wcmd(pos); //显示地址 }
void photodisplay(uchar *bmp) {
uchar i,j;
lcd_wcmd(0x34); //写数据时,关闭图形显示
for(i=0;i<32;i++) {
lcd_wcmd(0x80+i); //先写入水平坐标值 lcd_wcmd(0x80); //写入垂直坐标值
for(j=0;j<16;j++) //再写入两个8位元的数据 lcd_wdat(*bmp++); delay1(1); }
for(i=0;i<32;i++) {
lcd_wcmd(0x80+i); lcd_wcmd(0x88);
for(j=0;j<16;j++) lcd_wdat(*bmp++); delay1(1); }
lcd_wcmd(0x36); //写完数据,开图形显示 }
void clr_screen() {
lcd_wcmd(0x34); //扩充指令操作 delay(5);
lcd_wcmd(0x30); //基本指令操作 delay(5);
lcd_wcmd(0x01); //清屏 delay(5); }
void bytecode() {
uchar s;
clr_screen(); lcd_wcmd(0x80); for(s=0;s<16;s++) {
lcd_wdat(0x30+s); }
lcd_wcmd(0x90); for(s=0;s<16;s++) {
lcd_wdat(0x40+s); }
lcd_wcmd(0x88); for(s=0;s<16;s++) {
lcd_wdat(0x50+s); }
lcd_wcmd(0x98); for(s=0;s<16;s++) {
lcd_wdat(0x60+s); } }
void main() {
uchar i,key1; index=40; v=1000; s=0;
//清屏
//设置显示位置为第一行 //设置显示位置为第二行 //设置显示位置为第三行 //设置显示位置为第四行
delay(10); //上电,等待稳定 lcd_init(); //初始化LCD while(1) {
matrixkeyscan() ;
if(s>=2) s=0;
if(key==1) {
lcd_pos(1,0); for(i=0;i<16;i++) {
lcd_wdat(DIS1[i]);
}
lcd_pos(2,0); for(i=0;i<16;i++) {
lcd_wdat(DIS2[i]);
}
lcd_pos(3,0); for(i=0;i<16;i++) {
lcd_wdat(DIS3[i]);
}
lcd_pos(4,0); for(i=0;i<16;i++) {
lcd_wdat(DIS4[i]);
}
delay(10); lcdflag();
clr_screen(); }
else if(key==4) {
v-=220;
//设置显示位置为第一行//设置显示位置为第二行//设置显示位置为第三行//设置显示位置为第四行//清屏 if(v<100) v=220; key=key1; }
else if(key==5) {
v+=220; key=key1; }
else if(key==2){ key1=key;
lcd_pos(1,0); //设置显示位置为第一行
for(i=0;i<16;i++) {
lcd_wdat(DIS10[index+i]);
}
if(s==0) {
lcd_pos(2,0); //设置显示位置为第二行 for(i=16;i>0;i--) {
lcd_wdat(DIS5[44-index-i]);
}
lcd_pos(3,0); //设置显示位置为第三行 for(i=16;i>0;i--) {
lcd_wdat(DIS6[44-index-i]);
} } else {
lcd_pos(2,0); //设置显示位置为第二行
for(i=0;i<16;i++) {
lcd_wdat(DIS5[index+i]);
}
lcd_pos(3,0); //设置显示位置为第三行 for(i=0;i<16;i++) {
lcd_wdat(DIS6[index+i]);
} }
lcd_pos(4,0); //设置显示位置为第四行 for(i=0;i<16;i++) {
lcd_wdat(DIS10[index+i]);
} index+=2; if(index>=28) { index = 0; }
delay(v);
lcdflag();
clr_screen(); //清屏 }
else if(key==3){
lcd_pos(1,0); //设置显示位置为第一行 for(i=0;i<16;i++) {
lcd_wdat(DIS10[index+i]);
}
lcd_pos(2,0); //设置显示位置为第二行 for(i=0;i<16;i++) {
lcd_wdat(DIS7[index+i]);
}
lcd_pos(3,0); //设置显示位置为第三行 for(i=0;i<16;i++) {
lcd_wdat(DIS6[index+i]);
}
lcd_pos(4,0); //设置显示位置为第四行 for(i=0;i<16;i++) {
lcd_wdat(DIS10[index+i]);
} index+=2; if(index>=28) { index = 0; }
delay(500); lcdflag();
clr_screen(); //清屏 }
else {
lcd_pos(1,0); //设置显示位置为第一行 for(i=0;i<16;i++) {
lcd_wdat(DIS10[index+i]); }
lcd_pos(2,0); //设置显示位置为第二行 for(i=0;i<16;i++) {
lcd_wdat(DIS9[index+i]);
}
lcd_pos(3,0); //设置显示位置为第三行 for(i=0;i<16;i++) {
lcd_wdat(DIS10[index+i]);
}
lcd_pos(4,0); //设置显示位置为第四行
for(i=0;i<16;i++) {
lcd_wdat(DIS10[index+i]);
} index+=2; if(index>=28) { index = 0; }
delay(500); lcdflag();
clr_screen(); } } }
//清屏
正在阅读:
单片机实习报告03-08
第15章 C程序上机调试指导及实验05-31
ANSYS梁单元如何提取应力 )09-02
中国真空手套箱行业市场前景分析预测年度报告(目录) - 图文01-01
井下小绞车钢丝绳及连接管理规定05-03
佛山市人民政府办公室印发加快佛山市公共交通发展的十大措施及实04-28
受压构件偏心距增大系数_的计算08-16
河南师范大学函授报名03-08
- 冀教版版五年级科学下册复习资料
- 微生物学复习提纲
- 2013—2014学年小学第二学期教研组工作总结
- 国有土地转让委托服务合同协议范本模板
- 我的固废说明书
- 企业管理诊断报告格式
- 东鼎雅苑施工组织设计
- 谈谈如何做好基层党支部书记工作
- 浮梁县环保局市级文明单位创建工作汇报
- 管理学基础知识
- 大学物理实验报告23 - PN结温度传感器特性1
- 计算机网络实践
- 酒桌上这四种情况下要坐牢,千万别不当回事……
- 国家康居示范工程建设技术要点
- 中国贴布行业市场调查研究报告(目录) - 图文
- 新课标下如何在高中物理教学中培养学生的创新能力初探
- 营养师冬季养生食谱每日一练(7月4日)
- 关注江西2017年第3期药品质量公告
- 建设海绵城市专题习题汇总
- 10万吨年环保净水剂建设项目报告书(2).pdf - 图文
- 实习报告
- 单片机
- S7-400硬冗余连接设置说明
- 一,充分认识农村劳动力转移就业对促进农民增收的重要意义
- 郑州市教育科学课题立项申报书刘盼盼
- 办公礼仪要规范
- 2012届高三地理名校试题分类汇编 第八期 专题09 城市
- ChIP实验精讲(做科研的必看)
- 62团普法办认真做好“六五”普法启动的调研工作
- 2018-2019年高中化学鲁科版《必修二》《第一章 原子结构与元素周
- 江西省竹制品企业名录2018版914家
- 箱梁预制冬季施工技术
- 《人力资源开发与管理》在线作业一满分答案
- 分级阅读教案《野猫的城市》
- Linux查看磁盘分区等命令和相关工具介绍
- C语言程序设计实验指导及习题解答(最新)(1)
- 2016经济法基础第二章练习题
- pep最新版小学英语四级下册unit1单元教案
- 2014年云南省公务员招聘考试面试知识复习
- 中共湖北省委、湖北省人民政府关于党政领导干部经济责任审计的暂
- 2018届高三第二次联考试题(4月) 理科综合(物理部分)含答案
- 以科学发展观为统领着力构建创新型企业——以南阳金冠电气有限公