LED有共阴和共阳两种,根据具体情况,给它高电平或者低电平就可以了。在单片机中,假如你的LED是接在P0口,而且是共阴的,那么 MOV P0,#FFH 就是把8个LED都点亮(可以通过调整#后的数改变点亮的情况)也可以点亮单独的一个,用SETB P0.0(P0.1,P0.2,等等)

MAIN:MOVA,#0FFH;设置左移初值 CLRC;C=0 MOVR2,#08H;设置左移次数 LOOP:RLCA;左移1位 MOVP2,A;输出到P2 CALLDELAY;延时 DJNZR2,LOOP;左移7次 MOVR2,#07H;LOOP1:RRCA;右移1位 MOVP2,A;输出到P2 CALLDELAY;DJNZR2,LOOP1;右移7次 JMPMAIN DELAY:MOVR3,#20;延时0.2s D1:MOVR4,#

ORG 0000H ; 闪烁 流水灯 AJMP MIN0 ORG 0050HMIN0: MOV R0,#00H MOV DPTR,#TABDD1: MOV A, R0 MOV R2, #10 ; 闪烁次数 MOVC A,@A+DPTRDD2: MOV P1, A ACALL DELAY1 MOV P1, #0FFH ACALL DELAY1 DJN

我写的这个程序应该可以,按一下灯亮,再按一下灯灭 include "REG52.H"sbit LED1_01 = P1^1; //LED灯 sbit KEY0_01 = P1^2; //按键 void Delay_1ms(unsigned int Time){ unsigned int x, y;for(x = Time; x > 0; x--)for(y = 120; y > 0; y--);} int ma

用AT89C2051单片机(可以换成任意的51单片机)仿真,控制一个LED灯闪烁,LED灯接在P1.7脚上。程序如下 LED1 BIT P1.7 MAIN:CPL LED1 ACALL DELAY SJMP MAIN DELAY:MOV R7,#0;延时子程序 MOV R6,#0 LOP:DJNZ R6,DJNZ R7,LOP RET END 仿真图如下

如何用汇编语言控制led灯闪烁?

DJNZ R2,T0E CLR LED CLR TR0 T0E:RETI END

使用循环指令。在汇编语言中,可以使用循环指令来实现定时器程序循环五次的功能,步骤为:首先将计数器CX初始化为5,然后使用LOOP_START标签来标记循环的开始位置。在循环体中编写定时器程序的代码,然后使用LOOP指令将程序跳转回LOOP_START标签处,直到计数器CX的值为0。这样,程序就会循环执行五次。在定

1.按下启动按钮,东西绿灯亮,南北红灯亮; 30秒后,熄灭。2.东西,南北四个黄灯同时闪烁5次(5秒)后,熄灭。3.东西红灯亮,南北绿灯亮20秒。4.东西,南北四个黄灯同时闪烁5次(5秒)后,熄灭。按如下波形图,连续循环。5.按下停止按钮,所有指示灯全部熄灭。6.选定PLC的机型是S7-200系

ORG 0000H ; 闪烁 流水灯 AJMP MIN0 ORG 0050HMIN0: MOV R0,#00H MOV DPTR,#TABDD1: MOV A, R0 MOV R2, #10 ; 闪烁次数 MOVC A,@A+DPTRDD2: MOV P1, A ACALL DELAY1 MOV P1, #0FFH ACALL DELAY1 DJN

求计时器控制4个LED灯滚动闪烁的汇编语言程序

在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。include include 仿真图效果。

count++;if(count==600){count=0;led=0;TR0=ET0=0;} }

include"reg51.h"  sbit P0_0=P0^0;   void delay(unsigned char t)   /* 带形参的延时函数*/ {    unsigned char i,j;      //定义for循环变量 for(i=0;i

单片机晶震选12M,定时比较准 LED1 equ p0.0 org 0000H ajmp start start:mov P0,#0FFh ;灌电流驱动灭灯 ,如果灯没有关,用 mov p0,#00h work:CLR LED1 ;灭如果反了把CLR改成 setb acall delay_1s SETB LED1 ;灭如果反了把setb改成 clr acall delay_3s ajmp work delay_

CLR A CPL P0.0 T0E:RETI END

用定时器控制p0.0的LED灯0.3s亮灭切换,汇编语言

KEY EQU P1.0 LED EQU P0.0 ORG 0H LOOP:JB KEY,DJNZ R6,DJNZ R7, $ - 2 JB KEY, LOOP CPL LED JMP LOOP END

不难啊,你要说出逻辑,怎么控制才能用C语言实现啊。我写一段程序,来表示“任意开关按一下就亮,再按一下就灭”的吧 boolen switchA,switchB,preswitchA,preswitchB;boolen Lightstatus;//1亮,2灭 void main(){ while(1){ if(switchA ! = preswitchA){ Lightstatus = (!Lightstatus);

500);} } else//方式三:全灯逐个先亮后灭;{ for(n=0;n<8;n++){ P2=0x01<3)order=1;//order控制闪烁方式循环 } } void delay1ms(uint t){ uint i;uchar j;for(i=0;i

unsigned long t0count=239999;unsigned int t1count=0;sbit led=P2^0;void main(){ TH0=0x06;TL0=0xff;TH1=0x06;TL1=0x06;TMOD=0x22;P2=0x00;TR0=1;ET0=1;ET1=1;EA=1;while(1);} void time0_int() interrupt 1 { t0count++;if(t0count==240000){ TR1=1;led=1;t0count=0

可以用外部中断计数,来实现流水灯的正转、暂停、以及反转和爆闪。。这是我前几天写的一个这样的程序,楼主可以结合protues 画图仿真,注意程序中所用到的IO端口就行了。include#include#define uchar unsigned charuchar a,b;void delay(uchar z){ uchar i,j,k; for(i

汇编: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,#0FEH MOV R2,#8 LOOP: MOV P0,A CLR C RLC A LCALL DELAY DJNZ R2,LOOP SJMP MAIN DELAY: MOV R3,#200 DLY: MOV R4,#250 DJNZ R4,$ DJNZ R3,DLY RET ENDC

delay(1);adc_rd=1;delay(1);//读取数据 return temp;} 用这个程序。

汇编语言或C语言编写一个控制灯闪烁的程序

1、首先第一步要用在一个项目的spalsh界面,进入应用后弹出这个界面,闪烁完毕后跳入主界面,比纯粹的设置背景图片的splash好看炫酷很多。 2、然后就是要通过自定义view重写onDraw的方法和onSizeChanged方法实现效果。在把自定义view进行应用到布局文件即可。 3、最后就是 TODO: 在此放置代码。 MSG msg; HACCEL hAccelTable; // 初始化全局字符串 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_WIN32WA, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance); // 执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow)) {return FALSE hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32WA))。
C语言实现LED灯闪烁控制配套51单片机开发板。 #include //包含单片机寄存器的头文件 /****************************************函数功能:延时一段时间 *****************************************/ void delay(void) //两个void意思分别为无需返回值,没有参数传递。 { unsigned int i; //定义无符号整数,最大取值范围65535。 for(i=0;i<20000;i++) //做20000次空循环。 ; //什么也不做,等待一个机器周期。 } /******************************************************* 函数功能:主函数 (C语言规定必须有也只能有1个主函数)。 ********************************************************/void main(void) { while(1) //无限循环。 { P0=0xfe; //P1=1111 1110B, P0.0输出低电平。 delay(); //延时一段时间。 P0=0xff; //P1=1111 1111B, P0.0输出高电平。 delay(); //延时一段时间。 } } 单片机驱动LED灯的源程序: #include //头文件。 #define uint unsigned int #define uchar unsigned char sbit LED1=P1^7; //位定义。 void delay_ms(uint);//mS级带参数延时函数。 void main() { while(1) { LED1=0; delay_ms(1000); LED1=1; delay_ms(1000); } } void delay_ms(uint z) //延时子程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 扩展资料: 单片机应用分类: 通用型: 这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。 总线型: 这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接。 另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。 控制型: 这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型。 通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。 参考资料来源:百度百科-单片机
#include unsigned char timer; //系统时钟: 12Mhz //高电平点亮. void delay(unsigned int delaytime) { timer = delaytime; while(timer!=0) {} } void main() { unsigned light=1; TMOD = 0X11; //timer1 mode 1,timer0 mode 1 PCON = 0x00; //SMOD = 0 TH0=(0xffff-10000)/256; TL0=(0xffff-10000)%256; TR0=1; ET0=1; EA =1; while(1) { P1=light; delay(1000) ;//延时1秒. light <<=1; if(light ==0) light =1; } } void T0_service(void) interrupt 1 using 1 { //1毫秒中断1次. TH0=(0xffff-1000)/256; TL0=(0xffff-1000)%256; if(timer>0)timer--; }
刚刚好我前段时间编了一个。 就是时钟作为中断,中断一次计数一次,当计数到6,000,000时(即1s钟,如果没有外部分频的话)时,灯的寄存器取反。 主程序:检查计数,灯的寄存器取反 中断子程序:计数 前段时间我编的例子,只要把时钟改一下,因为我用的是40MHz时钟外部分频到125Khz的中断,然后显示改成取反就行了,原来我的是控制字码管。希望对你有帮助哦 (*^__^*) 嘻嘻…… ;******************************************************** ;AVR汇编程序实例 ;使用INT0、INT1控制LED数码管显示 ;Mega16 4MHz ;******************************************************** .include "m16def.inc" .def temp = r23 ;临时变量 .def counter = r24 ;计数变量 .def flag=r25 ;中断向量区配置,FLASH空间$000~$028 .org $000 jmp RESET ; 复位处理 jmp EXT_INT0 ; IRQ0 中断向量 nop reti ; Timer2 比较中断向量 nop reti ; Timer2 溢出中断向量 nop reti ; Timer1 捕捉中断向量 nop reti ; Timer1 比较A 中断向量 nop reti ; Timer1 比较B 中断向量 nop reti ; Timer1 溢出中断向量 nop reti ; Timer0 溢出中断向量 nop reti ; SPI 传输结束中断向量 nop reti ; USART RX 结束中断向量 nop reti ; UDR 空中断向量 nop reti ; USART TX 结束中断向量 nop reti ; ADC 转换结束中断向量 nop reti ; EEPROM 就绪中断向量 nop reti ; 模拟比较器中断向量 nop reti ; 两线串行接口中断向量 nop reti ; IRQ2 中断向量 nop reti ; 定时器0 比较中断向量 nop reti ; SPM 就绪中断向量 nop .org $02A RESET: ; 上电初始化程序 ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 ; 设置堆栈指针为RAM 的顶部 ldi r16, 156 ser temp out ddra, temp ; 设置PORTA为输出,段码输出 out porta,temp ; 设置PORTA输出全1 ;设置中断方式 ldi temp, 0x0a out mcucr, temp ; INT0、INT1下降沿触发 ldi temp, 0xc0 out gicr, temp ; 允许INT0、INT1中断 out gifr, temp ; 清除INT0、INT1中断标志位 clr counter clr flag sei ; 使能中断 state: ldi zl, low(led_7 * 2) ldi zh, high(led_7 * 2) ; Z寄存器取得7段码组的首指针 clr counter loop: cpi flag,1 brbs 1,stop cpi counter,0x10 brbs 1,state lpm inc counter inc zl out porta, r0 call delay rjmp loop stop: cpi flag,0 brbs 1,loop rjmp stop EXT_INT0: in temp, sreg push temp ;mov temp,counter ;push temp cpi flag,1 brbs 1,abc inc flag ;pop temp ;mov counter, temp pop temp out sreg, temp ; 中断现场恢复 reti abc: dec flag pop temp ;mov counter,temp ;pop temp out sreg, temp ; 中断现场恢复 reti led_7: ;7段码表 .db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07 .db 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
可以参考一下这个 仿真实例。要怎么显示 在原程序 中修改,很简单看了就知道怎么改。
单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4 程序: ORG 00H START: MOV A,P1 ANL A,#0F0H RR A RR A RR A RR A ORl A,#0F0H MOV P1,A SJMP START 可以检测单个按键,也可以同时检测多个按键 过程:开始——读P1口数据到A——A中的数据右移4次——A中的内容和F0H相或——A中的数据送到P1口——回到开始
和我们的实验要求好像啊!
/程序:ex1_1.c //功能:控制一个信号灯闪烁程序 #include //包含头文件REG51.H,定义了MCS-51单片机的特殊功能寄存器 sbit P1_0=P1^0; //定义位名称 void delay(unsigned char i); //延时函数声明 void main() //主函数 { while(1) { P1_0=0; //点亮信号灯 delay(10); //调用延时函数,实际变量为10 P1_0=1; //熄灭信号灯 delay(10); //调用延时函数,实际变量为10 } } //函数名:delay //函数功能:实现软件延时 //形式参数:unsigned char i; // i控制空循环的外循环次数,共循环i*255次 //返回值:无 void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数 { unsigned char j,k; //定义无符号字符型变量j和k for(k=0;k<i;k++) //双重for循环语句实现软件延时 for(j=0;j<255;j++); }