嵌入式实验报告(电子表流水灯设计)
更新时间:2023-05-17 12:38:01 阅读量: 实用文档 文档下载
关于单片机的嵌入式设计报告
山 西 大 学
计算机组装与维护论文
题 目 电子表设计 学 院 计算机与信息技术学院 专 业 软件工程 指导教师 李月香 学生姓名 曹艳艳 学 号 2008242001 日 期 2010-12-10
关于单片机的嵌入式设计报告
电子表设计
内容提要: LCD 电视是 Liquid Crystal Display 的简称,是液晶显示屏的全称:它包括了TFT,UFB,TFD,STN等类型的液晶显示屏。
LCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
1888年奥地利植物学家发现了一种白浊有粘性的液体,后来,德国物理学家发现了这种白浊物质具有多种弯曲性质,认为这种物质是流动性结晶的一种,由此而取名为Liquid Crystal即液晶LCD显示器是智能仪器仪表中最常用的显示器件。近年来一些单片机内部也集成了LCD控制级驱动电路,更方便了单片机在嵌入式系统中的应用,特别是微功耗智能化仪器仪表上的应用。 关键词: LCD 工作原理 应用 发展 参考文献:
1.《嵌入式系统应用基础》。 2. 百度百科。
一、实验目的
1.熟练掌握单片机控制系统硬件电路的设计、测试;单片机监控程序的编写、调试及运行。 2.学习使用单片机设计出简单的应用系统。
二、实验设备
1. PC计算机;
2. NEC全系列微控制器(单片机)开发工具EM/EZ-1系统; 3. 实验系统。
三、实验内容及要求
1.设计方案
本次使用主要使用了LCD,做了一个电子表。
主函数显示电子表。
P3.0按键中断用来测温度并在LCD上显示。 P4.0按键中断用来进入更改时间的中断。 P4.1按键中断用来进入设置闹钟的中断。
P4.2用来在进入更改时间中断和设置闹钟中断时进行小时的设置。 P4.3用来在进入更改时间中断和设置闹钟中断时进行分钟的十位设置。
关于单片机的嵌入式设计报告
P4.4用来在进入更改时间中断和设置闹钟中断时进行分钟的个位设置。 P4.5是一个流水灯和蜂鸣器中断。
2.结构图
3.实现的功能
1.实现了利用LCD动态的显示秒数的走动。
2.实现了利用按键中断实现的温度计,更改时间和设置闹钟。 3.实现了通过利用LED灯做成一个流水灯。
4.实现了中断还原,即在进入中断时电子表上的值清空,显示当前中断的内容,当中断结束时LCD还原为进入中断前的电子表时间。
3.电路原理
关于单片机的嵌入式设计报告
4.实验步骤
1. 了解清楚LCD的工作原理。 2. 编写电子表显示程序。
3. 了解按键中断原理,并进行设置中断。
4. 了解AD转换原理,编写测温度程序,形成温度计。 5. 了解按键的过程,编写设置闹钟和更改时间程序。 6. 了解LED灯工作原理,编写流水灯程序。
7. 把所有的功能加入按键中断里,并了解每个中断的优先级(P3.0优先于P4)。 8. 编译程序,编译成功后,连接单片机调试,观察单片机运作。
5.程序流程图
关于单片机的嵌入式设计报告
6.实验源代码
#pragma sfr #pragma interrupt INTKR KEY_duan #pragma interrupt INTP5 yellow_key RB1 #pragma DI #pragma EI
关于单片机的嵌入式设计报告
#pragma access
#define KEY1 0xfe #define KEY2 0xfd #define KEY6 0xf9
unsigned int LCD_buff[10]={0x070d,0x0600,0x030e,0x070a,0x0603,0x050b,0x050f,0x0701,0x070f,0x070b}; float
tem_num[80][2]={60,1829.8,59,1891.4,58,1955.4,57,2022.0,56,2091.3,55,2163.4,54,2238.8,53,2317.4,52,2399.2,51,2484.5,50,2573.3,49,2665.2,48,2761.1,47,2861.0,46,2965.1,45,3073.8,44,3187.2,43,3305.6,42,3429.2,41,3558.2,40,3692.9,39,3833.2,38,3979.8,37,4132.9,36,4293.1,35,4460.5,34,4635.4,33,4818.4,32,5009.9,31,5210.3,30,5420.2,29,5639.4,28,5869.1,27,6109.8,26,6362.0,25,6626.4,24,6903.4,23,7193.9,22,7498.8,21,7818.8,20,8154.8,19,8506.9,18,8876.9,17,9265.6,16,9674.3,15,10104,14,10553,13,11025,1211521,11,12044,10,12594,9,13173,8,13782,7,14424,6,15102,5,15816,4,16565,3,17355,2,18189,1,19070,0,20000,-1,20980,-2,22025,-3,23109,-4,24267,-5,25492,-6,26777,-7,28137,-8,29577,-9,31103,-10,32720,-11,34434,-12,36252,-13,38181,-14,40229,-15,42404,-16,44696,-17,47131,-18,49719,-19,52472}; unsigned int AD[5]; unsigned int tem[5]; unsigned int dig_buff[2]; unsigned int addr; int Clock[4]={0,0,0,0}; int Chang_clock[4]={0,1,5,0};
void delay_long() { int i,j;
for(i=0;i<=200;i++) for(j=0;j<200;j++); }
void delay(){ int i,j;
for(i=0;i<=200;i++) for(j=0;j<10;j++);
关于单片机的嵌入式设计报告
void buz() { int Buzi;
for(Buzi=5;Buzi>0;Buzi--) CKS=0XE0; delay();BZOE=0;
CKS=0x80; delay();BZOE=0; CKS=0xA0; delay();BZOE=0;
CKS=0x80; delay();BZOE=0; CKS=0XC0; delay();BZOE=0; CKS=0xA0; delay();BZOE=0; CKS=0XE0; delay();BZOE=0; CKS=0XC0; delay();BZOE=0; } void led(){ int i; P3.4=1;
for(i=0;i<=5;i++){
P15.1=1; P15.3=1;delay_long();P15.1=0;P15.3=0; P13 = 0x05; delay_long(); P13.3=1; P14.1=1;delay_long();P13.3=0;P14.1=0; P14.2=1; P15.0=1;delay_long();P14.2=0;P15.0=0; }
for(i=0;i<=3;i++) {
P13.0 = 0x01; delay_long();P13 = 0x00;
P13.1 = 0x01; delay_long();P13 = 0x00; P13.2 = 0x01; delay_long();P13 = 0x00; P13.3 = 0x01; delay_long(); P13 = 0x0; P14.0 = 0x01; delay_long();P14 = 0x0;
关于单片机的嵌入式设计报告
} }
delay_long();P14 = 0x0; P14.3 = 0x01; delay_long(); P14 = 0x0; P15.0 = 0x01; delay_long();P15 = 0x0;
P15.1 = 0x01; delay_long();P15 = 0x0; P15.2 = 0x01;delay_long(); P15 = 0x0;P15.3 = 0x01;delay_long();P15 = 0x0;
//温度计:在按键中断中,当按键按下,LCD上显示温度度数 ,出中断后,LCD恢复中断前电 子表运行到的值,接着运行。 void A_D(){ int i,m,k; int buffer[6]; int j=0; int n=0; float ai,AD_RI; ADCE=1; PM2.5=1; ADPC0=0x00; ADM=0x08; ADCS=1; addr=0xFA44; for(k=0;k<6;k++){ buffer[k]=peekw(addr); addr=addr+2; }
for(addr=0xFA44;addr<0xFA50;addr++){ pokew(addr,0x0000); addr++; }
关于单片机的嵌入式设计报告
for(m=0;m<5;m++){ ADS=0x05; delay_long(); AD[m]=ADCR;
ai=(AD[m]/64-0.5)*5/1024; AD_RI=4*(5.0/ai-1);
while(AD_RI>tem_num[80][1]&&n<80){n++;} if(n==0||n==80)tem[m]=0xFFFF; //tem[m]=(int)tem_num[n][0]; tem[m]=AD[m]; for(i=3;tem[m]!=0;i--){ dig_buff[i]=tem[m]%10; tem[m]=tem[m]/10; }
pokeb(0xFA52,0x08); addr=0xFA4A; while(j<5){
pokew(addr,LCD_buff[dig_buff[j]]); addr=addr+2; j++; }
delay_long();delay_long(); } ADCS=0; ADCE=0; addr=0xFA44; for(k=0;k<6;k++){ pokew(addr,buffer[k]);
关于单片机的嵌入式设计报告
addr=addr+2; }
pokeb(0xFA52,0x00); } void red() {
PM3.3=0;P3.3=0;P13.0=1;P13.3=1;P14.2=1;P15.1=1;CKS=0x80; }
void yellow() {
PM3.3=0;P3.3=0;P13.1=1;P14.0=1;
P14.3=1;P15.2=1;CKS=0xA0;delay_long();
delay_long(); BZOE=0;P13.0=0;P13.3=0;P14.2=0;P15.1=0;
BZOE=0;P13.1=0;P14.0=0;P14.3=0;P15.2=0; }
void green() {
PM3.3=0;P3.3=0;P13.2=1;P14.1=1; P15.0=1;P15.3=1;CKS=0xC0;delay_long(); BZOE=0;P13.2=0;P14.1=0;P15.0=0;P15.3=0; }
void middle() {
PM3.3=0;PM3.4=0;
P3.3=0;P3.4=0;P3.4=1;CKS=0XE0; delay_long();BZOE=0;P3.4=0; }
关于单片机的嵌入式设计报告
void a() {
P3=0x00;P13.0=1;P13.2=1;P13.1=1;delay_long(); } void b() {
P13=0x00;P14=0x00;P15=0x00; P13.3=1;P14.0=1;P14.1=1;delay_long(); } void c() {
P13=0x00;P14=0x00;P15=0x00; P14.2=1;P14.3=1;P15.0=1;delay_long(); } void d() {
P13=0x00;P14=0x00;P15=0x00; P15.3=1;P15.2=1;P15.1=1;delay_long(); } void all() {
P13=0x00;P14=0x00;P15=0x00; P13.0=1;P13.2=1;P13.1=1;delay_long(); P13.3=1;P14.0=1;P14.1=1;delay_long(); P14.2=1;P14.3=1;P15.0=1;delay_long(); P15.3=1;P15.2=1;P15.1=1; delay_long();P3.4=1;delay_long(); }
关于单片机的嵌入式设计报告
//用来设置改变时间的值,中断1键进入设置,分别按3,4,5键各几下LCD上显示相应的值,把这个值保存到相应的数组中。 void ChangTime() {
int h1,h2,m1,m2; int addr;
h1=0;h2=0;m1=0;m2=0; addr=0xFA44;
for(addr=0xFA44;addr<0xFA50;addr++){ pokew(addr,0x0000); addr++; }
while(P4.1!=0){ if(P4.2==0) {
P13.0=1;
h1=h1+1;delay();P13.0=0; if(h1>=24){h1=0;h2=0;} else {h2=h1%10; h1=h1/10;} Chang_clock[0]=h1; Chang_clock[1]=h2;
pokew(0xFA44,LCD_buff[h1]); pokew(0xFA46,LCD_buff[h2]); }
if(P4.3==0) {
关于单片机的嵌入式设计报告
P13.1=1;
m1=m1+1;delay();P13.1=0; if(m1>=6){m1=0;} Chang_clock[2]=m1;
pokew(0xFA48,LCD_buff[m1]); }
if(P4.4==0) {
P13.2=1;
m1=m1+1;delay();P13.2=0; if(m2>=10){m2=0;} Chang_clock[3]=m2;
pokew(0xFA4A,LCD_buff[m2]); } } }
//设置闹钟,用2键按键中断进入,用3,4,5,键设置时分,分别按3,4,5键各几下LCD上显示相应的值,把这个值保存到相应的数组中。 void Set_bell() {
int h1,h2,m1,m2; int buffer[6];int k=0; int addr;
h1=0;h2=0;m1=0;m2=0; addr=0xFA44; for(k=0;k<6;k++){ buffer[k]=peekw(addr); addr=addr+2;
关于单片机的嵌入式设计报告
}
for(addr=0xFA44;addr<0xFA50;addr++){ pokew(addr,0x0000); addr++; }
while(P4.0!=0){ if(P4.2==0) {
P13.0=1;
h1=h1+1;delay();P13.0=0; if(h1>=24){h1=0;h2=0;} else {h2=h1%10; h1=h1/10;} Clock[0]=h1; Clock[1]=h2;
pokew(0xFA44,LCD_buff[h1]); pokew(0xFA46,LCD_buff[h2]); }
if(P4.3==0) {
P13.1=1;
m1=m1+1;delay();P13.1=0; if(m1>=6){m1=0;} Clock[2]=m1;
pokew(0xFA48,LCD_buff[m1]); }
if(P4.4==0) {
P13.2=1;
关于单片机的嵌入式设计报告
m1=m1+1;delay();P13.2=0; if(m2>=10){m2=0;} Clock[3]=m2;
pokew(0xFA4A,LCD_buff[m2]); } } addr=0xFA44; for(k=0;k<6;k++){ pokew(addr,buffer[k]); addr=addr+2; } }
//中断函数 void KEY_duan() { DI(); switch(P4) {
case KEY1:{P1.4=1;ChangTime();P1.4=0;};break;//更改时间的按键中断 case KEY2:{P1.7=1;Set_bell();P1.7=0;}break;//闹钟的按键中断
case KEY6:{led();buz();a(); b();c();d();all();}break;//流水灯及蜂鸣器的中断 default: ;break; } }
//P3.0按键的中断函数 void yellow_key() { DI(); P1.4=1;
关于单片机的嵌入式设计报告
A_D(); P1.4=0; }
//电子表的程序,包括实时设置闹钟和更改时间 void Elec_watch() {
int g,h,m,n,j,i; int hour=0; while(1){
if(hour>=24)hour=0; if(Chang_clock[0]!=0){ g=Chang_clock[0]; Chang_clock[0]=0; }
else g=hour/10; while(g<=2){
pokew(0xFA44,LCD_buff[g]); if(Chang_clock[1]!=0){ h=Chang_clock[1]; Chang_clock[1]=0; }
else h=hour%10; while(h<=9){
pokew(0xFA46,LCD_buff[h]); if(Chang_clock[2]!=0){ m=Chang_clock[2]; Chang_clock[2]=0; }
关于单片机的嵌入式设计报告
else m=0;//yellow(); while(m<6){
pokew(0xFA48,LCD_buff[m]); if(Chang_clock[3]!=0){ n=Chang_clock[3]; Chang_clock[3]=0; } else n=0; while(n<=9){
pokew(0xFA4A,LCD_buff[n]); j=0;
if(g==Clock[0]&&h==Clock[1]&&m==Clock[2]&&n==Clock[3]){ while(P4.3!=0){ red();
if(P4.3==0)break; middle(); } }
while(j<6){
pokew(0xFA4C,LCD_buff[j]); for(i=0;i<10;i++){
if(Chang_clock[0]!=0||Chang_clock[1]!=0||Chang_clock[2]!=0||Chang_clock[3]!=0)break; pokew(0xFA4E,LCD_buff[i]); pokeb(0xFA53,0x01); delay_long(); pokeb(0xFA53,0x00);
delay_long();}
if(Chang_clock[0]!=0||Chang_clock[1]!=0||Chang_clock[2]!=0||Chang_clock[3]!=0)break;
j++;
关于单片机的嵌入式设计报告
}
if(Chang_clock[0]!=0||Chang_clock[1]!=0||Chang_clock[2]!=0||Chang_clock[3]!=0)break; n++; }
if(Chang_clock[0]!=0||Chang_clock[1]!=0||Chang_clock[2]!=0||Chang_clock[3]!=0)break;
m++; }
if(Chang_clock[0]!=0||Chang_clock[1]!=0||Chang_clock[2]!=0||Chang_clock[3]!=0)break; hour++; }
if(Chang_clock[0]!=0||Chang_clock[1]!=0||Chang_clock[2]!=0||Chang_clock[3]!=0)break; } } } void main() {
//初始化中断端口 PM3.0=1; PU3.0=1; EGP.5=1; PMK5=0; PM1.4=0; P1.4=0; PM1.7=0; P1.7=0; //初始化 PM13=0x00; PM14=0x00; PM15=0x00;
关于单片机的嵌入式设计报告
P13=0x00; P14=0x00; P15=0x00; //初始化按键端口 PM4=0xff;
KRM=0x03; PU4=0xff; KRMK=0; //初始化LCD PF2=0x00; PFALL=0x0f; LCDC0=0x34; LCDMD=0x30; LCDM=0xc0; EI();
Elec_watch();//调用电子表函数 }
7.实验结果及分析
电子表显示 时:分 秒 ,秒每秒加一到60时分加一,秒变为0,按黄色键LCD上显示 XX
度,按KEY1进入更改时间中断,分别按P4.2,P4.3,P4.4各几下LCD上显示相应的数字,再按KEY1退出中断,同时电子表显示刚才更改为的时间。按KEY2进入设置闹钟中断,分别按P4.2,P4.3,P4.4各几下LCD上显示相应的数字,再按KEY2退出中断,同时电子表继续接着中断前的时间运行,当到达闹钟所设时间,会有声音和灯的提醒,按P4.3退出提醒,电子表继续,最好按KEY6进入流水灯中断,单片机上的LED灯流动闪烁,流水灯完成后自动返回电子表。
8.实验中遇到的问题及解决方法
1.由于在AD转换连接的电路不同导致公式算出的电阻偏高,在温度-电阻表中无对应的值,导致显示的温度不准确。
关于单片机的嵌入式设计报告
解决方法:通过试验,自己总结出一套计算电阻的公式代入,得到准确的电阻值,在温度-电阻表中找到相对应的值,显示出较准确的温度。
2. 在做更改时间和设置闹钟时,在获取设置值时,出现按得次数与得到的值不符。
解决方法:通过单步调试,发现在让按键后自加的时候总是多加一,导致错误,更改了自加的位置问题解决。
8.总结
通过这次的做实验,了解到了关于单片机的很多知识,对嵌入式有了深一步的理解,并手动做了一个嵌入式,感觉提高很高,我个人比较喜欢LCD,感觉很有趣,试验中也遇到了许多问题,并一一解决了,提高了分析能了和调试能力,感觉有很大的提高,如果可能的话在下边会多多接触这一方面的知识,做一些自己的东西。
正在阅读:
嵌入式实验报告(电子表流水灯设计)05-17
社区民主生活会批评与自我批评02-15
后桥维护05-06
某供电所施工组织设计03-29
珠宝鉴赏课后习题答案01-28
记南安市江滨南路一期工程开工新闻通稿06-14
评标专家题库(300道)05-19
二年级暑假数学假期作业03-17
第二篇 热学11-18
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 流水灯
- 电子表
- 嵌入式
- 实验
- 报告
- 设计
- 学生会文艺部工作总结
- Win 7下新建硬盘分区合并硬盘分区操作过程详解
- 新媒体行业投资分析报告
- 国美PK苏宁,谁的路走对了?
- 外贸英语口语900句文本
- AutoCAD2005绘图基础
- 2014年全国高考理科数学试题分类汇编4 函数
- 初中英语教学典型案例分析
- 2016年浙江工商大学金融学院435保险专业基础之宏观经济学考研冲刺密押卷及答案
- 山东省济宁市11-12学年高二上学期期末模块考试题数学文
- 六年级生命与健康常识全册教案、计划、总结、试卷
- 运动生理学试题库
- Excel关于账务处理
- 牛津小学英语6a Unit5过关 练习听力
- 高二就业班数学期中试卷
- 当代大学生心理问题现状与解决对策
- 第五章 第2节 止吐药-制药
- 11.7 斯托克斯公式
- 潞安矿区煤炭分选工艺浅析
- 牛津高中英语模块六Unit 2 要点