第7组单片机实验总结Word文件下载.docx
- 文档编号:22466146
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:83
- 大小:353.37KB
第7组单片机实验总结Word文件下载.docx
《第7组单片机实验总结Word文件下载.docx》由会员分享,可在线阅读,更多相关《第7组单片机实验总结Word文件下载.docx(83页珍藏版)》请在冰豆网上搜索。
voiddelayms(uintxms)
uinti,j;
for(i=xms;
i>
0;
i--)
for(j=110;
j>
j--);
②8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。
//2
intrins.h>
uintaa;
sbitbeep=P1^5;
P2=0xff;
aa=0xfe;
beep=1;
P2=aa;
beep=0;
delayms(500);
P2=0xff;
beep=1;
aa=_crol_(aa,1);
③8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。
//3
uintaa,i;
sbitbeep=P2^3;
P1=0xff;
delayms(500);
for(i=0;
i<
8;
i++)
{
P1=aa;
beep=1;
delayms(100);
beep=0;
aa=_crol_(aa,1);
if(aa==0xfe)break;
}
aa=0x7f;
aa=_cror_(aa,1);
④用8个发光管演示出8位二进制数累加过程,结合两个开关(一加一减)实现加减运算。
//4
#defineucharunsignedchar
sbits0=P2^0;
sbits1=P2^1;
uchara;
voiddelayms(uintz)
inti,j;
for(i=z;
for(j=110;
a=0;
if(s0==0)
while(a!
=256)
a++;
P1=~a;
a=0xff;
if(s1==0)
=0)
a--;
⑤8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。
重复此过程。
//5
uinta,i,j;
a=0xfe;
for(j=0;
j<
2;
j++)
for(i=0;
{
P1=a;
a=_crol_(a,1);
delayms(200);
}
a=0x7f;
7;
a=_cror_(a,1);
P1=0xff;
5;
P1=0x00;
delayms(300);
P1=0xff;
}
⑥间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
//6
uinti,a;
for(i=0;
P1=a;
a=_crol_(a,1);
delayms(500);
a=0xfc;
4;
a=_crol_(a,2);
a=0xf8;
3;
a=_crol_(a,3);
a=0xf0;
a=_crol_(a,4);
a=0xe0;
a=_crol_(a,5);
a=0xc0;
a=_crol_(a,6);
a=0x80;
a=_crol_(a,7);
a=0x00;
⑦间隔300ms先奇数亮再偶数亮,循环三次;
一个灯上下循环三次;
两个分别从两边往中间流动三次;
再从中间往两边流动三次;
8个全部闪烁3次;
关闭发光管,程序停止。
//7
P1=0xaa;
//01010101
delayms(1000);
P1=0x55;
//10101010
a=0xfe;
for(j=0;
delayms(500);
{
P1=0x7e;
P1=0xbd;
P1=0xdb;
P1=0xe7;
while
(1)
{
心得体验:
本实验主要学习使用单片机的I/O口控制发光二极管的亮灭,同时要熟悉延时子函数的调用,熟练进行移位操作,比如左移<
<
右移>
>
等指令。
应该注意的是:
单片机上电时,没有人为地控制I/O口的状态,所有未控制的I/O口都默认为高电频。
刚开始学习单片机这门课程,因为学过C语言,所以还是稍微能上手的。
学习实验三,从中掌握了I/O口的工作原理和它的数据输出方式,通过P1口观察程序的运行。
而且掌握了二个新软件proteuisis和keil,可以进行仿真实验,也和单片机实物结合理论联系实际,提高动手能力,从而全面掌握单片机的应用。
而在实验三中,首先要理解题目要求,相应地去编程,要有自己的思路,先把大概的脉络写出来,还要不断地去调试,最终才可以满足题目要求,在仿真和实物单片机都能实现需要的现象。
7.实验四LED数码管控制实验
1.单片机AT89C51读入4位开关的输入状态(0~F),并将其输出到数码管显示。
//数码管共阳,按键共阴
(1)
stdio.h>
sbitk1=P2^0;
sbitk2=P2^1;
sbitk3=P2^2;
sbitk4=P2^3;
uinta,b,c,d,m;
ucharcodetable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
a=k1;
b=k2;
c=k3;
d=k4;
m=(8*!
d+4*!
c+2*!
b+1*!
a);
P0=table[m];
//P0
2、数码管动态显示。
//数码管共阴
(2)
uinti;
//1//2//3//4//5//6
ucharcodedula[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ucharcodewela[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
while
(1)
6;
P2=wela[i];
//P1
P0=dula[i];
P0=0xff;
//消影
本实验主要是熟练掌握I/O口对数码管显示的控制,在编写程序时,应先确定选用的数码管是共阴还是共阳数码管,不同的数码管使用不同的编码。
数码管的动态显示中,一般都要上一句P0=0xff,即是消影。
如果不进行消影,就会出现显示混乱的现象。
学习了P1口和P2口的使用方法,要把P0口、P1口和P2口在keil中调出来调试观察0和1数值(高低电平)变化,由于买的单片机是内部接线固定好,只能通过修改程序和仿真图去满足实验要求,比其他同学所做的工作更多,也更复杂,不过我觉得这样可以让我更深入地去了解了单片机的结构。
8.实验五广告流水灯中断控制
1、利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。
sbitled=P1^0;
uintnum;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
if(num==20)
num=0;
led=~led;
voidT0_time()interrupt1
num++;
2、利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。
//2单数码管共阳
Ucharcodedula[]={0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x40};
uinta,num,i;
TMOD=0x10;
//T1
TH1=(65536-10000)/256;
//10ms
TL1=(65536-10000)%256;
ET1=1;
TR1=1;
num=0;
i=0;
a=0xfe;
if(num==7)
P1=a;
i++;
if(num==10)
if(i==10)
i=0;
//P1=0xff;
voidT1_time()interrupt3
3、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3….C、D、E、F,重复(电路自己设计)。
//3共阴
ucharcodedula[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uintnum,i,j;
P2=wela[j];
//0选中位选
P3=dula[i];
//段选
if(i==16)
{
i=0;
j++;
if(j==6)j=0;
}
//45872
选做:
INT0、INT1同时存在,P1为输出口,INT1优先级高于INT0,均为电平触发。
要求:
主程序8个发光二极管左、右移动2轮,再闪烁2次,INT0的中断服务程序控制P1口的8个发光二极管闪烁5次,INT1的中断服务程序控制P1口的8个发光二极管左、右移动3轮(所有计数通过数码管显示),信号灯优先级控制程序流程图如图8-5所示。
//选做单数码管共阳
ucharcodedula[]={0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x40};
//1~9
uinta,b,num0,num1,i,j;
sbitN0=P3^2;
sbitN1=P3^3;
TMOD=0xdd;
TCON=0x00;
PX1=1;
//外部中断1为高优先
PX0=0;
//0为低
//全局允许中断
EX1=1;
//开外部中断1
EX0=1;
//开外部中断0
num0=0;
num1=0;
b=0xff;
j++)//移动2轮
i++)//左
i++)//右
j=0;
j++)//闪2次
P1=~b;
delayms(200);
P1=b;
}
voidexter0()interrupt0
P1=~b;
P0=dula[num0];
P1=b;
num0++;
if(num0==5)
while
(1)
P1=b;
voidexter1()interrupt2
a=_cror_(a,1);
P0=dula[num1];
num1++;
if(num1==3)
实验五心得:
由于水平有限,在实验五花了好长时间,先要了解了定时器/计数器工作方式,而且要搞清楚题目的中断延时要求,既要设计实验仿真电路,又要编程去实现要求。
在实验中学习到了外部中断基本使用方法和中断优先级,学习了中断程序的编写程序方法。
而在选做实验中断嵌套中进一步地利用了中断优先级去控制程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 总结