单片机c51流水灯实验
实验一 跑马灯实验 一、实验目的 1、熟悉HNIST-2型单片机系统相关硬件电路,程序下载方法; 2、掌握采用汇编语言与C语言开发单片机系统的程序结构; 3、掌握51系列单片机通用I/O口的使用。 二、实验前准备 1、搭建实验平台;熟练应用keil5,程序烧写器 2、根据实验内容编写好相关程序,并进行Proteus仿真。 三、实验内容
1、基本的流水灯 设置延时函数使led灯依次有间隔的亮起 软件延时采用程序delay( j ),可调整延时时间。 2、简单键控的流水灯。 实现思路:由于是按下键不松手,键值一直保留,所以判断if(K10),即是按下K1, 采用if(K10)或if(K1==1),后接while(1)循环的模式。 3、键控的流水灯 由于是按一下键后马上松手,所以要设置一个变量b保留按键键值,要在延时程序中检测是否按键,当按键后立即设置b的值。
六、具体程序 基本的流水灯: #include<reg51.h> #define uint unsigned int #define uchar unsigned char void delay(j) //延时函数 data uint j; { data uint i; while(j–) for(i=0;i<250;i++); } void main() { data uchar a; a=1; while(1) { P0=~a; a=a<<1; if(a==0)a=1; delay(250);} }
简单的键控流水灯: #include<reg51.h> #define uchar unsigned char #define uint unsigned int void delay(uint i){ uchar t; while(i–){ for(t=0;t<120;t++); } } void main(){ data uchar a; a=1; while(P20xff){ P0=~a; a=a<<1; if(a0) a=1; delay(250); }
while(P20xfe) { P0=~a; a=a>>1; if(a0) a=128; delay(250); } }
键控的流水灯: #include <reg51.h> #define uint unsigned int #define uchar unsigned char
void delay(uint i) { uchar t; data uchar b=0xfb; while(i–) { if(P20xfe) b=0xfe; if(P20xfd) b=0xfd; if(P20xfb) b=0xfb; for(t=0;t<120;t++); } } void main() { data uchar a; a=1; while(P20xfe) { P0=~a; a=a<<1; if(a0) a=1; delay(250); while(P20xff) { P0=~a; a=a<<1; if(a0) a=1; delay(250); } } a=128; while(P20xfd) { P0=~a; a=a>>1; if(a0)a=128; delay(250); while(P20xff) { P0=~a; a=a>>1; if(a0)a=128; delay(250); } } while(P20xfb) {P0=0xff;} }