㈠ 51单片机汇编控制8个流水灯
思路:
循环控制常亮状态的值,将其从最高位循环到最低位。这个用于最后状态的常亮
在常亮循环中,控制不是常亮的其它所有位进行再次循环,逐渐从最低位亮灭循环到最高位
代码如下:
#include<reg51.h>
unsignedcharPData;//整体结果
unsignedcharCurrData;//变化的最高位
//延时,本函数是非精确延时,若需要精确延迟则需要根据本函数的汇编语句进行精确计算后调整循环体次数
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}
voidmain(){
unsignedchari=0,j=0;
PData=0x00;//全灭状态
for(i=8;i>0;i--){//控制常亮的位置,先从最高位开始,依次循环到最低位
for(j=0;j<i-1;j++){//从最低位循环到不是常亮的最高位
P1=~(PData+(1<<j));//第i位亮
delay(500);
P1=~PData;//第i位灭
delay(500);
}
PData=PData+(1<<(i-1));//置最高位为常亮状态
P1=~PData;
delay(500);
}
//停机
while(1){
;
}
}
㈡ 使用单片机I/O口控制8只LED灯。 1)点亮8个中的的第任意个LED灯。 使任意一个或多个LED灯闪烁
举个简单的例子,8个LED灯的正级分别接在P1.0到P.7上面,负极分别接在P2.0到P2.7上面,
P1 = 0xff; (P1口全部高电平) P2 = 0x00; (P2口全部低电平),此时电流通过P1口经LED流向P2口,8个灯全部点亮,如果P1不变,P2 = 0XFF; 此时由于P1与P2的接口全部是高电平,没有电压差也就没有电流,LED全部熄灭,如果想让某一个灯点亮,可以根据8421法则,P2.7 P2.6 P2.5 P2.4是高8位,P2.4 P2.3 P2.2 P2.1 P2.0是低8位
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
8 4 2 1 8 4 2 1
当p1 = 0xff; p2 = 0xfe的时候,就是P2.0那个小灯点亮,其他7个灭,p2 = 0xfe的这个F就是8+4+2+1 =15,对应16进制里的f, 同理E=8+4+2+0 =14,对应16进制里的e。
闪烁的话需要用到定时器,时间到了把当前P2对应的引脚取反一下就行了,比如当前P2.0 = 1; 定时器时间到了以后 ~P2.0 当然实际写程序的时候不能直接这么写,自己多复习下吧
㈢ 8个LED指示灯循环闪烁的程序(单片机)
1:设置一个变量i,它可以从0循环到3
2:检测一个已取消缓冲的键。按“+1”
3:当I值为每个值时,执行相应的模式。
水量灯参考程序
#include
#include
#定义uchar无符号字符
Ucharj,温度;
无效延迟(无符号整型ms)
{
Uchart;
(女士)
对于(t = 0;T < 123;T + +);
}
Voidmain()
{
P1=0XFF;
延迟(500);
Temp=0xfe;//奇怪,led连接在P2.3~P2.6
对于(j = 0;J < 4;J + +)
{
P1=temp;
延迟(500);
Temp=_crol_(Temp,1);
}
P1=0XFF;
(1);
}
(3)8个灯单片机扩展阅读:
注意事项:
#include“reg52。这个文件为单片机定义了一些特殊的功能寄存器
Typedef无符号int在16以下;//以声明的方式定义数据类型
无符号charu8;
//LED灯
Sbitleda=P0;
Sbitled1=P0^0;
Sbitled2=P0^1;
Sbitled3=P0^2;
Sbitled4=P0^3;
Sbitled5=P0^4;
Sbitled6=P0^5;
Sbitled7=P0^6;
Sbitled8=P0^7;
无效延迟(16岁以下)
{
,(我);
}
Voidmain()
{
而(1)
{
勒达=1;//所有的灯都亮着
//从左到右熄灭
Led1=0;
延迟(50000);//延迟时间约为450毫秒
Led2=0;
延迟(50000);//延迟时间约为450毫秒
Led3=0;
延迟(50000);//延迟时间约为450毫秒
Led4=0;
延迟(50000);//延迟时间约为450毫秒
Led5=0;
延迟(50000);//延迟时间约为450毫秒
Led6=0;
延迟(50000);//延迟时间约为450毫秒
Led7=0;
延迟(50000);//延迟时间约为450毫秒
Led8=0;
延迟(100000);//延迟大约900毫秒
//从右到左照明
Led8=1;
延迟(50000);//延迟时间约为450毫秒
Led7=1;
延迟(50000);//延迟时间约为450毫秒
Led6=1;
延迟(50000);//延迟时间约为450毫秒
Led5=1;
延迟(50000);//延迟时间约为450毫秒
Led4=1;
延迟(50000);//延迟时间约为450毫秒
Led3=1;
延迟(50000);//延迟时间约为450毫秒
Led2=1;
延迟(50000);//延迟时间约为450毫秒
Led1=1;
延迟(50000);//延迟时间约为450毫秒
勒达=1;//所有的灯都亮着
}
}
㈣ 鍗旷墖链哄彲鎺у埗8涓𨱔浠涔堟按骞
鍗旷墖链哄彲鎺у埗8涓𨱔镄勬按骞冲彇鍐充簬鍏蜂綋镄勫疄鐜版柟寮忓拰搴旂敤鍦烘櫙锛屼笅闱浠庡埯绾у埌涓楂樼骇姘村钩鍒嗗埆浠嬬粛锛
1.鍒濈骇姘村钩锛氩傛灉鍙鏄阃氲繃绠鍗旷殑寰鐜鎺у埗8涓𨱔镄勪寒𨱔锛岃繖鍙鏄涓涓锘烘湰镄勫崟鐗囨満鎺у埗鎶鑳姐傚叿浣揿疄鐜版柟娉曞彲浠ラ氲繃鍗旷墖链虹殑I/O绔鍙d笌8涓𨱔杩炴帴锛岀劧钖庝娇鐢ㄧ亩鍗旷殑寰鐜璇鍙ユ带鍒舵疮涓𨱔镄勪寒𨱔鐘舵併备緥濡傦纴鍙浠ヤ娇鐢–璇瑷涓镄刦or寰鐜锛屼緷娆℃带鍒舵疮涓𨱔镄勪寒𨱔锛屼粠钥屽疄鐜版祦姘寸伅镄勬晥鏋溿傝繖绉嶅疄鐜版柟寮忔瘆杈幂亩鍗曪纴鍙闇瑕佹帉鎻″熀链镄勫崟鐗囨満缂栫▼鍜岀数璺杩炴帴鎶鑳藉嵆鍙銆
2.涓绾ф按骞筹细濡傛灉鑳藉熼氲繃缂栫▼瀹炵幇镟村嶆潅镄勬带鍒堕昏緫锛屾瘆濡傚疄鐜版祦姘寸伅銆佽窇椹𨱔绛夊氱嶆晥鏋滐纴闾d箞灏遍渶瑕佹洿楂樼骇镄勫崟鐗囨満缂栫▼鎶鑳藉拰鐢佃矾璁捐¤兘锷涖傚湪瀹炵幇杩欎簺鏁堟灉镞讹纴鍙鑳介渶瑕佷娇鐢ㄥ埌镟村氱殑鍗旷墖链鸿祫婧愶纴濡傚畾镞跺櫒銆佷腑鏂绛夈傚悓镞讹纴涔熼渶瑕佽冭槛濡备綍浼桦寲绋嫔簭锛屼娇寰楁带鍒舵洿锷犳祦鐣呫佺ǔ瀹氥傝繖绉嶅疄鐜版柟寮忛渶瑕佹湁涓瀹氱殑鍗旷墖链虹紪绋嬬粡楠屽拰鐢佃矾璁捐¤兘锷涖
3.楂樼骇姘村钩锛氩傛灉鑳藉熺粨钖堜紶镒熷櫒瀹炵幇鏅鸿兘鍖栨带鍒讹纴闾d箞灏遍渶瑕佹洿楂樼骇镄勫崟鐗囨満缂栫▼鎶鑳藉拰鐢佃矾璁捐¤兘锷涖备緥濡傦纴鍙浠ヤ娇鐢ㄦ俯搴︿紶镒熷櫒銆佸厜浼犳劅鍣ㄧ瓑浼犳劅鍣ㄦ娴嬬幆澧冨弬鏁帮纴铹跺悗镙规嵁杩欎簺鍙傛暟鎺у埗8涓𨱔镄勪寒𨱔銆傝繖绉嶅疄鐜版柟寮忛渶瑕佽冭槛鍒板备綍涓庝紶镒熷櫒杩涜岄氢俊銆佸备綍澶勭悊浼犳劅鍣ㄦ暟鎹銆佸备綍镙规嵁鏁版嵁杩涜屾带鍒剁瓑澶氢釜鏂归溃锛岄渶瑕佹湁娣卞帤镄勫崟鐗囨満缂栫▼鍜岀数璺璁捐¤兘锷涖
㈤ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(5)8个灯单片机扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
㈥ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(6)8个灯单片机扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
㈦ 单片机怎么实现一个开关控制八个灯按一下亮一个按八下八个灯都亮汇编语言程序
用一个寄存器做变量就可以。
假如按键是一个开个,接在P1.0,八个灯在P0,低电平灯亮
程序是这样的
MOV 30H ,#00
LOP :
SETB P1.0
JNB P1.0, PRESS
AJMP LOP
PRESS:
INC 30H
MOV A,30H
CJNE A,#9,L_NEXT
MOV 30H,#1
L_NEXT:
JNB P1.0,$
MOV A,30H
CJNE A,#1 ,LED1_ON
CJNE A,#2, LED2_ON
CJNE A,#3, LED3_ON
CJNE A,#4, LED4_ON
CJNE A,#5, LED5_ON
CJNE A,#6, LED6_ON
CJNE A,#7, LED7_ON
CJNE A,#8, LED8_ON
LJMP LOP
LED1_ON: MOV P0,#0FEH //亮一个灯
LJMP LOP
LED2_ON: MOV P0,#0FDH //亮一个灯
LJMP LOP
LED3_ON: MOV P0,#0F8H //亮一个灯
LJMP LOP
LED4_ON: MOV P0,#0F0H //亮一个灯
LJMP LOP
LED5_ON: MOV P0,#0E0H //亮一个灯
LJMP LOP
LED6_ON: MOV P0,#0D0H //亮一个灯
LJMP LOP
LED7_ON: MOV P0,#080H //亮一个灯
LJMP LOP
LED8_ON: MOV P0,#00H //亮一个灯
LJMP LOP