@Guozhongzhi
2016-10-24T14:39:59.000000Z
字数 1988
阅读 2846
微机原理实验 郭忠智201301020087
(1)用按键控制流水灯的流动方向、速度等。
(2)熟悉用C语言进行程序的编写以及程序的编译和烧写。
(3)熟悉Keil和STC-ISP软件的使用等。
实验原理图如下:


(1)打开Keil编译器,创建项目:Project---New uVision Project,
创建一个文件夹来放工程相关的文件,给工程项目命名为my work,点击保存。
(2)创建一个文件夹来放工程相关的文件,给工程项目命名,点击保存。
(3)选择芯片类型,这里选择ATMEL------AT89C52这个芯片。
(4)创建C文件。点击完之后,保存文档。注意,我们保存要跟工程项目保存在同一个文件夹下。注意保存文档的时候,后缀一定是要.C(C文件)
(5)然后把C文件添加到我们的工程文件里。点击之前保存的C文件,然后点击Add,就可以添加到工程目录中.
(6)创建成功后,在test.c这个文档里编辑代码。
(7)编译通过之后,输出hex文件,也就是单片机可执行的二进制文件。
(8)利用STC-ISP将编写好的程序烧写进单片机中。
(9)如下图连接试验相关模块连线:

JP165跳线帽断开
JP10连接J12
JP5连接JP8
J21接左边
(1)开关状态的检测过程
单片机对开关状态的检测相对于单片机来说,是从单片机的P1.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1按下去,即输入低电平,相当开关闭合,当松开开关K1,即输入高电平,相当开关打开。
(2)输出控制
如原理图1和图3所示,当P1.0端口输出低电平,即P1.0=0时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出高电平,即P1.0=1时,发光二极管L1亮。所以通过对P1.0端口的设置就可以控制灯的亮灭。
(3)延时程序的设置
因为单片机的指令的执行的时间很短,数量级为级,因此,我们要求的闪烁时间间隔要长一些,否则人眼根本无法识别到灯的闪烁效果。于是我们在执行某一指令时,插入延时程序,来达到我们的增加亮灯时长的效果。
#include <reg52.h>#define unum unsigned intvoid delay(unum ms);void right_fast(unum i);void right_slow(unum i);void left_fast(unum i);void left_slow(unum i);/*****************************赋值初始化**************************/sbit k1 = P1^0;sbit k2 = P1^1;sbit k3 = P1^2;sbit k4 = P1^3;/*****************************主函数******************************/void main(){P1 = 0xff;while(1){if(k1 == 0){righr_slow(10000);}if(k2 == 0){left_slow(10000);}if(k3 == 0){right_fast(5000);}if(k4 == 0){left_fast(5000);}}}/************************控制左移右移函数*************************/void right_fast(unum i){unum j;P0 = 0x80;for(j = 0; j < 8; j ++){delay(i);P0 = P0 / 2}}void right_slow(unum i){unum j;P0 = 0x80;for(j = 0; j < 8; j ++){delay(i);P0 = P0 / 2}}void left_fast(unum i){unum j;P0 = 0x01;for(j = 0; j < 8; j ++){delay(i);P0 = P0 * 2}}void left_slow(unum i){unum j;P0 = 0x01;for(j = 0; j < 8; j ++){delay(i);P0 = P0 * 2}}/******************************延时函数***************************/void delay(unum ms){unum i , j;for (i = ms; i > 0; i --)for (j = 850; j > 0; j --)}
当按住K1键不放时,一颗亮的流水灯慢速右移;
当按住K2键不放时,一颗亮的流水灯慢速左移;
当按住K2键不放时,一颗亮的流水灯快速右移;
当按住K3键不放时,一颗亮的流水灯快速左移。
通过以上实验,认识到了程序设计严谨的逻辑性以及代码格式的重要性,此次实验也学会了给位进行数值的传递的代码的写法。