本科单片机c语言实验手册实验报告.docx
《本科单片机c语言实验手册实验报告.docx》由会员分享,可在线阅读,更多相关《本科单片机c语言实验手册实验报告.docx(47页珍藏版)》请在冰豆网上搜索。
本科单片机c语言实验手册实验报告
《单片机C语言程序设计》
实验手册
院系信息工程学院
专业物联网工程
学生姓名宋增
学号5006130037
指导教师王闯
许昌学院信息工程学院
实验情况一览表
实验序号
实验名称
实验性质
学时
性质
实验一
单片机最小系统
验证性实验
2
必做
实验二
点亮一盏灯
验证性实验
2
必做
实验三
流水灯
验证性实验
2
必做
实验四
脉冲触发外部中断
验证性实验
2
必做
实验五
电平触发外部中断
验证性实验
2
必做
实验六
定时器
综合性实验
2
必做
实验七
定时器方波脉冲
验证性实验
2
必做
实验八
计数器
验证性实验
2
必做
实验九
数码管显示
验证性实验
2
必做
实验十
键盘扫描
验证性实验
2
必做
实验十一
串行通信
验证性实验
2
必做
实验十二
液晶显示1602
验证性实验
2
必做
实验十三
I2C串行总线
验证性实验
2
必做
实验十四
A/D转换ADC0809
验证性实验
2
必做
实验十五
D/A转换DAC0832
验证性实验
2
必做
实验一单片机最小系统
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
掌握51单片机工作的最基本电路,理解最小系统的硬件电路连接。
二、实验要求
用Proteus画出最小系统电路图。
三、实验仿真(画出实验电路)
四、总结
碰到问题可以借助网络来搜寻答案和对自己有帮助的问题,一定会有所收获。
五、评语
实验二点亮一盏灯
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
了解二极管的显示原理,掌握二极管显示的编程方法,理解二极管与单片机的硬件电路连接。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出实验电路)
四、实验程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitled=P2^7;
voidmain()
{
while
(1)
{
led=1;
}
}
五、总结:
单片机课是一门实践性很强的课程,仅有课堂上理论知识的学习,对运用好单片机是完全不够的,必须亲自做实验,从实验中吸取教训,总结经验,增加实战经验,加深对单片机的理解,更好的运用单片机。
六、评语
实验三流水灯
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
了解二极管的显示原理,掌握二极管流水显示的编程方法,理解二极管与单片机的硬件电路连接。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出实验电路)
四、实验程序
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uint);
voidmain()
{
P2=0x01;
while
(1)
{
delay(500);
P2=_crol_(P2,1);
}
}
voiddelay(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
五、总结:
单片机实验课让我将课堂上学到的理论知识运用到实验当中去,在实验中发现问题,解决问题,强化理论知识的运用。
六、评语
实验四脉冲触发外部中断
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
了解中断的原理,掌握脉冲触发方式中断的编程方法,理解编写中断程序用到的寄存器。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出实验电路)
四、实验程序
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uint);
voidmain()
{
EA=1;
EX0=1;
IT0=1;
P1=0x00;
P2=0x01;
while
(1)
{
delay(500);
P2=_crol_(P2,1);
}
}
voidINT0_tiaobian()interrupt0
{
uinti;
EA=0;
for(i=0;i<3;i++)
{
P1=0xff;
delay(500);
P1=0x00;
delay(500);
}
EA=1;
}
voiddelay(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
五、总结:
学习单片机没有捷径,不能指望两三天就学会,要坚持不懈,重在积累 单片机是一门应用性和实践性很强的学科,要多动手,多做实验。
六、评语
实验五电平触发外部中断
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
了解中断的原理,掌握电平触发方式中断的编程方法,理解编写中断程序用到的寄存器。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出实验电路)
四、实验程序
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uint);
voidmain()
{
EA=1;
EX0=1;
IT0=0;
//TCON=0x00;
P1=0x00;
P2=0x01;
while
(1)
{
delay(500);
P2=_crol_(P2,1);
}
}
voidINT0_didianping()interrupt0
{
uinti;
EA=0;
for(i=0;i<3;i++)
{
P1=0xff;
delay(500);
P1=0x00;
delay(500);
}
EA=1;
}
voiddelay(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
5、总结:
俗话说“好的开始是成功的一半”。
说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目,其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。
最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。
六、评语
实验六定时器
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
掌握定时器的工作原理,编程实现定时器1s的精准延时。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出实验电路)
四、实验程序
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharnum,temp,shi,ge;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c};
voidmiao(uchar,uchar);
voidmain()
{
TMOD=0X01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while
(1)
{
miao(shi,ge);
}
}
voidmiao(ucharshi,ucharge)
{
P0=table[shi];
P2=table[ge];
}
voidTO_jishi()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==18)
{
num=0;
temp++;
if(temp==100)
temp=0;
shi=temp/10;
ge=temp%10;
}
}
五、总结:
在实验过程中,使我接触了许多我以前没接触过的元件,提高了自己的动手能力。
而且在编程时重新温习了刚学不久的51单片机,不仅让我学习了一些新的知识,而且对以前所学内容进行了巩固,让我懂得理论知识的重要性,没有理论的指导一切实际行动都是盲目的,且实际操作是所学的理论知识得到验证,更能加深对理论知识的理解,让我受益匪浅。
六、评语
实验七定时器方波脉冲
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
掌握定时器的工作原理,利用定时器T0和T1产生定时中断,在P1.0与P1.1端口分别输出500Hz和1000Hz的方波脉冲信号。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出实验电路)
四、实验程序
#include
#defineuintunsignedint
#defineucharunsignedchar
uinti;
sbita=P1^0;
sbitb=P1^1;
voidmain()
{
TMOD=0x11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
while
(1);
}
voidt0_500()interrupt1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
a=~a;
}
voidt1_1000()interrupt3
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
b=~b;
}
五、总结:
中断的精髓是在于使用,在电路设计中使用中断来控制单片机的工作,使之更好的达到所需目的。
六、评语
实验八计数器
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
掌握定时器工作在计数器的工作原理,编程实现T0和T1引脚接受外部脉冲信号,T0引脚每收到3个上升沿脉冲信号,数码管显示值加1;T1引脚每收到6个上升沿脉冲信号,数码管显示值加1。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出实验电路)
四、实验程序
#include
#defineuintunsignedint
#defineucharunsignedchar
uintnum;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voidmain()
{
TMOD=0x66;
TH0=0xff;
TL0=0xfd;
TH1=0xff;
TL1=0xfa;
TR0=1;
TR1=1;
ET0=1;
ET1=1;
EA=1;
while
(1)
{
P0=table[num];
if(num>9)
num=0;
}
}
voidT0_jishu3()interrupt1
{
TH0=0xff;//ÖØ×°³õÖµ
TL0=0xfd;
num++;
}
voidT1_jishu6()interrupt3
{
TH1=0xff;//ÖØ×°³õÖµ
TL1=0xfa;
num++;
}
五、总结:
通过本次实验我更加熟练的掌握了中断的使用。
六、评语
实验九数码管显示
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
了解数码管的动态显示和静态显示,掌握数码管的动态显示编程,理解数码管与单片机的硬件电路连接。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出实验电路)
四、实验程序
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharnum;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelay(uint);
voidmain()
{
while
(1)
{
P3=0xfe;
P2=table[1];
delay(5);
P3=0xfd;
P2=table[2];
delay(5);
P3=0xfb;
P2=table[3];
delay(5);
P3=0xf7;
P2=table[4];
delay(5);
P3=0xef;
P2=table[5];
delay(5);
P3=0xdf;
P2=table[6];
delay(5);
}
}
voiddelay(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
五、总结:
要注意细节。
细节决定成败,这句话在这次课题中不仅一次得到了印证,特别是在软件的编程过程中,一点点的错误就会使你整个程序不能运行。
因此我们不仅仅要有整体意识,也要注意细节,不要因一个关键地方的一个细节而导致满盘皆输。
六、评语
实验十键盘扫描
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
了解键盘扫描原理,掌握键盘的延时去抖、识别方法,理解键盘与单片机的硬件电路连接,掌握键盘的编程方法。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出电路图)
四、实验程序
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharnum;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelay(uint);
voidmain()
{
while
(1)
{
uchartemp;
P3=0x0f;
if(P3==0x0e)
{
delay(10);
if(P3==0x0e)
{
P3=0xf0;
temp=P3;
switch(temp)
{
case0xe0:
P2=table[0];
break;
case0xd0:
P2=table[1];
break;
case0xb0:
P2=table[2];
break;
case0x70:
P2=table[3];
break;
}
}
}
P3=0x0f;
if(P3==0x0d)
{
delay(10);
if(P3==0x0d)
{
P3=0xf0;
temp=P3;
switch(temp)
{
case0xe0:
P2=table[4];
break;
case0xd0:
P2=table[5];
break;
case0xb0:
P2=table[6];
break;
case0x70:
P2=table[7];
break;
}
}
}
P3=0x0f;
if(P3==0x0b)
{
delay(10);
if(P3==0x0b)
{
P3=0xf0;
temp=P3;
switch(temp)
{
case0xe0:
P2=table[8];
break;
case0xd0:
P2=table[9];
break;
case0xb0:
P2=table[10];
break;
case0x70:
P2=table[11];
break;
}
}
}
P3=0x0f;
if(P3==0x07)
{
delay(10);
if(P3==0x07)
{
P3=0xf0;
temp=P3;
switch(temp)
{
case0xe0:
P2=table[12];
break;
case0xd0:
P2=table[13];
break;
case0xb0:
P2=table[14];
break;
case0x70:
P2=table[15];
break;
}
}
}
}
}
voiddelay(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
五、总结:
做事要多动脑,选出最好的方法。
一件事往往有多种解决方法,一个好的方法,不仅能使事情事半功倍,而且往往决定最后的成与败,所以做事时一定要多动一下脑筋,想出最好的方法。
六、评语
实验十一串行通信
班级、姓名、学号、指导教师
实验学时数、实验位置、实验日期年月日
一、实验目的
了解串行通信工作原理,掌握工作方式1下的编程方法。
二、实验要求
用proteus画出电路图,用keil软件编程,并生成HEX文件,在proteus上面仿真实现,结果无误,在试验箱上下载验证。
三、实验仿真(画出电路图)
四、实验程序
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharflag,a,i;
ucharcodetable[]="Iget";
voidinit()
{
TMOD=0x20;
TH1=0xff;
TL1=0xf1;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}voidmain()
{
init();
while
(1)
{
if(flag==1)
{
ES=0;
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!
TI);
TI=0;
}
SBUF=a;
while(!
TI);
TI=0;
ES=1;
flag=0;
}
}
}
voidser()interrupt4
{
RI=0;
a=SBUF;
flag=1;
}