目录
目录 1
实验一、LED点亮实验 2
1、 实验目的 2
2、 实验设备 2
3、 实验内容 2
4、 实验原理 2
5、 程序流程图 2
6、 源代码 2
实验二、跑马灯实验 3
1、 实验目的 3
2、 实验设备 3
3、 实验内容 3
4、 实验原理 3
5、 程序流程图 3
6、 源代码 3
实验三、LCD液晶显示 3
1、 实验目的 3
2、 实验设备 3
3、 实验内容 3
4、 实验原理 3
5、 程序流程图 3
6、 源代码 3
实验总结 3
实验一、LED点亮实验
实验目的
通过简单的I/O口操作,熟练单片机在Keil C51编程环境下的操作步骤,为后续实验打下基础。
实验设备
单片机综合仿真实验仪一台,PC机一台。
实验内容
在Keil C51编程环境下,编写相应程序,点亮四盏LED灯。
实验原理
P1口作为准双向口,每一位均可独立完成定义输入输出,故而CPU对P1口的操作可以是字节操作,也可以是位操作。
通过对实验设备电路图分析可知,只需对P1口输出0X00,即可保证点亮P1口对应的八个发光二极管。
程序流程图
图2 、LED点亮程序流程图
源代码
#include <>
void main()
{
P1 = 0x00;
}
实验二、跑马灯实验
实验目的
学习单片机I/O口的简单操作;
学习单片机内部定时器的使用,以及相应延时子程序的编写和使用。
实验设备
单片机综合仿真实验仪一台,PC机一台。
实验内容
P1口做输出口,外接八个发光二极管,编写程序使发光二极管循环亮一秒、灭一秒,实现跑马灯效果。
实验原理
P1 口为准双向口,P1 口的每一位都能独立地定义为输入位或输出位。作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。单片机中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写过“0”,在需要时应写入一个“1”,使它成为一个输入。
再来看一下延时程序的实现。现常用的有两种方法,一是用定时器中断来实现,一是用指令循环来实现。在系统时间允许的情况下可以采用后一种方法。在本次实验时,采用定时器中断实现。
实验要求定时需要达到一秒,但是由于单片机定时器的限制不可能达到这么长时间,本次实验采用多次中断的方式实现,每次中断20ms,则需要50次中断才能达到一秒。
程序流程图
图2 、主程序流程图
如图1所示为此次实验的主程序流程图。在程序开始设定用于点亮对于二极管的P1口的值,当计时1秒之后,灭掉所有二极管,再隔一秒之后使P1值更改以点亮另一个发光二极管,依次循环。
图3、定时子程序流程图
如图2所示为定时1秒子程序流程图。程序开始对定时器进行初始化,置入相应的计数初值并且打开相应的定时器中断,接着程序就开始等待中断,当产生中断达到50次,即慢一秒时,开始更改P1口的值,实现定时循环。
源代码
#include <>
#include <>
#include <>
bit flag = 1; /*定义标志位,初值为1*/
#define uchar unsigned char
#define uint unsigned int
int s = 0; /*s为循环次数控制变量*/
void set() /*定时器设定,选用定时器0*/
{
TH0 = (65536-20000)/256; /*将计数初值高8位装入TH0中*/
TL0 = (65536-20000)%256; /*将计数初值低8位装入TL0中*/
EA = 1; /*开CPU中断*/
ET0 = 1; /*开定时中断*/
TR0 = 1; /*启动定时器*/
}
void settime()
{
uint i = 1;
while (i <= 50)
{
set();
while(flag); /*等待结束*/
flag=1; /*中断产生flag置1,i加1,再次进入循环执行set*/
i++;
}
}
void time0(void) interrupt 1 using 1 /*中断服务子程序*/
{
flag = 0; /*标志位置0*/
}
void main()
{
uchar state[8]={0xfe,0xfd,0xfb,0xf7 }; /*控制四个灯点亮的P1值*/
TMOD = 0x01; /*设定定时器0工作方式1*/
while(1)
{
P1=state[s%4]; /*循环点灯*/
settime();
北航单片机实验报告 来自淘豆网m.daumloan.com转载请标明出处.