跑马灯的C语言简洁程序
单片机汇编语言跑马灯

单片机汇编语言跑马灯实验一跑马灯-亮灯左移右移循环黄天佑 20132301155一、实验目的1、进一步熟悉keil C仿真软件及单片机实验板的使用。
2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。
3、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。
4、了解单片机汇编语言程序的设计和调试方法。
二、实验原理1、实验板硬件电路图2、单片机流水灯程序设计(1)流水灯程序设计思路及程序流程。
实现流水灯的方法有很多,这里介绍一种。
开始灯向左移(2)产生流水灯效果程序(逐条程序加注释)start:mov R0,#8 ; 设置左移8次mov A,#0FEH; 存入开始亮灯的位置LOOP: mov P0,A; 传送P0并输出ACALL DELAY; 调用延时程序RL A; 左移1位DJNZ R0,LOOP; 判断移送次数mov R1,#8; 设置右移8次LOOP1:RR A; 右移1位mov P0,A; 传送到P0口并输出ACALL DELAY; 调用延时程序DJNZ R1,LOOP1; 判断右移次数JMP start; 重新设定显示DELAY: mov R5,#10; 延时0.1s子程序D1: mov R6,#100;D2: mov R7,#100;DJNZ R7,$;DJNZ R6,D2;DJNZ R5,D1;RET ; 子程序返回END ; 程序结束三、实验步骤及调试过程1、汇编语言程序的编写与调试(1)新建一个工程(2)保存文件,设一个文件名(3)找到对应单片机的芯片,这里我们选AT89C51即可接着我们新建一个文本写程序(1)(2)保存文件名,注意文件名的后缀应该为.asm (汇编语言程序的格式)接着把我们的文本导入到工程里面去:(1)(2)点击Add,再Close即可2.汇编语言程序编译及下载(1)这里要设置一个输出.hex文件(2)点击生成工程相应的文件同时可以观察下面的结果:0 Error(s),即可。
嵌入式跑马灯实验

一、实验名称:跑马灯二、实验要求:编写程序控制跑马灯的亮灭:首先是全不亮,接着第1个灯亮,第2个灯亮,第3个灯亮,第4个灯亮,最后所有的灯一起亮,即按顺序亮,然后全亮,最后全灭,顺序循环。
最后蜂鸣器响,然后灯全部灭。
三、实验步骤1、点击WINDOWS 操作系统的开始-> 程序-> ARM Developer Suite v1.2 ->CodeWarrior forARM Developer Suite 启动ADS1.2 IDE 或双击CodeWarrior for ARMDeveloper Suite 快捷方式起动启。
2、打开原有的有关跑马灯实验的工程。
3、源程序代码:。
/******************************************************************** ********* File:LEDCON.C* 功能:LED闪烁控制。
对发光二极管LED4进行控制,采用软件延时方法。
* 使用I/O口直接控制LED,采用灌电流方式。
* 说明:将跳线器JP8_LED4短接。
********************************************************************* *******/#include "config.h"#define LEDCON4 0x00002000 /* P0.13引脚控制LED4,低电平点亮*/#define LEDCON1 0x00000400 /* P0.10引脚控制LED1,低电平点亮*/#define LEDCON2 0x00000800 /* P0.11引脚控制LED2,低电平点亮*/#define LENCON3 0x00001000 /* P0.12引脚控制LED3,低电平点亮*/#define BEEP 0x00000080 /* P0.7引脚控制蜂鸣器,低电平响*/#define ALL 0x00003C80#define LEDALL 0x00003C00/******************************************************************** ********* 名称:DelayNS()* 功能:长软件延时* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无********************************************************************* *******/void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);/******************************************************************** ********* 名称:main()* 功能:控制LED闪烁********************************************************************* *******/int main(void){ PINSEL0 = 0x00000000; // 设置所有管脚连接GPIOPINSEL1 = 0x00000000;IODIR = ALL; // 设置ALL控制口为输出while(1) //实现循环{IOSET =ALL;//初始化所有的灯灭IOSET =BEEP;// 蜂鸣器不响IOCLR = LEDCON1; //低电平灯亮DelayNS(100); //延迟时间IOSET = LEDCON1; //高电平灯灭DelayNS(100); //延迟时间IOCLR = LEDCON2;DelayNS(100);IOSET = LEDCON2;DelayNS(100);IOCLR = LEDCON3;DelayNS(100);IOSET = LEDCON3;DelayNS(100);IOCLR = LEDCON4;DelayNS(100);IOSET = LEDCON4;DelayNS(100);IOCLR =ALLLED;//所有的灯亮DelayNS(100);IOCLR =BEEP;//蜂鸣器响DelayNS(100);}return(0);4、调试程序观察实验结果。
跑马灯程序

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char sbit P20=0XA0;//定义端口bit m;//定义mvoid dly(uint n)//延时程序{uchar j;while(n--){for(j=0;j<113;j++);}}void main(){P0=0XFE;//对P0端口赋初值while(1)//死循环{if(P20==0){dly(10);//防抖if(P20==0)m=~m;}while(!P20);//放手程序dly(500);if(m==0){P0=_crol_(P0,1);//左移}else{P0=_cror_(P0,1);//右移}}}#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char sbit P20=0XA0;//对P2.0赋初值uint n;//定义nvoid dly(uint n)//延时程序{uchar j;while(n--){for(j=0;j<113;j++);}}void main(){P0=0XFE;//对P0赋初值n=200;//确定初始的延时次数while(1)//死循环{if(P20==0)//防抖{dly(10);if(P20==0)n=n+200;}while(!P20);//放手程序while(n>600)//确定n的值n=200;dly(n);P0=_crol_(P0,1);}}换向改变速度中断#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charbit k;//定义kuint n;//定义nvoid dly(uint n)//延时程序{uchar j;while(n--){for(j=0;j<113;j++);}}void main(){P0=0XFE;//对P0赋初值n=200;//确定n的初值IT0=1; //使其在下降沿有效IT1=1;//使其在下降沿有效EA=1; //总体允许EX0=1;//允许EX1=1;//允许while(1)//死循环{dly(n);if(k==0)P0=_crol_(P0,1);elseP0=_cror_(P0,1);}}void speed() interrupt 0 //改变其速度的子函数{n=n+200;while(n>600)n=200;}void wenkai() interrupt 2 //改变其方向的子函数{k=~k; //对k取反}。
项目1-流水灯(跑马灯)实现

do{for (b=0; b<32; b++) { for(a=0; a<30000; a++); //延时一段时间 P1 = design[b]; //读已定义的花样数据并写花样数据到P1口
for (a=0;a<10000;a++)
P1_1 = 1; }
}while(1);
}
2021/4/8
9
习题: 用AT89C51实现8只LED灯左右来回循环
滚动点亮,产生来回走马灯效果。画出原理 图,编写出程序并仿真实现。
2021/4/8
10
感谢您的阅读收藏,谢谢!
2021/4/8
11
项目一、流水灯(跑马灯)设计
电子信息学院 电子技术教研室
2021/4/8
1
一、闪烁的LED
C1
1. ONE LED
2021/4/8
22pf
C2
22pf
R1
10k
C3
U1 X1 19 XTAL1
12M 18 XTAL2
9 RST
10uF
R2
D1
220
29 30 31
PSEN ALE EA
1 2 3 4 5 6 7 8
}
}while(1);
}
2021/4/8
8
#include <AT89X51.H>
void main(void) { unsigned int a; //定义a 为int 变量
unsigned char b; //定义b 为char 变量
跑马灯 ARM程序

#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include "paomadeng_ioctl.h"int main(){int fd_paomadeng;char on=1;char off=0;fd_paomadeng=open("/dev/paomadeng",O_WRONLY);if(fd_paomadeng<0){perror("Open device paomadeg error.\n");return -1;}while(1){ioctl(fd_paomadeng,LED_RED,(unsigned long)on);/* red light on*/sleep(1);ioctl(fd_paomadeng,LED_RED,(unsigned long)off);/*red light off*/ioctl(fd_paomadeng,LED_GREEN,(unsigned long)on);/*green light on*/sleep(1);ioctl(fd_paomadeng,LED_GREEN,(unsigned long)off);/*green light off*/ioctl(fd_paomadeng,LED_BLUE,(unsigned long)on);/*blue light on*/sleep(1);ioctl(fd_paomadeng,LED_BLUE,(unsigned long)off);/*blue light off*/ }return 0;}/*file name:leds.cdescription: the driver of the ledsauthor: Lilianwencreate date:2011-11-30 12:48:00modify :NULL*///#include <linux/module.h>/*needed for all modules*///#include <linux/kernel.h> /*needed for all modules*///#include <linux/init.h> /*needed for the module-macros */ //#include <linux/config.h>#include <module.h>#include <linux/fs.h>#include <linux/iobuf.h>#include <linux/major.h>#include <linux/blkdev.h>#include <linux/capability.h>#include <linux/smp_lock.h>#include <asm/uaccess.h>#include <asm/hardware.h>#include <asm/arch/cpu_s3c2410.h>#include <asm/io.h>#include <linux/vmalloc.h>#include "paomadeng_ioctl.h"#define LED_MAJOR 232#define LED_GPBCON (*(volatile long *)rGPBCON)#define LED_GPBDA T (*(volatile long *)rGPBDA T)#define LED_GPBUP (*(volatile long *)rGPBUP)int rGPBCON,rGPBDA T,rGPBUP;devfs_handle_t devfs_paomadeng_handle;int paomadeng_open(struct inode *led_i,struct file *filp){LED_GPBDA T &= 0xfffffdfc;//turned off all lights.printk("open paomadeng device success.\n");return 0;}/*int led_write(struct file *filp,const void *buf,size_t size,loff_t *offp){return 0;}*/int paomadeng_ioctl(struct inode *led_i,struct file *filp,unsigned int command,unsigned long arg) {int error=0;switch(command){case LED_RED:printk("red light turned on.\n");if(arg==0)LED_GPBDA T &=~(1<<0);elseLED_GPBDA T |=(1<<0);break;case LED_GREEN:printk("green light turned on.\n");if(arg==0)LED_GPBDA T &=~(1<<1);elseLED_GPBDA T |=(1<<1)break;case LED_BLUE:printk("blue light turned on.\n");if(arg==0)LED_GPBDA T &=~(1<<9);elseLED_GPBDA T |= (1<<9);break;default: error = -EINV AL;}return error;}int paomadeng_release(struct inode *led_i,struct file *filp){printk("Close paomadeng device success.\n");return 0;}struct file_operations paomadeng_fops ={open: paomadeng_open,/*write: led_write,*/ioctl: paomadeng_ioctl,release: paomadeng_release,};static int __init paomadeng_init(void){rGPBCON = ioremap(0x56000010,4);rGPBDA T = ioremap(0x56000014,4);rGPBUP = ioremap(0x56000018,4);//outputLED_GPBCON &=0xfff3fff0;LED_GPBCON |=0x00040005;LED_GPBDA T |= 0x0203;//all turned on;LED_GPBUP &=0xfdfc;//enabledevfs_paomadeng_handle = devfs_register(NULL,"paomadeng",DEVFS_FL_DEFAULT,LED_MAJOR,0,S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP,&paomadeng_fops,NULL);return 0;}static void __exit paomadeng_exit(void){devfs_unregister(devfs_paomadeng_handle);}module_init(paomadeng_init);module_exit(paomadeng_exit);//MODULE_LICENSE("GPL");//MODULE_AUTHOR("Lilianwen");。
单片机C语言跑马灯按键选择花样显示

按键选择花样显示#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器#include <intrins.h>//--定义要使用的IO口--//#define GPIO_KEY P1 //独立键盘用P1口#define GPIO_LED P0 //led使用P0口//--定义全局函数--//void Delay10ms(unsigned int c); //延时10msunsigned char Key_Scan();void LED1();void LED2();void LED3();void LED4();void LED5();void LED6();void LED7();void LED8();void main(void){unsigned char keyNum;GPIO_LED=0X00;while (1){keyNum = Key_Scan(); //扫描键盘switch (keyNum){case(0xFE) : //返回按键K1的数据LED1();break;case(0xFD) : //返回按键K2的数据LED2();break;case(0xFB) : //返回按键K3的数据LED3();break;case(0xF7) : //返回按键K4的数据LED4();break;case(0xEF) : //返回按键K5的数据LED5();break;case(0xDF) : //返回按键K6的数据LED6();break;case(0xBF) : //返回按键K7的数据LED7();break;case(0x7F) : //返回按键K8的数据LED8();break;default:break;}}}unsigned char Key_Scan(){unsigned char keyValue = 0 , i; //保存键值//--检测按键1--//if (GPIO_KEY != 0xFF) //检测按键K1是否按下{Delay10ms(1); //消除抖动if (GPIO_KEY != 0xFF) //再次检测按键是否按下{keyValue = GPIO_KEY;i = 0;while ((i<50) && (GPIO_KEY != 0xFF)) //检测按键是否松开{Delay10ms(1);i++;}}}return keyValue; //将读取到键值的值返回}void Delay10ms(unsigned int c) //误差0us {unsigned char a, b;for (;c>0;c--){for (b=38;b>0;b--){for (a=130;a>0;a--);}}}* 函数功能: LED左移闪烁两次void LED1(){unsigned char i;GPIO_LED = 0x01;for (i=0; i<16; i++){GPIO_LED = _crol_(GPIO_LED, 1);Delay10ms(5);}}* 函数功能: LED右移闪烁两次void LED2(){unsigned char i;GPIO_LED = 0x80;for (i=0; i<16; i++){GPIO_LED = _cror_(GPIO_LED, 1);Delay10ms(5);}}* 函数功能: LED交替闪烁void LED3(){GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);}* 函数功能: LED交替闪烁void LED4(){GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);}* 函数功能: LED交替闪烁void LED5(){GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);}* 函数功能: LED交替闪烁void LED6(){GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);}* 函数功能: LED1到LED6来一遍void LED7(){LED1();LED2();LED3();LED4();LED5();LED6();}* 函数功能: 全灭void LED8(){GPIO_LED = 0x00;}。
ARM裸机程序——跑马灯

ARM裸机程序——跑马灯最近看了一些启动代码的分析,还有很多不懂的地方,打算后面再写关于启动代码的分析。
先跑了一些无操作系统裸机程序,来熟悉硬件。
开发板用的是FL2440。
先看这样一段C 代码#define GPBCON (*(volatile unsigned long *)0x56000010) //这是寄存器的定义,由于GPB 引脚在硬件上连接到了LED 上,所以用到GPB 引脚,那么就要定义相关寄存器,该寄存器定义了GPB 相关引脚的工作方式。
#define GPBDAT (*(volatile unsigned long *)0x56000014) //该寄存器用来给引脚上的数据。
int main(){GPBCON=0x00000400;GPBDAT=0x00000000;return 0;}这是完整的跑马灯程序。
GPBUP 为上拉使能寄存器,在使用管脚过程中,一般定义为使能无效。
程序开头的地址声明以后可以定义为#include “2440addr.h”,这2440addr.h 文件包含了arm 中所有的寄存器地址的定义。
/* 地址声明*/#define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014)#define GPBUP (*(volatile unsigned long *)0x56000018)/* 变量声明*/#define uint unsigned int#define LED0_ON() (GPBDAT &= ~(1#define LED0_OFF() (GPBDAT |= (1/* 函数声明*/void Delay(uint);/* 延迟函数*/void Delay(uint x){uint i,j,k;for(i=0;i/* 主函数*/int Main(void) {GPBCON = (1 这里面还一些软件相关配置的问题就不说了。
跑马灯实验代码

#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
PORTB=PORTA;
}
}
方法2:DIP开关低四位由A口低四位输入,经A口高四位送LED灯低四位输出
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
for(j=0;j<10000;) j++;
}
void main(void)
{
unsigned char i,settime;
unsigned int j;
DDRB=0xFF;
PORTB=0x7F;
DDRA=0xF0;
flag=0;
asm ANDCC #$BF
EnableInterrupts;
i=0;
PORTB|=0x80;
if(PORTB==0xFF)
PORTB=0x7F;
}
}
void interrupt 6 IRQ(void)
{
flag=1;
}
**************************************************************************************************************************************************************
c语言跑马灯与数字钟融合

c语言跑马灯与数字钟融合
最近,我学习了一下C语言中的跑马灯和数字钟。
它们都是C语
言中的经典例程。
跑马灯是一种灯光效果,它可以让一组灯光像跑一样闪烁,非常
漂亮。
在C语言中,我们可以通过不断改变控制灯光的代码来实现跑
马灯效果。
我们可以通过for循环来改变代码,使灯光不断地亮和灭。
数字钟是一种可以显示时间的时钟。
在C语言中,我们可以通过
调用系统时间函数,获取当前时间,并将其显示在屏幕上,以实现数
字钟效果。
我们还可以通过for循环和延时函数,让数字钟的时间不
断更新,实现动态显示数字钟的效果。
将跑马灯和数字钟融合起来,可以得到一个更加有趣的程序。
我
们可以让数字钟的时间不断更新,同时在屏幕上显示一组跑马灯效果。
这样可以让我们在忙碌的工作中,时时刻刻感受到美好的视觉享受,
提高工作效率。
总之,跑马灯和数字钟是C语言中的两个经典案例。
它们的结合
将可以带来更加丰富多彩的视觉效果,对于学习C语言的人来说,也
是一个非常有意义的实践项目。
走马灯程序(五篇)

走马灯程序(五篇)第一篇:走马灯程序#include sfr a=0x80;sfr b=0x90;unsigned char j;void delay(void){unsigned int i;for(i=0;i<32800;i++);} void main(void){while(1){a=0xfe;//一delay();a=0xfd;delay();a=0xfb;delay();a=0xf7;delay();a=0xef;delay();a=0xdf;delay();a=0xbf;delay();a=0x7f;delay();a=0xff;b=0x7f;delay();b=0xbf;b=0xdf;delay();b=0xef;delay();b=0xf7;delay();b=0xfb;delay();b=0xfd;delay();b=0xfe;delay();b=0xff;a=0xfe;//一一delay();a=0xfb;delay();a=0xef;delay();a=0xbf;delay();a=0xff;b=0x 7f;delay();b=0xdf;delay();b=0xf7;delay();b=0xfd;delay();b=0xff;a =0xfe;//一三delay();a=0xef;delay();a=0xff;b=0x7f;delay();b=0xf7;delay();b=0x ff;a=0xfc;//二delay();a=0xf3;delay();a=0xcf;delay();a=0x3f;delay();a=0xff;b=0x 3f;delay();b=0xcf;delay();b=0xf3;delay();b=0xfc;delay();b=0xff;a=0xfc;//二二delay();a=0xcf;delay();a=0xff;b=0x3f;b=0xf3; delay();b=0xff;a=0xf8;//三一delay();a=0x8f; delay();a=0xff;b=0x1f; delay();b=0xf1; delay();b=0xff;a=0xf0;//四delay();a=0x0f; delay();a=0xff;b=0x0f; delay();b=0xf0; delay();b=0xff;a=0xe0;//五三delay();b=0x07; delay();b=0xff;a=b;a=0xc0;//六二delay();b=0x03; delay();b=0xff;a=b;delay();a=0x80;//七一delay();b=0x01; delay();b=0xff;a=b;delay();a=0x00;//八delay();a=0xff;b=0x00; delay();b=0xff;a=b;delay();a=0xfe; delay();a=0xfc; delay();a=0xf8; delay();a=0xf0;a=0xe0; delay(); a=0xc0; delay(); a=0x80; delay(); a=0x00; delay(); b=0x7f; delay(); b=0x3f; delay(); b=0x1f; delay(); b=0x0f; } } delay(); b=0x07; delay(); b=0x03; delay(); b=0x01; delay(); b=0x00; a=b; delay(); b=0xff; a=b; delay();第二篇:走马灯制作走马灯制作教学教学目标:认识当灯笼内灯烛点燃後,热气上升,形成气流,从而推动叶轮旋转,於是剪纸随轮轴转动。
实验2 C语言程序设计及 LED跑马灯实验

BWSCON寄存器
0000 0000 0000 0000 0001 0000 0000 0000 0000 0001 0000 0000 0000 0000 0001 0000 0000 0000 0000 0010 0000 0000 0000 0000 0001 0000 0000 0000 0000 0010 0000 0000 0000 0000 0010
;将以上单独表达的各参数整合为32位字数据,以备写入REFRESH寄存器之用。
DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Tsrc<<18)+(Tchr<<16)+REFCNT)
本实验所需的存储器参数预定义(符号化表示)
DW16 DW32 B1_BWSCON B2_BWSCON B3_BWSCON B4_BWSCON B5_BWSCON B6_BWSCON B7_BWSCON B0_Tacs B0_Tcos B0_Tacc B0_Tcoh B0_Tah B0_Tacp B0_PMC B6_MT B6_Trcd B6_SCAN REFEN TREFMD Trp Tsrc Tchr REFCNT EQU (0x1) EQU (0x2) EQU (DW16) EQU (DW16) EQU (DW16) EQU (DW32) EQU (DW16) EQU (DW32) EQU (DW32) EQU 0x3 EQU 0x3 EQU 0x7 EQU 0x3 EQU 0x3 EQU 0x1 EQU 0x0 EQU 0x3 EQU 0x1 EQU 0x1 EQU 0x1 EQU 0x0 EQU EQU 0x1 EQU 0x2 EQU 1268 ; AMD flash(AM29LV160DB), 16-bit, for nCS1 ; PCMCIA(PD6710), 16-bit ; Ethernet(CS8900), 16-bit ; Intel Strata(28F128), 32-bit, for nCS4 ; A400/A410 Ext, 16-bit ; SDRAM(K4S561632C) 32MBx2, 32-bit ; N.C. ;0clk ;0clk ;14clk ;0clk ;0clk ;normal ;SDRAM ;3clk ;9bit ;Refresh enable ;CBR(CAS before RAS)/Auto refresh 0x1 ;3clk ;5clk Trc= Trp(3)+Tsrc(5) = 8clock ;3clk ;HCLK=105Mhz, (2048+1-7.81*100);75M->1463
单片机实例之跑马灯

图3-7 新建工程窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-8 新建工程窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-9 单片机选择窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-10 目的1属性设置窗口
文档仅供参考,如有不当之处,请联系改正。
DJNZ R7,LOOP
DJNZ R6,SS
整个子程序延时为: {[2μs×249+1+2]×200+2}×5=501010μs
汇编语言程序:
org 0000h LS:
setb p1.0 Lcall delay clr P1.0 Lcall delay sjmp $
文档仅供参考,如有不当之处,请联系改正。
4.完毕写入编程。
5.退出程序:左击界面右上角旳“x”按钮, 退出此程序。
文档仅供参考,如有不当之处,请联系改正。
文档仅供参考,如有不当之处,请联系改正。
任务二 跑马灯
本任务让图3-28中旳LED依次点亮
图3-28 LED硬件图
文档仅供参考,如有不当之处,请联系改正。
程序设计分析
为了让图3-28所示旳LED依次点亮,就是要求从P1口从 P1.0至P1.7依次输出低电平,其他引脚都输出高电平,就 能让被接在端口旳彩灯依次点亮。
KEIL 软件开发平台
图3-20 硬件查询窗口
I/O口全部打开界面
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-21 硬件I/0口查询窗口
文档仅供参考,如有不当之处,请联系改正。
跑马灯程序大全

LED 跑马灯(从右至左)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char #defi ne uint un sig ned int void DelayMS(ui nt x){uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0xfe;while(1){ if(P1==0xef)P1=0xfe; void main()elseP1=_crol_(P1,1);DelayMS(80);}}LED跑马灯(从左至右)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intvoid DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}{P仁Oxef;while(1){ if(Pl==0x7f)P仁Oxef;elseP1=_cror_(P1,1); DelayMS(40);}}LED跑马灯(左右循环)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++); }}void mai n(){uchar i;P仁0xef;while(1){for(i=0;i<4;i++){P1=_cror_(P1,1);DelayMS(40); }P1=0xfe;DelayMS(40); for(i=0;i<3;i++){P1=_crol_(P1,1);DelayMS(40); } P仁}单个LED的闪烁#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int sbit LED = P1A0;void DelayMS(ui nt x) {uchar i;while(x--){for(i=120;i>0;i--);}}void mai n(){while(1){LED = ~LED;DelayMS(150);}}连绵灯#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0x0e;while(1){ if(P1==0xb1)P1=0x0e;elseP1=_crol_(P1,1); DelayMS(80);}}。
跑马灯程序大全

LED 跑马灯(从右至左)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char #defi ne uint un sig ned int void DelayMS(ui nt x){uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0xfe;while(1){ if(P1==0xef)P1=0xfe; void main()elseP1=_crol_(P1,1);DelayMS(80);}}LED跑马灯(从左至右)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intvoid DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}{P仁Oxef;while(1){ if(Pl==0x7f)P仁Oxef;elseP1=_cror_(P1,1); DelayMS(40);}}LED跑马灯(左右循环)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++); }}void mai n(){uchar i;P仁0xef;while(1){for(i=0;i<4;i++){P1=_cror_(P1,1);DelayMS(40); }P1=0xfe;DelayMS(40); for(i=0;i<3;i++){P1=_crol_(P1,1);DelayMS(40); } P仁}单个LED的闪烁#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int sbit LED = P1A0;void DelayMS(ui nt x) {uchar i;while(x--){for(i=120;i>0;i--);}}void mai n(){while(1){LED = ~LED;DelayMS(150);}}连绵灯#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0x0e;while(1){ if(P1==0xb1)P1=0x0e;elseP1=_crol_(P1,1); DelayMS(80);}}。
2、用C语言实现各种灯光效果

00111111 11110000 11001111
位运算
左移: << 右移: >> 取反: ~ 按位与: & 按位或: | 按位异或: ^
高位移出,低位补0
低位移出,高位补0 0变1,1变0 和0与得0,和1与保持不变 和1或得1,和0或保持不变 和1异或取反,和0异或保持不变
延时效果的实现及延时长短的控制
bit
1位
0或1
#include<AT89X52.h> void main() { P2 = 0x7F; P2 = P2&0x0F; //按位与 P2 = 0xAA; P2 = P2&0x7F; }
01111111
按位与
00001111 00001111
按位与: 00得0,01得0,11得1 与的效果: 和0与得0,和1与保持不变
unsigned char i; i=0; while(i<100) { i = i+1; }
变量就是一个能存放数据的容器
i: 00000000
i: 00000001 i: 00000010
延时效果的实现及延时长短的控制
数据类型 unsigned char signed char unsigned int signed int 长 度 值 域 0~255 -128~+127 0~65535 -32768~+32767
#include<AT89X52.h> void main() { P2 = 0x01; P2 = P2<<1; //按位左移 P2 = P2<<1; P2 = P2<<1; P2 = P2<&X6 X5 X4 X3 X2 X1 X0