杭电自动化可用 单片机 短学期 实验报告.docx
- 文档编号:29847221
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:19
- 大小:108.49KB
杭电自动化可用 单片机 短学期 实验报告.docx
《杭电自动化可用 单片机 短学期 实验报告.docx》由会员分享,可在线阅读,更多相关《杭电自动化可用 单片机 短学期 实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
杭电自动化可用单片机短学期实验报告
专业综合课程设计报告
题目专业综合课程设计
姓名和谐
专业班级自动化091
指导教师吴飞青
分院信息与工程学院
完成日期2012.6.30
目录
1.课程设计目的和要求…………………………………………………2
2.硬件原理图……………………………………………………………2
3.课程设计报告内容(软件部分)……………………………………6
3.1电子时钟程序……………………………………………………11
3.1.1程序流程图…………………………………………………13
3.1.2源程序………………………………………………………14
3.2电子密码锁程序…………………………………………………22
3.2.1程序流程图…………………………………………………24
3.2.2源程序………………………………………………………25
4.自我总结……………………………………………………………29
5.参考文献……………………………………………………………30
专业综合课程设计报告
1.课程设计目的和要求
单片机是现代控制领域中不可缺少的核心部件,是掌握电子应用技术和自动控制技术的必要一课。
课程设计是提高同学们深入理解课堂内容的重要环节。
本课程设计的任务是巩固和加深学生对单片机原理和知识的理解,目的在于培养学生分析问题和解决问题的能力以及实践动手能力。
要求每位学生编写电子时钟程序和电子密码锁程序,并在实验板上或仿真图上调试通过。
2.硬件原理图:
电源电路图
单片机最小系统电路
彩灯电路
彩灯电路原理图
LED显示电路
3.课程设计报告内容(软件部分)
3.1电子时钟程序
3.1.1程序流程图
主程序流程图T0中断程序流程图
3.1.2源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voiddelay(uintk);//延时子程序
voidtime_pro();//时间处理子程序
voiddisplay();//显示子程序
voidkeyscan();//键盘扫描子程序
ucharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
//012345678910
intp2_tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//01234567
ucharseconde=0;//秒
ucharminite=0;//分
ucharhour=0;//时
ucharmstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1
ucharshi=0;//闹铃功能
ucharfen=0;
ucharmiao=0;
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_6=P1^6;
sbitP3_1=P3^1;
sbitP3_2=P3^2;
sbitP3_3=P3^3;
sbitP3_4=P3^4;
sbitP3_5=P3^5;
sbitP3_6=P3^6;
sbitP3_7=P3^7;
/*延时子程序*/
voiddelay(uintk)
{ucharj;
while((k--)!
=0)
{for(j=0;j<125;j++)
{;}}}
/*时间处理子程序*/
voidtime_pro(void)
{if(seconde==60)
{seconde=0;
minite++;
if(minite==60)
{minite=0;
hour++;
if(hour==24)
{hour=0;}}}}
voidtimer0(void)interrupt1//定时器0方式1,50ms中断一次
{
TH0=0x3c;//手动加载计数脉冲次数
TL0=0xb0;
TMOD=0x11;
mstcnt++;//用于计算时间,每隔50ms加1
if(mstcnt==20)//mstcnt满20即为一秒
{seconde++;//秒+1
time_pro();//时间处理
mstcnt=0;//对计数单元的清零,重新开始计数
}}
/*显示子程序*/
voiddisplay(void)
{if(P3_4==1)
{P2=p2_tab[7];
P0=dispcode[seconde%10];//秒个位
delay
(1);
P2=p2_tab[6];
P0=dispcode[seconde/10];//秒十位
delay
(1);
P2=p2_tab[5];
P0=dispcode[10];//间隔符-
delay
(1);
P2=p2_tab[4];
P0=dispcode[minite%10];//分个位
delay
(1);
P2=p2_tab[3];
P0=dispcode[minite/10];//分十位
delay
(1);
P2=p2_tab[2];
P0=dispcode[10];//间隔符-
delay
(1);
P2=p2_tab[1];
P0=dispcode[hour%10];//时个位
delay
(1);
P2=p2_tab[0];
P0=dispcode[hour/10];//时十位
delay
(1);}}
/*键盘扫描子程序*/
voidkeyscan(void)
{if(P1_0==0)//秒位的调整
{delay(30);
if(P1_0==0)
{seconde++;
if(seconde==60)
{seconde=0;}}
delay(250);}
if(P1_1==0)//分位的调整
{delay(30);
if(P1_1==0)
{minite++;
if(minite==60)
{minite=0;}}
delay(250);}
if(P1_2==0)//时位的调整
{delay(30);
if(P1_2==0)
{hour++;
if(hour==24)
{hour=0;}}
delay(250);}}
/*定时闹钟*/
voiddingshi(void)
{if(P3_4==0)
{P2=p2_tab[7];
P0=dispcode[miao%10];//秒个位
delay
(1);
P2=p2_tab[6];
P0=dispcode[miao/10];//秒十位
delay
(1);
P2=p2_tab[5];
P0=dispcode[10];//间隔符-
delay
(1);
P2=p2_tab[4];
P0=dispcode[fen%10];//分个位
delay
(1);
P2=p2_tab[3];
P0=dispcode[fen/10];//分十位
delay
(1);
P2=p2_tab[2];
P0=dispcode[10];//LED3.6两管符号“-”
delay
(1);
P2=p2_tab[1];
P0=dispcode[shi%10];//时个位
delay
(1);
P2=p2_tab[0];
P0=dispcode[shi/10];//时十位
delay
(1);}
if(P3_5==0)//闹钟时位加
{delay(30);
if(P3_5==0)
{shi++;
if(shi==24)
{shi=0;}}
delay(250);}
if(P3_1==0)//闹钟时位减
{delay(30);
if(P3_1==0)
{shi--;
if(shi==24)
{shi=0;}}
delay(250);}
if(P3_6==0)//闹钟分位加
{delay(30);
if(P3_6==0)
{
fen++;
if(fen==60)
{fen=0;}}
delay(250);}
if(P3_2==0)//闹钟分位减
{delay(30);
if(P3_2==0)
{fen--;
if(fen==60)
{fen=0;
}}
delay(250);}
if(P3_7==0)//闹钟秒位加
{
delay(30);
if(P3_7==0)
{miao++;
if(miao==60)
{miao=0;}}
delay(250);}
if(P3_3==0)//闹钟秒位减
{delay(30);
if(P3_3==0)
{miao--;
if(miao==60)
{miao=0;}}
delay(250);}
if((hour==shi)&(minite==fen)&(seconde==miao))//闹铃时间到,报警2s。
{P1_6=0;
delay(1500);
P1_6=1;}}
/*主函数*/
voidmain(void)
{P1=0XFF;
TMOD=0x11;//time0为定时器,方式1
TH0=0x3c;//预置计数初值,50ms
TL0=0xb0;
EA=1;//总中断开
ET0=1;//允许定时器0中断
TR0=1;//开启定时器0
while
(1)
{keyscan();//按键扫描
dingshi();//定时闹钟
display();//显示时间}}
3.1数字时钟仿真图
3.2电子密码锁程序
3.2.1程序流程图
主程序流程图扫描键盘流程图
3.2.2源程序
#include"reg51.h"
#include"stdio.h"
#defineucharunsignedchar
#defineuintunsignedint
voiddly_ms(intms);
intkeyscan();
voidshow();
voidshow1();
sbitP3_1=P3^1;
intok=0;//,esc=0,change=0,re=0;
intt[6]={3,2,1,4,5,6},
s[6]={13,13,13,13,13,13},
p[8]={13,13,13,13,13,13,13,13};
inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x76,0x08,0x79,0x00};
//012345678910111213
intp2_tab[]={0xf7,0xfb,0xfd,0xfe,0x7f,0xbf,0xdf,0xef};
voidmain()
{inti=0,n=0,k=-1,x=0,m=0;
while
(1)
{k=keyscan();
if(k!
=-1)
{if(n<6)
switch(k)
{case0:
case1:
case2:
case3:
case4:
case5:
case6:
case7:
case8:
case9:
p[n]=10;s[n]=k;n++;break;}
switch(k)
{case12:
{ok=1;
{for(i=0;i<6;i++)
if(s[i]!
=t[i]||n<6)
ok=0;
if(ok==0)
{for(i=0;i<8;i++)
p[i]=12;
P1=0x0f;}
else
{for(i=0;i<6;i++)
p[i]=s[i];
p[6]=13;
p[7]=13;
P1=0x00;}}};break;
case13:
{if(m!
=1)
{break;}
else
{for(i=0;i<6;i++)
{t[i]=13;}
for(i=0;i<6;)
{x=keyscan();
if(x!
=-1&&x<10)
{t[i]=x;
dly_ms(150);
i++;}
show1();
m=0;}
}
}
case15:
for(i=0;i<8;i++)p[i]=13;
for(i=0;i<6;i++)s[i]=13;
n=0;
P1=0XFF;
}
k=-1;
dly_ms(200);
}show();}
for(;;);}
voiddly_ms(intms)
{
intii,jj;
if(ms<1)ms=1;
for(ii=0;ii for(jj=0;jj<112;jj++);//busclk: 12MHz--1ms } intkeyscan()//键盘扫描函数,用于识别哪一个键按下,并读取键值 { uchari,temp,temp1=0xfe; intk=-1; for(i=0;i<4;i++) { P3=temp1; temp=P3&0xf0; if(temp! =0xf0) { dly_ms(10); temp=P3&0xf0; if(temp! =0xf0) {//消抖 while((P3&0Xf0)! =0xf0); switch(temp) { case0xe0: k=4*i+0;break; case0xd0: k=4*i+1;break; case0xb0: k=4*i+2;break; case0x70: k=4*i+3;break; default: k=-1; } } } temp1=(temp1<<1)|0x01;//左移一位 } returnk; } voidshow() {inti; for(i=0;i<8;i++) { P2=p2_tab[i]; P0=table[p[i]]; dly_ms (2); } } voidshow1() {inti; for(i=0;i<6;i++) p[i]=11; for(i=0;i<8;i++) { P2=p2_tab[i];//数码管的位选 P0=table[p[i]];//数码管显示的数据 dly_ms (2); }} 4.自我总结 在漫长的大三即将结束之际,学校给我们安排了短学期,本以为在宁波理工这么多年终于有一次机会可以在七月前回到家里,然而短学期的开使得我这个梦想破灭。 于是,三年了,我没一次是在七月前回家的。 这次短学期,为期十天,在上学期学习了单片机的汇编编程方法后,这次短学期我们学习了c语言的编程方法,在此提个意见,希望学校能把单片机这门课安排在第六学期,因为单片机这门课和短学期相差了一个学期,本来我们就对单片机这门课有点头疼,而短学期和单片机主课相隔时间大,回忆起来有点困难。 接下来说一下收获,这次虽然说真的学到的东西对我个人而言不是很多,但是收获还是有的,比如说我重新回忆起了c语言的循环语句,case,break等。 也让我重新回忆了单片机。 本人自己单片机c语言学的都不好,程序也不是自己写的,自己写对我而言要求太高,所以我只能试着在同学的帮助下试着理解程序的代码及其含义。 我觉得每个人都有各自的特点,写程序厉害的同学可以自己写,写不好的同学只能自己看,看多了,也就会写了,古语有云: 熟读唐诗三百首,不会吟诗也会吟。 总之感谢老师在这个炎烈的夏天还和我们一起短学期,相信我们有所收获,就是老师最最欣慰的事情,在此,我告诉老师,我有收获,感谢您的付出。 5.参考文献 《C语言程序设计》----唐云延主编<科学出版社> 《单片机原理与应用》----吴飞青、李林功、王兵、丁晓编著<机械工业出版社>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 杭电自动化可用 单片机 短学期 实验报告 自动化 可用 学期 实验 报告