按钮控制流水灯C程序的编写

合集下载

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

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

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。

那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^)我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。

一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。

#include<reg51.h> //头文件定义。

或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。

//在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<reg51.h>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){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。

五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C 程序//功能:采用顺序结构实现的流水灯控制程序/*此方式中采用的是字操作(也称为总线操作)*/#include<regvoiddelay(unsignedchari);//延时函数声明voidmain()//主函数{while(1){P1=Oxfe;//点亮第1 个发光二极管,delay(200);//延时P1=Oxfd;//点亮第2 个发光二极管,delay(200);//延时P1=Oxfb;//点亮第3 个发光二极管delay(200);//延时P1=0xf7;〃点亮第4 个发光二极管delay(200);//延时P1=Oxef;//点亮第5 个发光二极管delay(200);//延时P1=Oxdf;//点亮第6 个发光二极管delay(200);//延时P1=Oxbf;//点亮第7 个发光二极管delay(200);//延时P1=0x7f; 〃点亮第8 个发光二极管delay(200);//延时}}//函数名:delay//函数功能:实现软件延时//形式参数:unsignedchari;//i 控制空循环的外循环次数,共循环i*255 次//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和kfor(k=0;k<i;k++) 〃双重for 循环语句实现软件延时for(j=0;j<255;j++);}//功能:采用循环结构实现的流水灯控制程序//此方式中采用的移位,按位取反等操作是位操作#include<reg包含头文件REGvoiddelay(unsignedchari); 〃延时函数声明voidmain()//主函数{unsignedchari,w;while(1){w=0x01;//信号灯显示字初值为01Hfor(i=0;i<8;i++){P1=~w;//显示字取反后,送P1 口delay(200);//延时w<<=1;//显示字左移一位}}}//函数名:delay//函数功能:实现软件延时//形式参数:unsignedchari;//i 控制空循环的外循环次数,共循环i*255 次//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和kj++);}/******// 功能:for(k=0;k<i;k++) 〃双重for 循环语句实现软件延时for(j=0;j<255;***************************************************************采用位运算符编写的流水灯控制程序,显示效果为挨次熄灭信号灯//此方式也是典型的顺序结构#include<regvoiddelay(unsignedchari); 〃延时函数声明voidmain()//主函数{while(1){P1=OxOO;〃P1 口全部清0,即点亮8 个发光二极管delay(200);//延时P1=P1|0x01;//熄灭第1 个发光二极管delay(200);//延时P1=P1|0x03;//熄灭第1、个发光二极管delay (200);//延时P1=P1|0x07;//熄灭第1〜3 个发光二极管delay(200);//延时P1=P1|0x0f;//熄灭第1〜4 个发光二极管delay(200);//延时P1=P1|0x1f;//熄灭第1〜5 个发光二极管delay(200);//延时P1=P1|0x3f; 〃熄灭第1〜6 个发光二极管delay(200);//延时P1=P1|0x7f; 〃熄灭第1〜7 个发光二极管delay(200);//延时P1=P1|0x7f;//熄灭所有发光二极管delay(200);//延时}}//函数名:delay//函数功能:实现软件延时//形式参数:unsignedchari;//i 控制空循环的外循环次数,共循环i*255 次//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和kfor(k=0;k<i;k++) 〃双重for 循环语句实现软件延时for(j=0;j<255;j++);}/**********************************************************///功能:采用数组实现的流水灯控制程序//此方式也是典型的循环结构#include<reg包含头文件REGvoiddelay(unsignedchari); 〃延时函数声明voidmain()//主函数{unsignedchari;unsignedchardisplay[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};while(1){for(i=0;i<8;i++){P1=display[i]; 〃显示字送P1 口delay(200);//延时}}}//函数名:delay//函数功能:实现软件延时//形式参数:unsignedchari;//i 控制空循环的外循环次数,共循环i*255 次//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和kfor(k=0;k<i;k++) 〃双重for 循环语句实现软件延时for(j=0;j<255;j++);}#include<reg#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharvoiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidmain(){uchara,i,j;while(1){for(j=0;j<2;j++){a=0xfe;for(i=0;i<8;i++){P2=a; delay(200);a=_crol_(a,1);//11110}a=0x7f;for(i=0;i<8;i++){P2=a; delay(200);a=_cror_(a,1);}}P2=0xff;for(j=0;j<10;j++)}}{}delay(300);P2=~P2;。

按键控制单片机改变流水灯速度

按键控制单片机改变流水灯速度

按键控制单片机改变流水灯速度/*程序效果:有三个按键,按下其中任意一个流水灯的速度改变*/#includereg52.h //52 系列单片机的头文件#define uchar unsigned char//宏定义#define uint unsigned intuchar count=40,flag=0; //定义刚开始的流水灯的速度,后一个为标志变量void main(){uchar i=0;//定义局部变量EA=1; //打开总中断ET0=1; //打开定时器TR0=1; //启动定时器TH0=(65536-50000)/256; //装初值TL0=(65536-50000)%256; P2=0xfe; //点亮第一个数码管,为下次循环做准备while(1){ if(flag) //flag 被置位{flag=0;//清零,为下次做准备P2=~P2; //取反P2=1;//左移一位P2=~P2; //取反i++;if(i==8) //移到第八个数码管,则从新装初值{i=0; P2=0xfe; } }P0=0xf0; //赋初值if((P00xf0)!=0xf0) //判断是否有按键按下{if(P0==0x70) //按下第一个按键count=60; //给count 从新赋值if(P0==0xb0) count=20; if(P0==0xd0) count=10;} }}void time0() interrupt 1 //定时器0{static uchar cnt; //定义静态变量TH0=(65536-50000)/256;TL0=(65536-50000)%256; cnt++; //计数if(cnt==count){ cnt=0; //清零flag=1; //置标志位}} tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

单片机流水灯程序

单片机流水灯程序

单片机流水灯程序流水灯是一种简单而常见的电子技术实验项目,也是学习掌握单片机编程的基本操作之一。

本文将介绍如何使用C语言编写单片机流水灯程序,并通过Markdown文本格式输出。

硬件准备在开始编写流水灯程序之前,我们需要准备以下硬件设备:1.单片机开发板(如:Arduino、STM32等)2.LED灯(可根据自己的需求选择,一般使用红色、黄色、绿色等常见颜色的LED灯即可)3.杜邦线(用于连接单片机和LED灯)程序编写引入头文件首先,我们需要引入相应的头文件,以便使用单片机相关的功能库和定义常量。

#include <Arduino.h>定义引脚接下来,我们需要定义引脚,将LED灯的接口与开发板的引脚连接起来。

#define LED_PIN_1 2#define LED_PIN_2 3#define LED_PIN_3 4#define DELAY_TIME 500在这个例子中,我们使用了3个LED灯,分别连接到开发板的2、3、4号引脚。

DELAY_TIME用于控制每个灯亮起的时间间隔,单位是毫秒。

初始化引脚在进入主程序之前,我们需要对引脚进行初始化,设置引脚的输出模式。

void setup() {pinMode(LED_PIN_1, OUTPUT);pinMode(LED_PIN_2, OUTPUT);pinMode(LED_PIN_3, OUTPUT);}主程序接下来就是我们的主程序部分,我们可以使用循环语句来实现LED灯的流水效果。

void loop() {digitalWrite(LED_PIN_1, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_1, LOW);digitalWrite(LED_PIN_2, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_2, LOW);digitalWrite(LED_PIN_3, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_3, LOW);}在这个例子中,我们依次点亮每个LED灯,并延迟一定的时间后熄灭,然后依次点亮下一个LED灯,以此循环。

CC2530按键控制流水灯

CC2530按键控制流水灯
按键控 制流水灯实验
1、适用平台 佳杰科技 Q2530SB 硬件平台
2、实验设备
1.RF2530N 或者 RF2530仿真器 1块 1块 1条 1个
2
3、实验目的
让用户学会按键应用是这一常用的人机交互方式。本实验用 D1, D2, D3 灯及按键 S1 为 外设。采用 P10、P11、P14 口为输出口,驱动 D1/D2/D3,P01 口为输入口,接受按键信号 输入(高电平为按键信号) 。
#include <ioCC2530.h> #define uint unsi gned int #define ucha r unsigned cha r //定义控制灯的端口 #define RLED #define GLED #define YLED #define KEY1 //函数声明 voi d Delay(uint); voi d Ini tIO(void); voi d Ini tKey(void); ucha r KeyScan(void); // 延时函数声明 //初始化函数声明 // 初始化按键函数声明 // 按键扫描函数声明 3 P1_0 P1_1 P1_4 P0_1 //定义 LED1 为 P10 口控制 //定义 LED2 为 P11 口控制 // 定义 LED3 为 P14 口控制 // 定义按键为 P01 口控制
4、实验相关寄存器
相关寄存器:P1,P1DIR,P0SEL,P0INP, P0,P0DIR(前面以介绍过的这里不再重复介绍,寄存器 功能说明请参阅 CC2530Datasheet.pdf ) P0SEL(0XF3) P0INP( 0X8F) P0( 0X80) P0DIR(0XFD) P0 [7:0 ]功能设置寄存器,默认设置为普通 I/ O 口 P0[7: 0]作输入口时的电路模式寄存器 P0[7: 0]位寻址 I/ O 寄存器 P0 口输入输出设置寄存器,0:输入,1:输出

C程序语言在电路板上编写一组流水灯

C程序语言在电路板上编写一组流水灯
会编译失败。
3.C语言每一条语句的最后均是;作为结束,没有这个编译器会报错误
的。
上面的程序中,读者可以在While{}大括号内增加各种变换模式,可以看
到比汇编更加直接和美观了,更重要的C语言的程序对于各种单片机都是通
用的。
读者可能发现了用OxFE代替了0x11111110,这个0XFE就是十六进制,
环境了。
第三步程序编写
点击P工程-N新建工程一在下图中输入LED,一选择,89C52。一点击
确认,一个新的工程就已经建立。
点击F文件一新建一即可建立一个编写文本,我们的程序就是在文本框
里编写的,点击保存并且将文本文件命名为LED.c。
在新的工程中,右击下面的SourceGroupl,选择增加文件到组,将我们刚
我们编写程序的时候书写16进制比二进制方便多了,为了读者的方便,以后
的例子都会用16进制代替,他们的代换关系如下表所示,1位16进制可以
表示4位二进制,见下表。
C程序语言在电路板上编写一组流水灯
用C程序语言,编写一个程序,让我们的电路板上,产生一组流水灯,
让大家看到我们的产品像流水一样闪动。
第一步确定目标:
第二步:找到工具并学会搭建第一个Keil开发平台
首先下载一个Ke112开发软件,相关下载也可找电子报网站下载,解压
缩之后就下面的文件。
先安装主程序内的Setup.EXE,双击。这就是我们大名鼎鼎的KEil编译
才的LED.添加到这个工程,下面正式编写代码。
编写好程序以后我们需要设置一下,这样才能生成Hex文件,点击
Project-设置成如下的界面然后点击OK,设置完毕,然后我们点击三个按
钮,即可生成HEX文件。
相关说明:

单片机流水灯c语言实现

单片机流水灯c语言实现
//使数字0--9循环显示
//------------------------------------------------
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE []=
red_a=1;yellow_a=1;green_a=0;
red_b=0;yellow_b=1;green_b=1;
delayMs(2000);
Operation_Type=2;
break;
case 2://东西向黄灯开始闪烁,绿灯关闭
delayMs(300);
yellow_a=!yellow_a; green_a=1;
while(x--)
{
for(i=0;i<120;i++);
}
}
//---------------------------------------------
//交通灯切换子程序
void Traffic_Light()
{
switch (Operation_Type)
{
case 1://东西向绿灯亮与南北向红灯亮
{
uchar i;
P2=0x01;//P2端口初始化
while(1)//死循环
{
for(i=0;i<7;i++)//i自加1,当i=7时执行第二个for语句
{
P2=_crol_(P2,1);//P2端口循环左移1位
delayMs(150);
}
for(i=0;i<7;i++)

用按键控制流水灯的例子

用按键控制流水灯的例子
main()
{while(1){P0=0xff;
while(!key1)aa();
while(!key2)bb();
while(!key3)cc();
while(!key4)dd();
}} �
int c[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; //逐盏点亮,逐盏灭掉数组
//************************************************************************************************************
{ int i=0,j=0,k=0,h=0;
loop:P0=0xff;
if(key4==0) //第一次判断是否有键按下
{for(i=0;i<30000;i++); //延时防抖动
if(key4==1) //判断按键是否弹起
while(1){P0=a[j];delay();j++;if(j==8)j=0; //左流水灯
这是我刚写的一个用按键控制流水灯的例子,很适合初学者的
/*硬件电路连接:流水灯接在P0口, 阳极接高电平,
阴极接P0口,4个按键分别接P3.4,P3.5, P3.6,P3.7 ,按下时是低电平 */
#include <regx51.h>
sbit key1=P3^4;
sbit key2=P3^5;
void bb() // 实现要求(2)的子程序(key2按下时实现计数功能,弹开时停止计数;)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

按钮控制LED——51单片机的
Proteus实验
实验原理
51单片机的一个I/O口接按钮,再通过另一个I/O口控制LED的亮、灭。

主要器件以及电路图
单片机——AT89C51,上拉电阻——pullup,按钮button,发光二极管——LED。

按钮控制LED汇编程序源码
ORG 0
START:
MOV P1,#0 ;LED不亮
MOV P0,#0FFH ;P0口准备读数
ST1:
JB P0.0,$ ;等待按钮抬起
JNB P0.0,$ ;等待按钮按下
;以上两句使得只有按一下按钮才可能执行下面的语句
CPL P1.0 ;LED状态改变
SJMP ST1 ;返回
END
流水灯——51单片机的Proteus实验
实验原理
通过个51单片机的一个I/O口送不同的数字,实现8个LED的流水灯。

本实验为移动一个不亮的LED。

通过修改送给I/O口送的数字可以实现不同方式的流水灯。

主要器件以及电路图
单片机——AT89C51,8排电阻——RX8,发光二极管——LED。

流水灯汇编程序源码
org 0
sjmp start
org 30h
start: mov P1,#1 ;P1.0为1,不亮mov P1,#2 ;P1.1为1,不亮
mov P1,#4 ;以下原理同上
mov P1,#8
mov P1,#10h
mov P1,#20h
mov P1,#40h
mov P1,#80h
sjmp start
delay: nop
nop
nop
nop
ret
end
数码显示管——51单片机的Proteus
实验
实验原理
51单片机的一个I/O口接4个开关,再通过另一个I/O口控制7段数码显示管显示想要的数字。

主要器件以及电路图
单片机——AT89C51,共地的7段数码显示管——7SEG-COM-AN-GRN,开关——SW-SPST。

汇编程序源码
汇编后139字节。

org 0
sjmp START
org 30h
START: mov P1,#0FFh ;LED不亮
st1: mov P2,#0FFh ;准备读数(开关状态)
mov A,P2 ;读数
anl A,#0Fh ;取低四位
acall SEG7 ;调用显示码子程序
mov P1,A ;将得到的显示码送数显管显示
sjmp st1 ;循环
SEG7: inc A ;该子程序实现将数字转换为显示码movc A,@A+pc
ret
DB 0c0h,0F9h,0a4h,0b0h
DB 99h,92h,82h,0F8h
DB 80h,90h,88h,83h
DB 0c6h,0a1h,86h,8eh
end
C语言程序源码
用C语言写了一下实现同样功能的程序,编译后1.39K,代码如下:
#include<reg51.h>
int main(){
P1 = 0xff;
while(1){
P2 = 0xff;
ACC = P2;
ACC &= 0xf;
switch(ACC){
case 0: P1 = 0xc0; break;
case 1: P1 = 0xf9; break;
case 2: P1 = 0xa4; break;
case 3: P1 = 0xb0; break;
case 4: P1 = 0x99; break;
case 5: P1 = 0x92; break;
case 6: P1 = 0x82; break;
case 7: P1 = 0xf8; break;
case 8: P1 = 0x80; break;
case 9: P1 = 0x90; break;
case 10: P1 = 0x88; break;
case 11: P1 = 0x83; break;
case 12: P1 = 0xc6; break;
case 13: P1 = 0xa1; break;
case 14: P1 = 0x86; break;
case 15: P1 = 0x8e; break;
}
}
while(1);
}
用数组实现,更大(1.51K),代码如下:
#include<reg51.h>
int main(){
int ledNum[16] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0 xa1,0x86,0x8e};
P1 = 0xff;
while(1){
P2 = 0xff;
ACC = P2;
ACC &= 0xf;
P1 = ledNum[ACC];
}
while(1);
}
开关控制流水灯2——51单片机的
Proteus实验
实验原理
51单片机的一个I/O口接四个开关,每个开关控制流水灯的不同方面,再通过另一个I/O口控制8个LED的亮、灭,从而实现流水灯。

其中:开关一控制流水灯是否有翻转;开关二控制流动方向;开关三控制是否改变数字;开关四控制流动时间。

主要器件以及电路图
单片机——AT89C51,发光二极管——LED。

C语言程序源码
#include <reg51.h>
typedef unsigned int uint;
sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
uint delayT = 10000;
void delay(){
int i;
for(i=0;i<delayT;i++){
;
}
}
int main(){
int i;
uint leds[8] = {254,253,251,247,239,223,191,127};//只有一个灯亮
while(1){
P0 = 0xff;
//是否取反
if(P0_0 == 0){
for(i=0;i<8;i++){
leds[i] = -leds[i];
}
}
if(P0_2 == 0){
//控制是否数字加一
for(i=0;i<8;i++){
leds[i] = leds[i] + 1;
}
}
if(P0_1 == 1){
//下面的循环正常循环
for(i=0;i<8;i++){
P1 = leds[i];
delay();
}
}
if(P0_1 == 0){
//反循环
for(i=7;i>=0;i--){
P1 = leds[i];
delay();
}
}
if(P0_3 == 1){
//控制流动时间
delayT = 60000;
}
else{
delayT = 10000;
}
}
}。

相关文档
最新文档