单片机独立按键控制led左右移动
独立按键控制LED灯
通常的按键所用的开关为机械弹性开关,当机械触点断开、闭合时,由 于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时
也不会一下子断开。如下图 所示,按键抖动时间一般为5ms〜10ms。
因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象 而作的措施就是按键消抖。
P仁Oxff; P2=0xff; while(1) {
if(Ke y仁=0) delay(10);
if(Ke y仁=0)
{
Display1();
} while(Key1==0); if(Key2==0) delay(10);
if(Key2==0)
{
Display2();
}
while(Key2==0);
按键消抖方式有硬件消抖和软件消抖。硬件消抖在按键数目较少时使用, 常用硬件消抖电路有RS触发器和并联电容,如下图所示。
如果按键较多,常用软件方法消抖。其方法是检测按键是否按下,如按
键按下,执行一个延时程序5ms- 10ms让前沿抖动消失后再一次检测按键状态, 如果仍保持按下,则确认为真正有按键按下。当检测到按键释放后,也执行一个5ms-10ms的延时,待后沿抖动消失后转入该按键的处理程序。这种按键消抖占 用CPU资源,采用定时器中断软件消抖效果要好些。
^£1
项目实施
1.绘制本项目电路图
2.准备焊接器材
骨口, 序号
电路组成
元件名称
规格或参数
数量
1
最
电阻
10K
2个
2
小
排阻
10K
1个
3
系
电解电容
10uF
1个
4
统
广告灯(LED灯左移右移)电路设计
新疆农业大学机械交通学院《单片机技术与应用》课程设计说明书题目:广告灯(LED灯左移右移)电路设计专业班级:学号:学生姓名:指导教师:时间:目录1 设计目的 (3)2 设计内容 (3)2.1 设计任务及要求 (3)2.2 设计方案及原理 (3)3设计步骤 (3)3.1硬件电路设计 (3)3.2 硬件电路组成框图 (4)3.3 各个硬件电路及工作原理 (4)3.3.1 晶振电路 (4)3.3.2 LED灯电路 (5)3.3.3 复位电路 (5)3.4 绘制原理图 (6)3.5 元件参数计算 (6)3.6 元件清单列表 (6)3.7程序设计 (7)3.7.1 绘制程序原理图 (8)3.7.2汇编程序 (9)4 调试与仿真 (9)5 硬件调试结果 (10)5.1面包板电路的搭建测试 (11)5.2电路调试结果 (12)6 心得体会 (14)广告灯(LED灯的左移右移)电路设计作者:秦春旺指导老师:艾海提・赛买提李春兰1 设计目的(1)会利用软件绘制流水广告灯电路原理图。
(2)通过单片机课程设计,熟练汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。
(3)会用Keil C51软件对源程序进行编译调试及与proteus软件联调,实现电路的仿真。
2 设计内容广告灯是一种常见的装饰,常用与街上的广告及舞台装饰灯场合。
最简单的流水广告灯就是各个灯依次发光。
本任务利用STC89C51单片机来实现这一功能。
2.1 设计任务及要求输出“0”时,发光二极管亮,开始时按照P1.0、 P1.1 、…P1.7的顺序依次点亮发光将8个发光二极管D1-D8接在单片机的P1.0-P1.7端口上,当对应的P1口二极管,然后再按照P1.7、P1.6… P1.0的顺序依次点亮发光二极管,重复循环。
2.2 设计方案及原理单片机CPU芯片STC89C51,工作环境为常温。
发光二极管,工作环境为常温通过对单片机STC89C51系统的学习,如果要让接在STC89C51芯片P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的灯熄灭,把P1.0口的电平变为低电平就可以;同理。
单片机独立按键控制led灯实验原理
主题:单片机独立按键控制LED灯实验原理目录1. 概述2. 单片机独立按键控制LED灯实验原理3. 实验步骤4. 结语1. 概述单片机在现代电子设备中起着至关重要的作用,它可以通过编程实现各种功能。
其中,控制LED灯是单片机实验中常见的任务之一。
本文将介绍单片机独立按键控制LED灯的实验原理及实验步骤,希望对初学者有所帮助。
2. 单片机独立按键控制LED灯实验原理单片机独立按键控制LED灯的实验原理主要涉及到单片机的输入输出端口及按键和LED的连接方式。
在单片机实验中,按键与单片机的输入端口相连,LED与单片机的输出端口相连。
通过按键的按下和松开来改变单片机输出端口电平,从而控制LED的亮灭。
3. 实验步骤为了完成单片机独立按键控制LED灯的实验,需要按照以下步骤进行操作:步骤一:准备材料- 单片机板- 按键- LED灯- 连线- 电源步骤二:搭建电路- 将按键与单片机的输入端口相连- 将LED与单片机的输出端口相连- 连接电源步骤三:编写程序- 使用相应的单片机开发软件编写程序- 程序中需要包括按键状态检测和LED控制的部分步骤四:烧录程序- 将编写好的程序烧录到单片机中步骤五:运行实验- 按下按键,观察LED的亮灭情况- 确保按键可以正确控制LED的亮灭4. 结语通过上述实验步骤,我们可以实现单片机独立按键控制LED灯的功能。
这个实验不仅可以帮助学习者了解单片机的输入输出端口控制,还可以培养动手能力和程序设计能力。
希望本文对单片机实验初学者有所帮助,谢谢阅读!实验步骤在进行单片机独立按键控制LED灯实验时,需要按照一定的步骤进行操作,以确保实验能够顺利进行并取得预期的效果。
下面将详细介绍实验步骤,帮助读者更好地理解和掌握这一实验过程。
1. 准备材料在进行单片机独立按键控制LED灯实验前,首先需要准备相应的材料。
这些材料包括单片机板、按键、LED灯、连线和电源。
在选择单片机板时,需要根据具体的实验需求来确定,常见的有51单片机、Arduino等,不同的单片机板具有不同的特性和使用方法,因此需要根据实验要求来选择适合的单片机板。
独立按键及红外遥控led灯移动
电子工程学院课外学分设计报告题目:按键和遥控控制LED灯移动班级:电子A1032 姓名:陈仁州学号:15 专业:自动化实验室:开放实验室设计时间:2013 年3月19 日——2013 年6月 2 日审批意见:指导教师:李卫华目录1.专业综合设计任务 (3)2.基本原理与论证 (3)3. 硬软件设计 (3)4. 实现与测试 (3)5.分析与总结 (3)1. 专业综合设计任务完成一款用独立按键以及红外遥控器控制led灯的移动的设计,led灯的移动由四个(上下左右)键以及遥控器上的2567键控制。
2.基本原理与论证单片机最小系统以及9个led灯接在p2^0-p2^7和p3^0口,四个独立按键接在p1^4-p1^7口红外接收头1838接在p3^2口,其他为起振电路及复位电路。
电路原理图如下图所示3. 硬软件设计元器件排布,并进行焊接。
4. 实现与测试给电路供电,按上下左右键看led灯是否移动,使用红外遥控器按2(上)5(左)6(下)7(右)9(复位)键,看电路是否正常工作。
5.分析与总结对单片机的基本用法以及红外接收发射有了一点了解。
附录一程序#include<reg52.h> //52单片机头文件#include<stdio.h>#include<intrins.h>#define N 2//亮暗的速率#define T 700//PWM的周期#define TURE 1#define FALSE 0#define uint unsigned int#define uchar unsigned charsbit IR=P3^2;//红外接口标志sbit D1=P2^7;sbit D2=P2^6;sbit D3=P2^5;sbit D4=P2^4;sbit D5=P2^3;sbit D6=P2^2;sbit D7=P2^1;sbit D8=P2^0;sbit D9=P1^6;sbit key1=P1^0; //上sbit key2=P1^4; //下sbit key3=P1^2; //左sbit key4=P1^1; //右uchar irtime;//红外全局变量bit irpro_ok,irok;unsigned char IRcord[4];unsigned char irdata[33];/////////////////////////void delay(int x) //{char a,b;for(a=0;a<x;a++)for(b=500;b>0;b--);}void delay2() //延时0.5秒{uint a,b;for(a=300;a>0;a--)for(b=200;b>0;b--);}void delay1() //延时0.1秒{uint x,y;for(x=100;x>0;x--)for(y=100;y>0;y--);}void pwm(int x){while(x--);}void soft_reset(void)//复位{((void (code *) (void)) 0x0000) (); }void pwmled(){int t=0;uint res=1400;char f=0;//亮暗标志,0为亮while(res--){P2=0x00;D9=0;pwm(t);//Toff,亮的时间P2=0xff;D9=1;pwm(T-t);//Ton,暗的时间if(!f)t+=N+1;//亮速率较快,模拟呼吸else t-=N;//暗速率较慢if(t>T){f=1;t=T;}//超过最大值时,返回最大值,标志为暗if(t<0){f=0;t=0;}//超过最小值时,返回最小值,标志为亮}}//////////////////void zhuan(){D1=0;delay1();D2=0;delay1();D3=0;delay1();D6=0;D1=1;delay1();D9=0;D2=1;delay1();D8=0;D3=1;delay1();D7=0;D6=1;delay1();D4=0;D9=1;delay1();D5=0;D8=1;delay1();D7=1;delay1();D4=1;delay1();}//////////////////////////////void origin(){P2=0x55;D9=0;delay2();//红亮P2=0xaa;D9=1;delay2();//绿亮P2=0x6d;D9=1;delay2();//左到右再到左P2=0xb6;D9=1;delay2();//P2=0xdb;D9=0;delay2();//P2=0xb6;D9=1;delay2();//P2=0x6d;D9=1;delay2();//P2=0xd5;D9=1;delay2();//斜着P2=0xfc;D9=0;delay2();//下到上再到下P2=0xe3;D9=1;delay2();//P2=0x1f;D9=1;delay2();//P2=0xe3;D9=1;delay2();//P2=0xfc;D9=0;delay2();//P2=0xff;D9=1;delay2();//全暗P2=0x00;D9=0;delay2();//全亮P2=0xff;D9=1;delay2();//全暗//P2=0x00;D9=0;delay2();全亮P2=0x08;D9=0;delay2();//除5外亮P2=0xf7;D9=1;//5亮/* */}//////////////////void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数{irtime++;}///////////////////////////////////////////////////////////////////////void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数{static unsigned char i;static bit startflag;if(startflag){if(irtime<42&&irtime>=33)//引导码TC9012的头码i=0;irdata[i]=irtime;//一次存储32位电平宽度irtime=0;i++;if(i==33){irok=1;i=0;}}else{irtime=0;startflag=1;}}////////////////////////////////////////////////////////////////////void TIM0init(void)//定时器0初始化{TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值TH0=0x00;//reload valueTL0=0x00;//initial valueET0=1;//开中断TR0=1;}///////////////////////////////////////////////////////////////////void EX0init(void){IT0 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2)EX0 = 1; // Enable EX0 InterruptEA = 1;}/******************************************************************/ void Ir_work(void)//红外键值散转程序{switch(IRcord[2])//判断第三个数码值{case 0:xie();break;//1 显示相应的按键值ledcrol()case 1:ledup();break;//2 上case 2:D3=0;break;//3case 3:pwmled();break;//4case 4:ledleft();break;//5case 5:leddown();break;//6 左case 6:ledright();break;//7 下case 7:origin();break;//8 右case 8:soft_reset();break;//9} irpro_ok=0;//处理完成标志}/*****************************************************************/ void Ircordpro(void)//红外码值处理函数{unsigned char i, j, k;unsigned char cord,value;k=1;for(i=0;i<4;i++)//处理4个字节{for(j=1;j<=8;j++) //处理1个字节8位{cord=irdata[k];if(cord>7)//大于某值为1{value=value|0x80;}else{value=value;}if(j<8){value=value>>1;}k++;}IRcord[i]=value;value=0;} irpro_ok=1;//处理完毕标志位置1 }///////上/////////ledup(){if(D4==0){D4=1;D1=0;}if(D5==0){D5=1;D2=0;}if(D6==0){D6=1;D3=0;}if(D7==0){D7=1;D4=0;return;}if(D8==0){D8=1;D5=0;return;}if(D9==0){D9=1;D6=0;return;}}/////////下///////leddown(){if(D1==0){D1=1;D4=0;return;}if(D2==0){D2=1;D5=0;return;}if(D3==0){D3=1;D6=0;return;}if(D4==0){D4=1;D7=0;}if(D5==0){D5=1;D8=0;}if(D6==0){D6=1;D9=0;}}/////////////左//////////////ledleft(){if(D2==0){D2=1;D1=0;}if(D5==0){D5=1;D4=0;}if(D8==0){D8=1;D7=0;}if(D3==0){D3=1;D2=0;return;}if(D6==0){D6=1;D5=0;return;}if(D9==0){D9=1;D8=0;return;}}/////////右////////ledright(){ if(D2==0){D2=1;D3=0;}if(D5==0){D5=1;D6=0;}if(D8==0){D8=1;D9=0;}if(D1==0){D1=1;D2=0;return;}if(D4==0){D4=1;D5=0;return;}if(D7==0){D7=1;D8=0;return;}}void main(){ P1=0xff; //按键高电平zhuan();EX0init(); // Enable Global Interrupt Flag TIM0init();//初始化定时器0while(1){ if(irok){Ircordpro();//码值处理irok=0;}if(irpro_ok)//step press key{Ir_work();//码值识别散转}if(key2==0) //下{ delay1();if(key2==0){leddown();} while(!key2);delay1();while(!key2);}if(key1==0) //上{ delay1();if(key1==0){ledup();} while(!key1);delay1();while(!key1);}if(key3==0) //左{ delay1();if(key3==0){ledleft();} while(!key3);delay1();while(!key3);}if(key4==0) //右{ delay1();if(key4==0){ledright();} while(!key4);delay1();while(!key4);}}}参考文献:[1]高吉数字电子技术(第二版)电子工业出版社,2004。
按键控制LED灯左右移动
按键控制LED 灯左右移动#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器#include <intrins.h>sbit K1 = P1^0; //对应按钮K1sbit K2 = P1^1; //对应按钮K2#define GPIO_LED P0 //led使用P0口void Delay10ms(unsigned int c); //延时10msunsigned char Key_Scan();void main(void){unsigned char ledValue, keyNum;ledValue = 0x01;while (1){keyNum = Key_Scan(); //扫描键盘if (keyNum == 1) //如果键值返回1{ledValue = _crol_(ledValue, 1); //左循环}else if (keyNum == 2){ledValue = _cror_(ledValue, 1); //右循环}GPIO_LED = ledV alue;//点亮LED灯}}unsigned char Key_Scan(){unsigned char keyValue = 0 , i; //保存键值//--检测按键1--//if (K1==0) //检测按键K1是否按下{Delay10ms(1);//消除抖动if (K1==0) //再次检测按键是否按下{keyValue = 1;i = 0;while ((i<25) && (K1==0)) //检测按键是否松开{Delay10ms(1);i++;}}}//--检测按键2--//if (K2==0) //检测按键K1是否按下{Delay10ms(1);//消除抖动if (K2==0) //再次检测按键是否按下{keyValue = 2;i = 0;while ((i<50) && (K2==0)) //检测按键是否松开{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--);}}}。
单个按键控制4个LED 实验报告(带程序)
单个按键控制4个LED(入门级实验)实验介绍:通过单个按键控制4个LED灯的亮灭状态。
正常情况下,一个按键控制1个灯。
在本次实验中,要求使用1个按键,控制4个LED灯。
通过按键按下的次数,控制LED的亮灭状态。
按下1次,1个LED灯点亮,按下2次,2个LED 灯点亮,按下3次,3个LED灯点亮,按下4次,4个LED灯点亮,按下5次,所有LED灯都熄灭,如此循环。
如此就可以通过单个按键控制4个LED灯的亮灭。
在照明场所,控制LED灯的点亮个数,就可以控制亮度。
实验目的:在使用单片机等控制器控制周边元件的时候,经常会遇到I/O口不够用的情况。
因此在使用的时候,尽量省着用。
本次实验通过单个按键控制4个LED灯的亮灭状态,正常情况下需要4个按键,因而达到了节省单片机I/O口的目的。
通过此次实验室,学习单片机按键的编程控制方法,学习LED灯输出的控制方法。
学习最简单的输入设备(按键)控制最简单的输出设备(LED灯)的控制方法。
仿真原理图:在仿真软件Proteus中绘制仿真原理图如上图所示。
(注意事项:在进行实物制作时,发光二极管串联的电阻可以省略,因为单片机引脚灌电流的能力有限,限制了通过发光二极管电流的大小。
在仿真过程中,电阻R2~R9的大小要合适,太大LED将无法点亮。
)编程思路:当单片机上电后,所有的I/O口默认高电平,因而四个发光二极管在单片机上电后,都为熄灭状态。
此时,我们按下按键后,就可以调节各个发光二极管的亮灭状态。
当按一次按钮,将P2口的状态进行左移一位,同时将P2的最低位清零,就可以达到按一次按钮后,LED灯多亮一个。
如,当前只有P2口控制的最低位连接的LED点亮,当我们按一次按键,单片机首先将P2的状态循环左移一位,则刚才的最低位变为次低位,也就是倒数第二位点亮,同时将P2口的最低位清零,也就是倒数第一位连接的LED灯点亮,即按一次按钮后,倒数第一位和倒数第二位灯点亮。
其他状态与上述过程类似,这里不再赘述。
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左右移
實習單元五:單鍵控制LED左右移一、實習目的:(1)練習埠輸入指令MOV的用法。
(2)練習跳躍指令的用法。
(3)練習單鍵控制2種動作的方法。
二、執行結果:(1)開始全亮。
(2)按PB1一下時開始持續單燈左移,再按一下,開始持續單燈右移,只要按一下PB1,單燈LED可隨時左右移。
三、接線步驟:(1)將模擬器的40腳單晶片模擬插座插入MCS–51模組。
(2)用26PIN排線連接MCS–51模組與廣告燈模組。
(3)用16PIN排線連接MCS–51模組與開關模組之P1。
(4)連接5P電源線到所用之模板。
否右移呼叫左移六、程式範例:1: /*file_name:lab-5.c*/2: #include "io51.h"3: /*-----------------------------------------------------------*/ 4: void delay (unsigned int count) /*延遲時間=countx1mS */ 5: {6: unsigned int i,j;7: for (i=0; i<count ; i++)8: for (j=0; j<75; j++)9: ;10: }11: /*-----------------------------------------------------------*/ 12: unsigned char rr (unsigned char rotate) /* 右旋轉 */13: {14: unsigned char i;15: i=rotate%2;16: rotate=rotate>>1;17: if (i==1) {rotate=rotate+0x80;}18: return (rotate);19: }20: /*-----------------------------------------------------------*/ 21: unsigned char rl (unsigned char rotate) /* 左旋轉 */22: {23: unsigned char i;24: i=rotate/128;25: rotate=rotate<<1;26: if (i==1) {rotate=rotate+0x01;}27: return (rotate);28: }29: /*-----------------------------------------------------------*/ 30: void main (void) /* 主程式 */31: {32: unsigned char i;33: i=0xfe; /*設定位移初值*/34: P2=0x00; /*P2全亮*/35:36: while (P1_0==1) { } /*等待PB1按下*/37: P2=i;38: while (1)39: {40: while (P1_0==0) { } /*等待PB1放開*/41: while (P1_0==1) /*判斷PB1是否再次按下*/ 42: {43: i=rl(i); /* i左旋轉 */44: P2=i;45: delay(300); /* 延遲0.3秒 */46: }47:48: while (P1_0==0) { } /*等待PB1放開*/49: while (P1_0==1) /*判斷PB1是否再次按下*/ 50: {51: i=rr(i); /* i右旋轉 */52: P2=i;53: delay(300); /* 延遲0.3秒 */54: }55: }56: }57: /*-----------------------------------------------------------*/七、程式說明:本單元程式的重點在於如何利用單一鍵控制開關執行兩種動作,亦就是當按一下開關時單燈左移,再按一下開關時,單燈右移。
用四个独立按键控制流水灯的左移右移加速减速
用四个独立按键控制流水灯的左移右移加速减速用四个独立按键控制流水灯的左移右移加速减速实现6个数码管的分时显示在一个数码管上实现0到9的循环显示2009-05-30 16:11:52| 分类:汇编程序| 标签:|字号大中小订阅;////////////////////////////////////////;程序编写人:汤军;编写时间2009年5月23日星期六;功能: 在一个数码管上实现0到9的循环显示;////////////////////////////////////////;/////////////自定义及初始化////////////BAOHU EQU 60HJISHU EQU R4ORG 0000HAJMP MAIN;////////////////主程序////////////////MAIN: CLR P2.2 ;开片选CLR P2.1CLR P2.0MOV BAOHU,#0 ;查表变量赋初值MOV R4,#10 ;循环次数MOV DPTR,#TAB2 ;表首地址赋数据指针LDD1: ACALL CABIAO ;调用查表子程序ACALL DISPLAY ;调用显示子程序ACALL CHULI ;调用处理子程序DJNZ R4,LDD1 ;判断是否显示到9AJMP MAIN ;循环;/////////////查表子程序///////////////;输入:BAOHU;输出:A;功能:取出段数据CABIAO: MOV A,BAOHUMOVC A,@A+DPTR ;查表RET ;返回;//////////////显示子程序//////////////;输入:A;输出:P0;功能:段数据送数码管显示DISPLAY: MOV P0,#0FFHMOV P0,A ;显示ACALL DELAY ;调用延时子程序RET ;返回;//////////////处理子程序//////////////;输入:BAOHU;输出:BAOHU;功能:显示下一个数值CHULI: MOV A,BAOHUINC A ;显示下一个数值MOV BAOHU,ARET;//////////////延时子程序//////////////;输入:无;输出:无;功能:延时一段时间,稳定数码管的显示DELAY: MOV R5,#06H DD: MOV R6,#0FFHDD2: MOV R7,#0FFHDJNZ R7,$DJNZ R6,DD2DJNZ R5,DDRET;//////////////TAB2段数据表//////////// TAB2: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H ;/////////////////结束/////////////////END。
单片机控制LED流水灯从中间向两边
单片机控制L E D流水灯从中间向两边Hessen was revised in January 2021单片机控制LED流水灯从中间向两边,从两边向中间这个就是把先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动;#include< >#include< >#define uint unsigned int#define uchar unsigned charvoid delay();void main(){ uchar temp,temp1,temp2,a,b;P3=0xff;while(1){ for(b=3;b>0;b--){ temp=0xaa;P1=temp;delay();temp=0x55;P1=temp;delay();}for(a=3;a>0;a--){ temp=0xfe;for(b=7;b>0;b--){ P1=temp;temp=_crol_(temp,1);delay();P1=temp;delay();}}temp1=0xfe;temp2=0x7f;for(a=8;a>0;a--){temp=temp1&temp2;P1=temp;delay();temp1=_crol_(temp1,1);temp2=_cror_(temp2,1);}}}void delay(){ uint a,b;for(a=100;a>0;a--)for(b=600;b>0;b--);}程序实现的第2种方法:下面是单片机12群里的朋友木信大侠提出的,实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。
51单片机流水灯左移右移控制程序
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; //声明无符号整型变量Stemp=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++); //延时程序}}//===================================== ==================================。
51单片机控制P2口8位LED灯左移C语言程序
51单片机控制P2口8位LED灯左移C语
言程序
此程序控制P2.0~P2.7口8个LED(P2.0~P2.7)灯逐个依次点这,又从(P2.7~P2.0)这样的顺序一直到全部被点亮。
#include ;//头文件
void delay(unsigned int x)//延时函数
{
while(x--);
}
void main(void)
{
unsigned char i;//定义一个无符号字型局部变量i 取值范围0~255
delay(50000);
P2=0xfe;
for(i=0;i<8;i++)//加入for循环,表明for循环大括号中程序循环执行8次
{
delay(50000);//调用延时函数,更改延时的x变量的值可以更改延时长短,用于改变闪烁频率
P2<<=1;
}
}
知识要点:
1、<<符号。
这个是左移符号,P2<<=1;等效于
P2=P2<<1;
例如:temp=15;
temp<<=1;
15二进制为00001111,左移1位后,右端自动补0,变
成00011110,此时temp=30;数值左移一位相当于乘以2,反之右移一位相当于除以2.。