@Guozhongzhi
2016-10-24T14:39:59.000000Z
字数 1988
阅读 2617
微机原理实验
郭忠智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 int
void 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键不放时,一颗亮的流水灯快速左移。
通过以上实验,认识到了程序设计严谨的逻辑性以及代码格式的重要性,此次实验也学会了给位进行数值的传递的代码的写法。