单片机原理及应用实验指导书打印.docx
《单片机原理及应用实验指导书打印.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用实验指导书打印.docx(15页珍藏版)》请在冰豆网上搜索。
单片机原理及应用实验指导书打印
《单片机原理及应用》实验指导书
11/12年第一学期
姓名:
郑龙
学号:
08030335
班级:
08软件
指导教师:
谢光前
计算机信息工程学院
计算机科学与工程系
2009年8月修订
目录
实验一
P1口输入输出实验…………………………………………………
1
实验二
定时器实验…………………………………………………………
3
实验三
外部中断实验………………………………………………………
5
实验四
键盘显示实验………………………………………………………
7
实验一P1口输入输出实验
一、实验目的
掌握单片机I/O口的使用,掌握数据输入输出程序编制的方法。
二、实验环境
硬件平台:
TX-1C单片机学习板。
软件平台:
keil软件
三、实验内容与要求
P1口循环点亮8个发光二极管
四、实验预习和准备
参考相关书籍,掌握TX-1C单片机学习板原理图。
五、实验过程与结果
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
unsignedchartemp;
voiddelay(uint);
voidmain(void)
{
temp=0XFE;
while
(1)
{
P1=temp;
temp=_crol_(temp,1);
delay(100);
}
}
voiddelay(uintz)
{
uintx,y;
for(x=0;xfor(y=0;y<100;y++)
;
}
六、实验小结和体会
通过本次实验我了解了单片机I/O口的使用情况,掌握了数据输入输出程序编制的方法。
还了解到8051单片机提供了4个8位的I/O口,分别为平P0、P1、P2、P3,实现数据的输入输出;以及P1口循环点亮8个发光二极管的原理。
对程序编制的结构也有所了解,如#include表示包含C51编译器提供的有关寄存器名说明的头文件等。
实验时有些地方理解的不是很清楚,课后还要在细看加深理解。
实验二定时器实验
一、实验目的
掌握单片机定时器使用及其编程方法。
二、实验环境
硬件平台:
TX-1C单片机学习板。
软件平台:
keil软件
三、实验内容与要求
P1口循环点亮8个发光二极管,循环间隔为2S。
四、实验预习和准备
参考相关书籍,掌握TX-1C单片机学习板原理图。
五、实验过程与结果
#include
#include
#defineucharunsignedchar
voidinit(void);
ucharcount=0;
uchartemp=0Xfe;
voidmain(void)
{
init();
while
(1)
{
if(count==40)
{
count=0;
P1=temp;
temp=_crol_(temp,1);
}
}
}
voidinit(void)
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidtimer0(void)interrupt1
{
count++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
六、实验小结和体会
通过本次实验我掌握了单片机定时器使用及其编程方法。
实验时收获也是颇丰,让我了解到对于16位的二进制数取高八位,低八位的方法;以及如何在程序中比较巧妙的设计使循环间隔满足2秒。
此外,还了解了工作方式寄存器TMOD,它的低4位为定时器T0的工作方式字段,高4位为定时器T1的工作方式字段;T0总共有四种工作方式,而T1共有三种工作方式。
总之本次实验还是学到很多知识的。
实验三外部中断实验
一、实验目的
学习外部中断技术的基本使用方法及中断处理的编程方法。
二、实验环境
硬件平台:
TX-1C单片机学习板。
软件平台:
keil软件
三、实验内容与要求
当有外部中断0时,发光二极管开始循环点亮,循环间隔2S,同时蜂鸣器响,到最好一个发光二级管后,灯全灭,同时蜂鸣器停止响声。
四、实验预习和准备
参考相关书籍,掌握TX-1C单片机学习板原理图。
五、实验过程与结果
#include
#include
#defineucharunsignedchar
voidinit(void);
//sbitbeep=P2^3;
ucharcount=0;
uchartemp=0Xfe;
voidmain(void)
{
init();
while
(1)
{
if(count==40)
{
count=0;
P1=temp;
temp=_crol_(temp,1);
}
}
}
voidinit(void)
{
//To方式1
TMOD=0X01;
//定时50ms
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
//开对应中断
EA=1;//开总中断
ET0=1;//定时器T0
//开定时器
//TR0=1;
EX0=1;//开外部中断
IT0=0;//下降沿触发
}
voidtimer0(void)interrupt1
{
count++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
voidextro(void)interrupt0
{
TR0=1;//开定时器
//beep=0;
}
六、实验小结和体会
通过本次实验我了解了外部中断技术的基本使用方法及中断处理的编程方法,实验时有部分问题弄不清楚,如将时钟周期与机器周期混淆,时钟周期为晶振频率的倒数,而12个时钟周期为一个机器周期。
此外,我还了解到8051内部一共提供5个中断源,可分为两个优先级处理;认识了中断响应的条件,响应的过程,中断处理以及外部中断响应时间等。
总之,本次实验让我亲身了解到了外部中断的处理方法。
实验四键盘显示实验
一、实验目的
1.熟悉并掌握系统中扩展键盘显示接口的方法。
2.掌握键盘显示的工作原理和编程的方法。
二、实验环境
硬件平台:
TX-1C单片机学习板。
软件平台:
keil软件
三、实验内容与要求
按下矩阵键盘某个按键,数码管上显示对应的按键编号。
四、实验预习和准备
参考相关书籍,掌握TX-1C单片机学习板原理图。
五、实验过程与结果
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitdula=P2^6;//段选
sbitwela=P2^7;//位选
ucharcodetable[]={//code:
程序存储区
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
ucharnum,temp,num1;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
ucharkeyscan();
voiddisplay(ucharaa);
voidmain()
{
num=17;//table的下标
wela=1;//位选,选择要显示的数码管
P0=0xea;//0选中
wela=0;
dula=1;//段选,选择数码管显示
P0=0;//1亮
dula=0;
while
(1)
{
display(keyscan());
}
}
voiddisplay(ucharaa)
{
dula=1;
P0=table[aa-1];//按键值对应的7段码送P0口
dula=0;
}
ucharkeyscan()
{
P3=0xfe;//扫描第一行
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);//消抖
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xee:
num=1;
break;
case0xde:
num=2;
break;
case0xbe:
num=3;
break;
case0x7e:
num=4;
break;
}
while(temp!
=0xf0)//释放抖动
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;//扫描第二行
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xed:
num=5;
break;
case0xdd:
num=6;
break;
case0xbd:
num=7;
break;
case0x7d:
num=8;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
//扫描第三行
P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xeb:
num=9;
break;
case0xdb:
num=10;
break;
case0xbb:
num=11;
break;
case0x7b:
num=12;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xf7;//扫描第四行
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xe7:
num=13;
break;
case0xd7:
num=14;
break;
case0xb7:
num=15;
break;
case0x77:
num=16;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
returnnum;
}
六、实验小结和体会
通过本次实验我熟悉并掌握系统中扩展键盘显示接口的方法,同时掌握键盘显示的工作原理和编程的方法。
了解了七段LED显示器的结构、字形编码以及工作方式等;理解了实验时抖动产生的原因及消除抖动的具体实现。
此外,实验时还注意到一些细节的方面,如sbit是表示可位寻址的变量;在变量类型后加上code的目的是使程序放在程序存储区而不是数据存储区,因为数据存储区的容量是有限的。