文档库 最新最全的文档下载
当前位置:文档库 › 简单的单片机花样流水灯C语言源代码

简单的单片机花样流水灯C语言源代码

简单的单片机花样流水灯C语言源代码

#include<reg51.h> //51系列单片机定义文件#define uchar unsigned char //定义无符号字符

#define uint unsigned int //定义无符号整数

void Delayms(uint x)

{ //定义延时函数

uint i,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

void main(){

uint i;

uchar temp;

while(1){

temp=0x01; //8个流水灯逐个闪动

for(i=0;i<8;i++){

P0=~temp;

Delayms(50);

temp<<=1;

}

temp=0x80; //8个流水灯反向逐个闪动for(i=0;i<8;i++){

P0=~temp;

Delayms(50);

temp>>=1;

}

temp=0xfe; //8个流水灯依次全部点亮for(i=0;i<8;i++){

P0=temp;

Delayms(50);

temp<<=1;

}

temp=0x7f; //8个流水灯依次反向全部点亮for(i=0;i<8;i++){

P1=temp;

Delayms(50);

temp>>=1;

}

}

}

//此程序的作者向往未来

#include<reg52.h>

#include<intrins.h>

#define uint unsigned int

#define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={

0x80,0xc0,0xe0,0xf0,

0xf8,0xfc,0xfe,0xff};

uchar code table2[]={

0x7f,0x3f,0x1f,0x0f,

0x07,0x03,0x01,0x00}; uchar code table3[]={

0x01,0x03,0x07,0x0f,

0x1f,0x3f,0x7f,0xff};

uchar code table4[]={

0xe7,0xdb,0xbd,0x7e,

0xbd,0xdb,0xe7,0xff};

uchar code table5[]={ 0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0xff}; uchar code table6[]={ 0x7e,0x3c,0x18,0x00, 0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1();

void lsd2();

void lsd3();

void lsd4();

void lsd5();

void lsd6();

void lsd7();

void lsd8();

void lsd9();

void lsd10();

void lsd11();

void lsd12();

main()

{

while(1)

{

lsd1();

lsd2();

lsd3();

lsd4();

lsd5();

lsd6();

lsd7();

lsd8();

lsd9();

lsd10();

lsd11();

lsd12();

}

}

void delay(uchar x) //延时函数

{

uint i,j;

for(i=x;i>0;i--)

for(j=250;j>0;j--);

}

void lsd1() //lsd1 单个流水灯双程模式1

{

uchar a,i,j,k,l,l1,k1,j1,i1;

a=0xfe;

P0=a;

delay(z);

for(i=0;i<7;i++) //仅单个灯亮从上往下流{

a=_crol_(a,1);

P0=a;

delay(z);

}

P0=0xff;

a=0xfe;

P2=a;

delay(z);

for(j=0;j<7;j++)

{

a=_crol_(a,1);

P2=a;

delay(z);

}

P2=0xff;

a=0xfe;

P3=a;

delay(z);

for(k=0;k<7;k++) {

a=_crol_(a,1);

P3=a;

delay(z);

}

P3=0xff;

a=0xfe;

P1=a;

delay(z);

for(l=0;l<7;l++) {

a=_crol_(a,1);

P1=a;

delay(z);

}

a=0xbf;

P1=a;

delay(z);

for(l1=0;l1<6;l1++) //l1==6 仅单个灯亮从下往上流

{

a=_cror_(a,1);

P1=a;

delay(z);

}

P1=0xff;

a=0x7f;

P3=a;

delay(z);

for(k1=0;k1<7;k1++)

{

a=_cror_(a,1);

P3=a;

delay(z);

}

P3=0xff;

a=0x7f;

P2=a;

delay(z);

for(j1=0;j1<7;j1++)

{

a=_cror_(a,1);

P2=a;

delay(z);

}

P2=0xff;

a=0x7f;

P0=a;

delay(z);

for(i1=0;i1<7;i1++)

{

a=_cror_(a,1);

P0

=a;

delay(z);

}

P0=0xff;

}

void lsd2() //lsd2 两个灯流水双程

模式1

{

uchar a,i,j,k,l,l1,k1,j1,i1; a=0xfe;

P0=a;

delay(z);

a=a<<1;

P0=a;

delay(z);

for(i=0;i<6;i++)

{

a=_crol_(a,1);

P0=a;

delay(z);

}

P0=0x7f;

P2=0xfe;

delay(z);

P0=0xff;

a=0xfc;

P2=a;

delay(z);

for(j=0;j<6;j++) {

a=_crol_(a,1);

P2=a;

delay(z);

}

P2=0x7f;

P3=0xfe;

delay(z);

P2=0xff;

a=0xfc;

P3=a;

delay(z);

for(k=0;k<6;k++) {

a=_crol_(a,1);

P3=a;

delay(z);

}

P3=0x7f;

P1=0xfe;

delay(z);

P3=0xff;

a=0xfc;

P1=a;

delay(z);

for(l=0;l<6;l++) {

a=_crol_(a,1);

P1=a;

delay(z);

}

P1=0x7f;

delay(z);

P1=0xff;

delay(z);

a=0x7f;

P1=a;

delay(z);

a=a>>1;

P1=a;

delay(z);

for(l1=0;l1<6;l1++) {

a=_cror_(a,1);

P1=a;

delay(z);

}

P1=0xfe;

P3=0x7f;

delay(z);

P1=0xff;

a=0x3f;

P3=a;

delay(z);

for(k1=0;k1<6;k1++) {

a=_cror_(a,1);

P3=a;

delay(z);

}

P3=0xfe;

P2=0x7f;

delay(z);

P3=0xff;

a=0x3f;

P2=a;

delay(z);

for(j1=0;j1<6;j1++) {

a=_cror_(a,1);

P2=a;

delay(z);

}

P2=0xfe;

P0=0x7f;

delay(z);

P2=0xff;

a=0x3f;

P0=a;

delay(z);

for(i1=0;i1<6;i1++) {

a=_cror_(a,1);

P0=a;

delay(z);

}

P0=0xfe;

delay(z);

P0=0xff;

delay(z);

}

void lsd3() //lsd3 两个灯流水双程模式2

{

uchar a,i,j,k,l,l1,k1,j1,i1;

a=0xfe;

P0=a;

delay(z);

a=a<<1;

P0=a;

delay(z);

for(i=0;i<6;i++) //_crol_与_cror_混合使用

{

a=_crol_(a,1);

P0=a;

delay(z);

}

P0=0x7f;

a=0x7f;

P2=a;

delay(z);

P0=f;

a=a>>1;

P2=a;

delay(z);

for(j=0;j<6;j++) {

a=_cror_(a,1);

P2=a;

delay(z);

}

P2=0xfe;

a=0xfe;

P3=a;

delay(z);

P2=f;

a=a<<1;

P3=a;

delay(z);

for(k=0;k<6;k++) {

a=_crol_(a,1);

P3=a;

delay(z);

}

P3=0x7f;

a=0x7f;

P1=a;

delay(z);

P3=f;

a=a>>1;

P1=a;

delay(z);

for(l=0;l<6;l++) {

a=_cror_(a,1);

P1=a;

delay(z);

}

P1=0xfe;

delay(z);

P1=f;

delay(z);

P1=a;

delay(z);

a=a<<1;

P1=a;

delay(z);

for(l1=0;l1<6;l1++) //l1==6 {

a=_crol_(a,1);

P1=a;

delay(z);

}

P1=0x7f;

a=0x7f;

P3=a;

delay(z);

P1=f;

a=a>>1;

P3=a;

for(k1=0;k1<6;k1++)

{

a=_cror_(a,1);

delay(z);

}

P3=0xfe;

a=0xfe;

P2=a;

delay(z);

P3=f;

a=a<<1;

P2=a;

delay(z);

for(j1=0;j1<6;j1++) {

a=_crol_(a,1);

P2=a;

delay(z);

}

P2=0x7f;

a=0x7f;

P0=a;

delay(z);

P2=f;

简单的单片机花样流水灯C语言源代码

简单的单片机花样流水灯C语言源代码 #include<reg51.h> //51系列单片机定义文件#define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void Delayms(uint x) { //定义延时函数 uint i,j;

for(i=x;i>0;i--) for(j=110;j>0;j--); } void main(){ uint i; uchar temp; while(1){ temp=0x01; //8个流水灯逐个闪动 for(i=0;i<8;i++){ P0=~temp; Delayms(50); temp<<=1; } temp=0x80; //8个流水灯反向逐个闪动for(i=0;i<8;i++){ P0=~temp; Delayms(50); temp>>=1; } temp=0xfe; //8个流水灯依次全部点亮for(i=0;i<8;i++){ P0=temp;

Delayms(50); temp<<=1; } temp=0x7f; //8个流水灯依次反向全部点亮for(i=0;i<8;i++){ P1=temp; Delayms(50); temp>>=1; } } }

//此程序的作者向往未来 #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={ 0x80,0xc0,0xe0,0xf0, 0xf8,0xfc,0xfe,0xff}; uchar code table2[]={ 0x7f,0x3f,0x1f,0x0f, 0x07,0x03,0x01,0x00}; uchar code table3[]={ 0x01,0x03,0x07,0x0f, 0x1f,0x3f,0x7f,0xff}; uchar code table4[]={ 0xe7,0xdb,0xbd,0x7e, 0xbd,0xdb,0xe7,0xff};

51单片机流水灯左移 右移控制程序

51 单片机流水灯左移右移控制程序 电路很简单8 位流水灯接在单片机的P1 口.如下是源代码: //============================================================ = //程序名:LLL22_4.C //程序功能:流水灯控制左移右移 //============================================================ == #include//头文件L_M(); //流水灯左移控制程序R_M(); //流水灯右移控制程序 //============================================================ === main() //主函数{ while(1) //无限循环{ L_M(); //调用左移程序R_M(); //调用右移程序} } //========左移控制程序 ============================================== L_M() //左 移主函数{ unsigned char i,temp,a,b; //声明无符号字符型变量A,TEMP I,B unsigned int s; //声明无符号整型变量S temp=0xfe; //左移初始 值P1=temp; //P1 输出信号点亮发光管for( s=0;s>(8-i) ; //数 据右移(8-I)位P1=a|b ; //逻辑或运算,并输出到P1 口for(s=0;s>i; b=temp<<(8-i); //数据右移(8-I)位P1=a|b; //逻辑或运算, 并输出到P1 口for(s=0;s<30000;s++); //延时程序} } //============================================================ ===========tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

单片机流水灯的程序

单片机流水灯的程序 一、流水灯的概念 流水灯是一种在特定硬件基础上编写的程序,它可以通过单片机控制LED灯的亮灭,从而实现一种特定的灯光效果。流水灯的程序通常利用单片机的定时器/计数器功能,通过对GPIO(通用输入输出)口的操作,控制LED灯的亮灭状态。在程序运行时,LED灯按照特定的顺序逐个亮起,就像流水一样,因此被称为流水灯。 二、硬件组成 要实现流水灯效果,需要准备的硬件包括单片机、LED灯、限流电阻、杜邦线等。其中,单片机是核心控制单元,LED灯是显示设备,限流电阻用于保护LED灯,杜邦线用于连接单片机和LED灯。 三、程序编写 下面是一个基于Arduino的流水灯程序。Arduino是一种常用的单片机开发板,具有易于学习和使用的特点。在这个程序中,我们将使用Arduino板的数字口来控制LED灯的亮灭。 cpp

define NUM_LEDS 8 // LED灯的数量 void setup() { //初始化数字口为输出模式 for (int i = 0; i < NUM_LEDS; i++) { pinMode(i, OUTPUT); } void loop() { //逐个点亮LED灯 for (int i = 0; i < NUM_LEDS; i++) { digitalWrite(i, HIGH); //点亮LED灯 delay(200); //延时200毫秒 digitalWrite(i, LOW); //熄灭LED灯 }

四、程序调试 将程序上传到Arduino板,然后依次连接好LED灯和限流电阻,最后用杜邦线将它们连接到Arduino板的数字口上。当程序运行时,应该可以看到LED灯按照特定的顺序逐个亮起,形成流水灯效果。如果出现问题,可以检查硬件连接是否正确,或者修改程序中的延时时间等参数。 单片机心型流水灯程序 随着科技的不断发展,单片机已经成为了现代电子设备中不可或缺的一部分。其中,流水灯程序作为一种常见的单片机应用,被广泛应用于各种场合。本文将介绍一种基于单片机的简单心型流水灯程序,以帮助读者更好地了解这方面的知识。 一、硬件准备 为了实现心型流水灯程序,我们需要准备以下硬件: 1、单片机开发板(如AT89C51) 2、发光二极管若干

单片机C语言程序设计实训100例--基于

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例 第01 篇基础程序设计 01 闪烁的LED /* 名称:闪烁的LED 说明:LED按设定的时间间隔闪烁 */ #include #define uchar unsigned char #define uint unsigned int sbit LED=P1^0; //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { while(1) { LED=~LED; DelayMS(150); } } 02 从左到右的流水灯 /* 名称:从左到右的流水灯 说明:接在P0口的8个LED 从左到右循环依次点亮,产生走 马灯效果 */ #include #include #define uchar unsigned char #define uint unsigned int //延时

void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { P0=0xfe; while(1) { P0=_crol_(P0,1); //P0的值向左循环移动 DelayMS(150); } } 03 8只LED左右来回点亮 /* 名称:8只LED左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { uchar i; P2=0x01; while(1) { for(i=0;i<7;i++) {

stc 单片机闪烁灯、流水灯查表法的实现

Stc 单片机闪烁灯、流水灯查表法的实现 闪烁灯 1.实验任务如电路原理图所示:在P2.0端口上接一个发光二极管L1,使L1在不停地 一亮一灭,一亮一灭的时间间隔为0.2秒。

3.系统板上硬件连线把“单片机最小系统”中的P2.0端口用导线连接到发光二极管 L1端口上。 1.实验任务利用取表的方法,使端口P2做单一灯的变化:左移2次,右移2次,闪烁2

次(延时的时间0.2秒) 3.硬件实现把“单片机最小系统”P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着 L8。 5. C语言源程序 #include unsigned char code table[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe, 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe, 0x00,0xff,0x00,0xff, 0x01}; unsigned char i; void delay(void) { unsigned char m,n,s; for(m=20;m>0;m--)

for(n=20;n>0;n--) for(s=248;s>0;s--); } void main(void) { while(1) { if(table!=0x01) { P1=table; i++; delay(); } else { i=0; } } }

单片机流水灯实验电路图+仿真

单片机实验 项目____拉幕式数码显示_______ 学号___1204180217_____ 专业__能源工程及其自动化__ 班级____02____________

姓名___邵鹏程_________ 一、实验目的 1,对单片机进一步了解熟悉 2,掌握数码管显示技术及编程 3,巩固理论知识及 二、实验内容 用51单片机8位控制数码管,在数码管上显示“01234567”,并能循环显示。 三、实验原理图

四、程序设计方法 1、动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显式的时间大约在1ms到4ms之间,所以为了保证正确显示,必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器来控制,每定时1ms对数码管刷新一次。 2、在进行数码显示的时候,要对显示单元开辟8个 显示缓冲区,每个显示缓冲区装有显示的不同数据即可

五、C语言源程序 #include #define uint unsigned int #define uchar unsigned char uchar code DIS_SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; uchar code DIS_BIT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //--------------------------------------------------- void delay1ms(uint i) {

单片机流水灯实验报告

一、实验目的 初步认识单片机实验如何进行操作,明确单片机和计算机的关系 学习利用C语言进行编程,在流水灯基础上进一步进行改进设计出独立按键。 二、实验原理 使用C语言写出流水灯独立按键的代码并将其转换成单片机可执行和二进制代码即机器语言,将单片机各部分连接好,并将其连接到计算机主机上,通过STC-ISP软件使单片机执行转化好的二进制代码,进而设计出独立按键。 实验原理图: 三、实验要求 用按键控制流水灯的流动方向、流速、闪烁方式等 四、实验内容及步骤 1.连接试验相关模块连线。 1.#include 2.sbit k1=P1^0; 3.sbit k2=P1^1;

4.sbit k3=P1^2; 5.unsigned char direction=0x00; 6.unsigned char speed=0x00; 7.int speedvalue=10000; 8.unsigned char led=0x01; 9.void delay(int t) 10.{ 11.while(t) 12.t--; 13.} 14.void main() 15.{ 16.while(1) 17.{ 18.if(k1==0) 19.{ 20.direction=~direction; 21.} 22.if(k2==0) 23.{ 24.delay(1000); 25.speedvalue+=5000;

26.if(speedvalue==60000) 27.{ 28.speedvalue=10000; 29.} 30.while (!k2); 31.} 32.if(k3==0) 33.{ 34.delay(1000); 35.speedvalue-=5000; 36.if(speedvalue==0) 37.{ 38.speedvalue=30000; 39.} 40.while(!k3); 41.} 42.if(direction==0x00) 43.{ 44.led=led<<1; 45.if(led==0x00) 46.{ 47.led=0x01;

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么 功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^) 我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机 上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。 #include //头文件定义。或用#include其具体的区别在于:后者定义了更多的地址空间。 //在Keil安装文件夹中,找到相应的文件,比较一下便知! sbit P1_0 = P1 ^ 0; //定义管脚 void main (void) { while(1) { P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效 } } 就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。 P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。 while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。这里就不再讲了。 点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其 实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在 P1_1--P1_7上再接7个LED即可。例程如下: #include sbit P1_0 = P1 ^ 0; sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2; sbit P1_3 = P1 ^ 3; sbit P1_4 = P1 ^ 4; sbit P1_5 = P1 ^ 5; sbit P1_6 = P1 ^ 6; sbit P1_7 = P1 ^ 7; void Delay(unsigned char a) { unsigned char i; while( --a != 0) {

单片机编程入门:单片机流水灯程序

单片机编程入门:单片机流水灯程序 今日就来教教大家怎么玩玩51单片机,当然了,首先有一个必要的条件就是你必需要会c语言,目前高校里面有开的关于微机原理的课的,上课的时候,老师还说:“你们要多学学汇编语言,对你们以后学习单片机有用”,而事实上后来才发觉c语言才是最重要的。 要想玩单片机,就必需要知道最重要的是什么,对于一块51单片机的开发板来说,最重要的就是要认仔细真的看它的原理图,原理图才是最重要的。 今日先说说最基本的,就是怎么玩流水灯,老样子,先看看原理图: 可以看到,总共是八个LED灯,都是由单片机的P1口掌握的,并且可以知道当端口为低电平常,灯就会亮,大家肯定要留意这一点,目前市场上51的开发板还是有特别多的,你必需要知道你的板子上LED灯是高电平使能还是低电平使能。像我这块就是低电平使能,写程序的话,我们可以用十六进制的代码写, 任意一个十六进制的数都可以拆分成八位的二进制数,而计算机只识别二进制,这样我们可以直接掌握LED灯。比如我现在写一个代码P1 = 0xfe,那么把它变为二进制后就是1111 1110 这样的话,正好对应八个LED灯,最终一位是零,那么也就是最终一个LED灯亮了,其余的则是全灭状态。

现在我们可以玩玩流水灯,看一下这个程序:看主函数main 里面的代码,P1 = 0xff 说明最开头是全灭状态,定义一个for循环,以八位为一个循环,当然也可以看到,最重要的便是P1 = P1》1这个代码,相当于说是把1111 1111 这个代码整体向右移位,比如说移位一次,那么就会变成0111 1111,那么就会有一个灯亮,移位两次,就会变成0011 1111, 就会有两个灯亮,以此类推下去,等就会渐渐亮起来。也就是流水灯咯。 大家可以自己随便修改,看看各种亮灯方式。

单片机C语言程序设计实训100例——基于8051+Proteus仿真(前25题)

单片机C语言程序设计实训100例 ——基于8051+ Proteus仿真01 闪烁的LED /*名称:闪烁的LED 说明:LED按设定的时间间隔闪烁*/ #include #define uchar unsigned char #define uint unsigned int sbit LED=P10; //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { while(1) { LED=~LED; DelayMS(150); } } 02从左到右的流水灯 /*名称:从左到右的流水灯 说明:接在P0口的8个LED 从左到右循环依次点亮,产生走 马灯效果*/ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) {

for(i=0;i<120;i++); } } //主程序 void main() { P0=0xfe; while(1) { P0=_crol_(P0,1); //P0的值向左循环移动 DelayMS(150); } } 038只LED左右来回点亮 /*名称:8只LED左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { uchar i; P2=0x01; while(1) { for(i=0;i<7;i++) { P2=_crol_(P2,1); //P2的值向左循环移动 DelayMS(150); } for(i=0;i<7;i++) { P2=_cror_(P2,1); //P2的值向右循环移动

单片机C语言程序设计实训100例—基于.8051+Proteus仿真

《基于8051+Proteus仿真》案例 第01 篇基础程序设计 01 闪烁的LED /* 名称:闪烁的LED 说明:LED按设定的时间间隔闪烁 */ #include #define uchar unsigned char #define uint unsigned int sbit LED=P1^0; //延时 void DelayMS { uchar i; while { for; } } //主程序 void main<> { while<1> { LED=~LED; DelayMS<150>; } } 02 从左到右的流水灯 /* 名称:从左到右的流水灯 说明:接在P0口的8个LED 从左到右循环依次点亮,产生走 马灯效果 */ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS {

while { for; } } //主程序 void main<> { P0=0xfe; while<1> { P0=_crol_; //P0的值向左循环移动 DelayMS<150>; } } 03 8只LED左右来回点亮 /* 名称:8只LED左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS { uchar i; while { for; } } //主程序 void main<> { uchar i; P2=0x01; while<1> { for { P2=_crol_; //P2的值向左循环移动 DelayMS<150>; } for

基于单片机的花样流水灯设计

题目基于单片机的花样流水灯 姓名王志远学号 201103320275 所在系电子电气工程学院专业年级 P11电气自动化五班指导教师李霞 二〇一二年十二月二十八日

摘要 本文是基于51单片机的花样流水灯的项目设计,在项目程序设计中运用了单片机AT89C51芯片,在程序检测与试验中实现了计数清零(CLR)暂停(LJMP)延时(DELAY)进而实现流水灯循环点亮,控制8个发光二极管的流水亮灭。最后通过实验体现单片机在现实生活中的作用。

目录 摘要 (2) 目录 (3) 一.引言 (4) 二、设计目的 (5) 三、设计要求 (5) 四.硬件组成 (5) 五.软件编程 (7) 5.1流程框图 (7) 5.2 花样流水灯主程序 (8) 六、总结与体会 (10) 七、参考文献 (11)

一.引言 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。 单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发更快地成为单片机领域的优秀人才。

流水灯程序

图1流水灯硬件原理图 从原理图中可以看出,假如要让接在PLO 口的LEDI 亮起来,那么只要把 P1.0 口的电平变为低电平就可以了;相反,假如要接在PLO 口的LEDl 熄灭,就 要把PLO 口的电平变为高电平洞理,接在P1.1~PL7 口的其他7个LED 的点 亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管 LED1-LED8依次点亮、熄灭,8只LED 灯便会一亮一暗的做流水灯了。在此 我们还应留意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很 短,我们在掌握二极管亮灭的时候应当延时一段时间,否则我们就看不到“流水” 效果了。 3.软件编程 单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后, 我们还不能看到流水灯循环点亮的现象,我们还需要告知单片机怎么来进行工 PlO POO Pll POl PlJ POi PlJ P03 Pl* PO* P15 PO 5 Pl 3 PO 4 P17 λ!SS>C51 POT am PJO nττo Pn P22 Il pn IO P” P25 I∑∖T> PY P27 Xl X : XXD !XD KD ALEP Tl PSHT ∖n 47Kx8 VCC LEDl -M — LED) W LED) LED1 W * LEDS 人K LEDj W LED7 W -44 LEDS -M

作,即编写程序掌握单片机管脚电平的凹凸变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简洁的流水灯掌握功能即实现8个LED灯的循环点亮,来介绍实现流水灯掌握的几种软件编程方法。 3.1位控法 这是一种比较笨但又最易理解的方法,采纳挨次程序结构,用位指令掌握Pl 口的每一个位输出凹凸电平,从而来掌握相应LED灯的亮灭。程序如下:ORG OOOOH ;单片机上电后从0000H地址执行 AJMPSTART ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开头地址 START : MOV SP , #60H ;设置堆栈起始地址为60H CLRPl.0;PLO输出低电平,使LEDl点亮 ACALL DELAY ;调用延时子程序 SETB P1.0;P1.0输出高电平,使LEDl熄灭 CLR Pl.l ;P1.1输出低电平,使LED2点亮

基于51单片机的C语言程序设计

基于51单片机的C语言程序设计实训100例 第 01 篇基础程序设计 01 闪烁的LED /* 名称:闪烁的LED 说明:LED按设定的时间间隔闪烁 */ #include #define uchar unsigned char #define uint unsigned int sbit LED=P1^0; //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { while(1) { LED=~LED; DelayMS(150); } } 02 从左到右的流水灯 /* 名称:从左到右的流水灯 说明:接在P0口的8个LED 从左到右循环依次点亮,产生走 马灯效果 */ #include #include #define uchar unsigned char #define uint unsigned int

void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { P0=0xfe; while(1) { P0=_crol_(P0,1); //P0的值向左循环移动 DelayMS(150); } } 03 8只LED左右来回点亮 /* 名称:8只LED左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { uchar i; P2=0x01; while(1) {

相关文档
相关文档 最新文档