单片机实习报告Word格式文档下载.docx
《单片机实习报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机实习报告Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
![单片机实习报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/7/8e5faf40-fa27-4b82-a5b8-58083e0a9319/8e5faf40-fa27-4b82-a5b8-58083e0a93191.gif)
王超,龚馨,李帅鹏,张宏,杨仁刚
题目名称
音乐灯设计
题目内容
音符对应简码数字1-8,事先编写一组音符,然后每次取出一个音符,根据音符数值对应亮灯,例如:
音符为1亮灯L1,音符为2亮灯L1~L2,音符为3,亮灯L1~L3,依此类推。
(每次亮灯顺序为L1先亮,然后L2,然后L3……间隔时间应低于0.2秒,每个音符的灯组亮完后应全部熄灭)
设备
电脑一台,led灯八只,导线8条,仿真器一个
设计步骤
1、先根据题目要求的内容画出电路连接图
2、根据题目要求构思出程序流程并画出程序流程图
3、根据程序流程图编写程序并编译
4、按照电路连接图将电路连接出来
5、使用仿真器连入电路并运行
6、观察运行效果、记录出现问题
7、分析问题、修改程序,再次调试以优化出最佳程序
硬件设计图
和
流程图
代码
及
设计记录
#include<
reg51.h>
unsignedchartable[]={0x03,0x05,0x01,0x07,0x04,0x03,0x08,0x02,0x06,0x04};
voiddelay()
{unsignedchari,j;
for(i=0;
i<
200;
i++)
for(j=0;
j<
100;
j++);
}
voidmain()
{
unsignedcharw=0x00;
while
(1)
{
P1=0xff;
delay();
P1=0xfe;
if(table[w]==0x01)break;
P1=0xfc;
if(table[w]==0x02)break;
P1=0xf8;
if(table[w]==0x03)break;
P1=0xf0;
if(table[w]==0x04)break;
P1=0xe0;
if(table[w]==0x05)break;
P1=0xc0;
if(table[w]==0x06)break;
P1=0x80;
if(table[w]==0x07)break;
P1=0x00;
if(table[w]==0x08)break;
w++;
if(w==0x0a)
w=0X00;
现象及问题
分析
每次只能显示前几个音符效果,检查发现为数组部分编译时出现错误,经多次试验后发现数组内使用16进制数时错误消失
延时略长,与真实效果相差,通过修改延时函数的外层循环次数改正
设计总结
本题目设计中,原本是的设计思路是使用2个数组,用其中一个数组去调用另一个显示,后来在程序编写过程中发现无法实现,随即重新改为现在所用方式
本次设计中遇到的比较麻烦的问题就是数组的调用,虽然在百般尝试之下让实验做成功了,但由于编译过程让程序运行出错还是让人难以解决
关于单片机的
收获体会
在编写程序时总会有一些问题出现,但这些都能找到解决,但是调试时出现的问题却让人有些难以解决,有时候预期效果并不好实现
问题及建议
仿真软件在编译程序时总会出现一些问题,难以解决
8x8led点阵显示
效果要求:
在一个8×
8的LED点阵区域,显示符号“◆”,画面无明显闪烁为宜。
8X8点阵显示器,导线16根,电脑,51仿真器
unsignedchari,j;
voiddelay(j)
j;
i++);
P1=0x82;
P3=0xef;
delay(200);
//显示第1,7排效果
P1=0x00;
P3=0xff;
delay(10);
//清屏
P1=0x44;
P3=0xc7;
//显示第2、6排效果
P1=0x28;
P3=0x83;
显示第3、5排效果
P3=0xff;
//清屏
P1=0x10;
P3=0x01;
//显示第4排效果
呈无规则显示效果,检查为点阵字模计算时未将字模软件显示方式设置好,重新设置后计算后正常
有微弱闪烁现象,初始延时设计刚好使闪烁频率达到24hz,太过于理想化,将延时改短后闪烁消失
由于之前做过16x16点阵显示的项目,初始设计时设计为使用数组,再调用显示。
编写程序时发现要求显示图片较为简单,使用数组再调用增加了程序结构,显得较为复杂,于是改为相同内容排同时显示,再轮流显示不同内容排
在本次试验中再次熟悉了点阵显示器的使用方法及原理,
对kile的使用还不是很熟练,关于单片机的c语言了解与积累不够,编写程序时显得有些生疏
倒计时设计
设计一个倒计时装置,倒计时时间默认99秒,使用LED灯显示倒计时效果,99秒显示10011001,98秒显示10011000,依此类推。
计时归0的时候,L1~L8同时闪烁3轮,然后重新开始倒计时。
电脑,led灯8只,导线8根,51仿真器1台
inttable[]={0x6f,0x7f,0x8f,0x9f,0xaf,0xbf,0xcf,0xdf,0xef,0xff};
inttble[]={0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};
unsignedchart01s,t10s,t0ms,t2000ms;
unsignedchari;
voiddelay5ms()
{TH1=0x3c;
TL1=0xb0;
TR1=1;
while(!
TF1);
TF1=0;
voiddelay1s()
{for(i=0;
delay5ms();
voidmain()
{t01s=0x00,t10s=0x00,
t2000ms=0xa0;
t0ms=0x01;
TMOD=0X01;
while
(1)
{delay5ms();
t2000ms--;
if(t2000ms==0x00)
{t2000ms=0xa0;
t01s++;
if(t01s==0x0a)
{t01s=0x00;
t10s++;
if(t01s==0x0a,t10s==0x0a)
{P1=0x00;
delay1s();
P1=0x00;
t01s=0x00,t10s=0x00,
t2000ms=0x64;
}if(t10s==0x0a)
{t10s=0x00;
}
}}
t0ms++;
if(t0ms==0x03)
{t0ms=0x01;
P1=0xff;
switch(t0ms)
{case0x01:
{P1=tble[t01s];
}break;
case0x02:
{P1=table[t10s];
倒计时实际时间大于预期时间,发现为计算延时参数时未计算程序执行时所需时间,导致延时效果与预期效果不同,对照减少延时时间后正常
本次设计延用了以前简易秒表设计的延时部分设计理念,由于是倒计时,初始计划为修改计数部分,由原来的加法计数改为减法计数,后发现运行无法显示0效果,改回加法计数,反向显示来实现题目要求效果
在设计程序时并非内部所有程序都与设计要求相同,只要组合最终效果能够达到题目各项要求即可
实际效果总是达不到预期效果
记分牌设计
用两组LED灯组表示计数效果,每组4灯,表示范围0~15。
开关A控制A组灯,每开关一次,A组计数值加1;
开关B控制B组灯,每开关一次,B组计数值加1。
当其中任何一组灯组计数值达到15时,该组4个LED全亮并开始闪烁,另一组全灭,持续一段时间后复位,重新开始计数。
电脑,led灯8只,导线10根,开关2个,51仿真器
unsignedinti=0,l=0,w,y;
charcodetable1[]=
{0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0};
charcodetable2[]=
{0xff,0xef,0xdf,0xcf,0xbf,0xaf,0x9f,0x8f,0x7f,0x6f,0x5f,0x4f,0x3f,0x2f,0x1f,0x0f};
{
unsignedcharj,k;
for(k=0;
k<
k++)
for(j=0;
255;
voiddelay1()
unsignedintt;
for(t=0;
t<
t++);
voidint_0()interrupt0
{i++;
if(i==15){for(w=0;
w<
3;
w++)
{P1=0xf0;
}i=0;
l=0;
P1=table1[i];
voidint_2()interrupt2
{l++;
if(l==15){for(y=0;
y<
y++)
{P1=0x0f;
P1=0x0f;
P1=table2[l];
voidmain(){
EA=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
TMOD=0x01;
while
(1){
delay1();
P1=table2[l];
灯光效果有闪烁情况,由于采用频闪方式显示,且初始设计延时出现误差,显示效果不稳定,将基本延时改小后正常。
拨动开关时,输出效果不稳定,容易触发多次效果,检查后发现为硬件自身接触不稳定,改为单脉冲开关后稍有改善
本题设计最大的问题在于如何使开关能够完美达到题目要求的效果,普通的读开关不能做到每开关一次计数加一的效果,于是采用了下降沿方式触发的中断来实现,每一次中断计数加一
在本次设计中使用了中断技术,让我们对中断的原理,及使用都有了更加深刻的理解
试验箱上有些原件并不标准,容易产生一些误差
《单片机课程设计》日志
自动化工程系专业:
电气自动化年(班)级:
1331姓名:
罗欢学号:
周次
设计日期
设计内容
个人设计情况记录
20
2015-1-12
音乐灯程序调试修改
数组调用出现错误,经多次试验后发现数组内使用16进制数时错误消失
2015-1-13
8x8点阵显示程序调试修改
点阵字模计算时将显示方式弄错了,呈无规则显示效果,重新计算后正常
初始延时设计刚好使闪烁频率达到24hz,有微弱闪烁现象,将延时改短后闪烁消失
2014-1-14
倒计时程序调试修改
原延时函数延时超过正常计时,发现为未计算程序执行时所需时间,导致延时效果与预期效果不同,对照减少延时时间后正常
2014-1-15
记分牌调试修改
由于有两组灯光信号需要同时显示,故采用频闪方式显示,初始设计延时出现误差,显示效果不稳定,将原延时改小后正常。
初始设计为使用拨键开关触发中断以达到计时效果,调试时发现拨键开关拨动时输出不稳定,容易触发多次效果,后改为单脉冲开关
2014-1-16
独立拓展点阵程序,使用16x16点阵显示器显示“单片机”
未发现驱动端P1与pa的端口顺序是相反的,显示时下半部分倒过来了