实验报告
课程名称:微机原理与接口技术
指导老师:李素敏
学生姓名:
学号:
专业: 自动化
日期:2014-04-10 地点:理工楼603
实验二
1.实验目的和要求
① 掌握keil软件和STC-ISP 软件的使用方法 ② 熟悉发光管的工作原理 ③ 通过编程体验发光管的延时闪烁及移位等功能
2.主要仪器设备
PC机
单片机学习开发套件(型号:89C52RC)
3.实验内容
①实验内容1:第一个发光管以间隔200ms闪烁
源程序:
#include #define uint unsigned int
//宏定义
main() {
while(1) { P1=0xfe; delay(200); P1=0xff; delay(200); } } void delay(uint z) //延时函数,z的取值为这个函数的延时ms数 {
uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--);
一台一件
}
实验结果说明:要使发光管闪烁,只需设置合适的时间延时即可。
②实验内容2 : 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。
源程序:
#include
#include //后面要用到它里面的_crol_(k,l)函数 //这个函数的意思是把一个字符变量k 循环左移l 位 #define uint unsigned int
//宏定义
unsigned char a,b,k,j;
//定义五个字符变量 sbit beep=P2^3; // 定义蜂鸣器的接口
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数 {
uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void main() {
k=0xfe; //先给k一个初值11111110等待移位 while(1) {
delay500ms();
beep=0; //打开蜂鸣器
delay500ms(); //让它响500ms
beep=1; //关闭蜂鸣器
j=_crol_(k,1); //把k循环左移一位
k=j; //把移完的值再送给k
P1=j; //同时把值送到P1口点亮发光二极管 } //再次循环 }
实验结果说明:在此程序中用到了_crol_(k,l)函数,此函数的功能在于循环移位,在每次发光管闪烁相应时间后左移一位,把移完的值再送到P口,点亮对应的发光管。这样循环往复,达到发光管流动的效果。
③实验内容3 :用8个发光管演示出8位二进制数累加过程,即用8个二极管表示8个二进制位(亮为1,灭为0),依次以二进制形式显示0,1,2,……255。
源程序: #include
#include //包含有左右循环移位子函数的库 #define uint unsigned int
//宏定义 #define uchar unsigned char //宏定义
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数, {
uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); } void main()
//主函数 {
} uchar a; while(1)
//大循环 {
} a++; P1=~a; delay(200);
实验结果说明:在此定义一个无符号字符变量a,a的值进行累加,但是由于表示的二进制数要求亮为1,灭为0,与发光管的0亮1灭正好相反,所以将a的计数取反并设置相应延时,重复此过程就得到了在发光管上显示八位二进制数的累加过程。
④实验内容4 :间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
源程序:
#include //52单片机头文件
#include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数 {
uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); } void main() //主函数 { uchar a,i,j; while(1) //大循环
} {
} a=0xfe; //赋初值
for(j=0;j
} {
P1=a; //点亮小灯
delay(300); //延时300毫秒
a=_crol_(a,1); //将a变量循环左移一位
} a=_crol_(a,j); //补齐,方便下面的左移一位 P1=0xff; //全部关闭
a=a
4.心得体会:此次实验中练习较多的就是闪烁和移位,在编程过程中,设置闪烁的时间必须达到人眼正常观察的要求,这就需要计算合适的闪烁时间,不停的尝试,最终选择适宜观察的时间间隔。发光管的循环移位时调用_crol_(k,l)函数
可以大大简化编程的行数。所以熟悉单片机的函数库,可以方便我们编程。所以在以后的实验中还得继续学习这个函数库,从而更轻松的完成实验内容。