单片机入门应该注意的问题.docx
- 文档编号:23480273
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:11
- 大小:32.33KB
单片机入门应该注意的问题.docx
《单片机入门应该注意的问题.docx》由会员分享,可在线阅读,更多相关《单片机入门应该注意的问题.docx(11页珍藏版)》请在冰豆网上搜索。
单片机入门应该注意的问题
单
片
机
课
程
设
计
院系:
机电工程学院10电信一班
姓名:
张毅伟
学号:
1004101029
指导教师:
王玲
目录
3…………………………………………………………………………课程设计题目与选材背景
4…………………………………………………………………………具体实施
5…………………………………………………………………………protues
6-7…………………………………………………………………………试验接线与程序
8…………………………………………………………………………实验过程中遇到的困难
9……………………………………………………………………………感悟
课程设计题目与选材背景
题目:
改善马路红绿灯状况
背景:
最近发现驾校考试非常不容易过,更何况对于一些红绿色盲的人来说这辈子基本不用开车了,原因很简单他们很难分辨出红绿色,我国男性人口约4.71+-0.074%.女性0.67+-0.036%,有红绿色盲,也就是说有相当一部分人无法自己驾驶,在者,由于汽车数量越来越多我国每年出现交通事故的人也越来越多,很多人死于无意识中。
我想倘若过马路有声音提示的话这种事故应该会遏制,那么该怎么样减少事故呢?
我个人经过长时间观察发现有的人过马路玩手机,有的人私下讲话不能集中精力过马路,我想如果我们在绿灯亮时可以提示声音那么大家都可以用耳朵听了,我想过马路效果更好,没有提示声音意味着不能过,那么大家就不用费神过多关注红绿灯,对于一些盲人来讲过马路更容易,当然了如果有提示声音我想红绿色盲症的人也可以学习驾驶了。
具体实施
我们可以设计一个和马路红绿灯时间上一样的程序,只是在绿灯亮的同时用声音提醒,红灯亮时不提醒,有人会问为什么红灯不提醒呢,那样效果不更好吗?
我认为这是不必要的也是不能做的,因为我们过马路南北方向东西方向都有灯灭亮,如果同时提醒势必造成声音混乱,画蛇添足,得不偿失。
我们可以将这个程序看成是两个子程序的合成,第一个是红绿灯按照原来亮灭的方式,第二个是加了蜂鸣器的程序,也就是在绿灯点亮瞬间我们可以用一个声音提请,就像我们坐公交车一样快到终点站时会提醒大家注意这样不至于坐过站,同理我们可以通过提醒一些喜欢玩手机的人,注意路灯,这样既可以避免错过绿灯也可以有效降低车祸率,对于一些红绿色盲严重的人来说这是十分有意义的。
实验接线与程序
接线:
P00到P02接J38的1到3,P03到P05接J38的4到6,P06到P07接J38的7、8
P20接J38的9端,P21到P23到J38的10到12,用P1.2接J9的5端,J8的第一端与P2.7相连。
其中P00到P23的接线口是控制红绿灯的P1.2是控制蜂鸣器的,P2.7键盘扫描防止紧急情况。
程序:
##include
#defineuintunsignedint
uinta;
sbitled1=P0^0;
sbitled2=P0^1;
sbitled3=P0^2;
sbitled4=P0^3;
sbitled5=P0^4;
sbitled6=P0^5;
sbitled7=P0^6;
sbitled8=P0^7;
sbitled9=P2^0;
sbitled10=P2^1;
sbitled11=P2^2;
sbitled12=P2^3;
sbitbeer=P1^2;
sbitkey1=P3^0;
sbitkey2=P3^1;
sbitkey3=P3^2;
sbitkey4=P3^3;
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidkeyscan()//扫描键盘
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
led1=0;
led4=0;
led7=0;
led10=0;
led2=1;
led3=1;
led5=1;
led6=1;
led8=1;
led9=1;
led11=1;
led12=1;
}
}
}
voidmain()
{
while(key1==0)
{
keyscan();
}
while(key1==1)
{
led1=0;//东红灯亮
led7=0;//西红灯亮
led6=0;//南绿灯亮
led12=0;//北绿灯亮
a=0;
while(a<25000&&(key1==1))//蜂鸣器发声
{
beer=0;
delayms
(1);
beer=1;
delayms
(1);
a=a+2;
}
led6=1;//南绿灯灭
led12=1;//北绿灯灭
led5=0;//南黄灯亮
led11=0;//北黄灯亮
delayms(500);
while(key1==0)
{
keyscan();
}
led5=1;
led11=1;
delayms(500);
while(key1==0)
{
keyscan();
}
led5=0;
led11=0;
delayms(500);
while(key1==0)
{
keyscan();
}
led5=1;
led11=1;
delayms(500);
while(key1==0)
{
keyscan();
}
led5=0;
led11=0;
delayms(500);
while(key1==0)
{
keyscan();
}
led5=1;
led11=1;
while(key1==0)
{
keyscan();
}
led1=1;//东红灯灭
led7=1;//西红灯灭
led3=0;//东绿灯亮
led9=0;//西绿灯亮
led4=0;//南红灯亮
led10=0;//北红灯亮
a=0;
while(a<25000&&(key1==1))
{
beer=0;
delayms
(1);
beer=1;
delayms
(1);
a=a+2;
}
led3=1;//东绿灯亮
led9=1;//西绿灯亮
led2=0;//东黄灯亮
led8=0;//西黄灯亮
delayms(500);
while(key1==0)
{
keyscan();
}
led2=1;
led8=1;
delayms(500);
while(key1==0)
{
keyscan();
}
led2=0;
led8=0;
delayms(500);
while(key1==0)
{
keyscan();
}
led2=1;
led8=1;
delayms(500);
led2=0;
led8=0;
delayms(500);
while(key1==0)
{
keyscan();
}
led2=1;
led8=1;
led4=1;//南红灯灭
led10=1;//北红灯灭
}
}
实验过程中遇到的困难
刚开始很快就把红绿灯的亮灭程序写出来了并且经过测试完全通过,然后就开始加蜂鸣器,我以为仅仅令beer等于0或者等于1就可以控制住蜂鸣器的响声,但是这个想法是完全错误的因为测试过程中我发现根本就不符合条件,我是想让蜂鸣器在绿灯亮时持续的响,但是它仅仅响了一声,起初以为是程序写的不到位,经过仔细检查发现程序代码是没有问题的,我就开始查找是不是蜂鸣器的原因,经过检查硬件是没有问题的(我用了一个蜂鸣器持续响的程序实验,发现可以持续响),很快就明白了我对蜂鸣器认识不够。
蜂鸣器持续发出响声是通过交替变化的电平后,会发出蜂鸣声。
而我自己仅仅是让它发出一声声响这是满足不了条件的。
但是如何让它持续发出响声呢?
起初我以为加入一个字函数然后通过调用就行了,但是很快我又发现时间与声音不能同步这是一个致命的缺点,于是我就果断的放弃了这个想法。
我是让蜂鸣器以每次十微秒给予高低电平,以25s计算的话大概需要1250次这是个庞大的工作量,所以我不可能把它全部写完,于是我就想到了while循环即让蜂鸣器响到25s后从while循环中跳出去这样就解决了这个问题,总之是折腾了很久做出来了。
感悟
本次课程设计给我的感觉是:
我个人认为这个实验难度不大,所需要的知识点不多,但是可以实实在在的讲,整个过程我没有使用XX,全是手动查找书籍,而且这主要与我长时间的观察有很大的关系,每次过马路的时候我总是在想如果能够加入声音效果将会更好的,因为人如果仅仅依靠眼睛的话并不一定能够全神贯注,当然了并不是依靠眼睛和耳朵就能够全神贯注,我想两者结合起来效果会更好一些,再者对于一些重度红绿色盲的患者来讲声音元素的加入将会给他们过马路增加了一些安全的砝码。
对于自己的这次实验我个人对我自己的评价是善于发现并且能够找到问题的症结,在这一点上我可以给自己打九十分,对于试验的难度来讲我觉得凑合刚够及格六十分。
估计我与那些搞传感器以及数模转换等等的同学来讲,我的实验可能很难拿出手,但是我想只要我们把一些简单平凡的事情做好就是十分不平凡的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 入门 应该 注意 问题