8个LED流水灯依次循环亮的C语言程序,问题详细内容为:我用的是PROTUSE做的仿真程序,想让这8个流水灯依次亮从P0到P7口要它的C语言程序可以在KEILC51里面运行的,希望在每句C语言后面有个解释不用WHILE和for语句i高分悬赏我
MOV A,#7FH ;是开始键按下 则跑马灯开始运行 LL: MOV P1,A LCALL YS ;显示延时 RR A ;循环右移一位 JB P0.6, LL ;没有按下停止键 则继续跑马 LCALL YS ;按键
sbit LED1 = P0^1;sbit LED2 = P0^2;sbit LED3 = P0^3;sbit LED4 = P0^4;sbit LED5 = P0^5;sbit LED6 = P0^6;sbit LED7 = P0^7;unsigned char Maikuan=0;static unsigned char ledon[8] = {0x
while(1) { for(j = 0; j < 8; j++) { P1 = 255; //全灭, P1外接LED, 是低电平发光.delay_ms(500); //稍等片刻.for(i = 0; i < 8; i++) { P1 <<= 1;delay_ms(900 - 100 * j
单片机的跑马灯C程序如何编写八个LED灯依次点亮而且速度渐变的代码
P0=0x00就是P0口的所有全部亮 然后P1=0xff就是P1口的全部灭 这是另外一种定义方式,sbit这是一个位
建立一个1到16分别对应P0口和P2口的映射,程序就好写了
while (1){ P0 = LED;Delay10ms(50);LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位 if (P0 == 0x00)//当它全灭的时候,重新赋值 { LED = 0xfe; // 0xfe = 1111 1110 } }
连接图很得简单的,一般用低电平点亮。LED阴极接P0口,串一500欧电阻再接到+5V。开关一端如此P2口,另一端接地。你的LED有没选错模型?要用LED-RED等后面带颜色的才会亮。你能确定你的程序没错?
proteus仿真 AT89C51 P2口接8个开关,P0口接8个led灯 p2开关口控制p0的LED灯 求电路连接图
思路:控制8个LED灯,使用上拉方式控制,引脚高电平灯灭,引脚低电平灯亮。这8个LED使用同一P口上的所有引脚,假设为P1口中的P1.0-P1.7共8个脚。软件中,只需要将这些灯使用一个for循环即可。代码 include
二、编程操作 接着,编写程序,设置数字输出端口,将接线好的八盏灯分别设定为1-8口,编写时序程序,循环点亮8个信号脚和led灯,进行点亮和关灯,完成点亮循环工作。三、调试程序 最后,就可以进行程序调试,将调试好的程序
P1=b;//P1口接8个LED灯 delay(200);b=_crol_ (b,1);} } void delay(unsigned int z){ unsigned int i;for(;z>0;z--) //延迟时间自己算吧 for(i=110;i>0;i--);} 用汇编写这个容易点 main: mo
void DelayMS(uint x){ uchar i;while(x--){ for(i=0;i<120;i++);} } //主程序 void main(){ uint s;while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); //P0 的值向
void delay (int); /*声明延迟子函数*/ main(){ int i;while(1){ LED=0xfe;for(i=0;i<7;i++){ delay(100);LED=(LED<<1)|0x01; /*最低位LED灯左移一位后进行或运算使得最低位不会为“0”*/ } f
include "intrins.h"define uchar unsigned char define uint unsigned int sbit Led=P1;void delay(void);void main(void){ unsigned char tmp,i;P1=0x00;//全熄灭 while(1){ for(i=0;i<8;i++)//左移 {
PRG1:MOV P0, #0 ; 8个led灯亮 MOV R2, #200 LP1:CPL P1.0 ; 蜂鸣器响 DJNZ R6,DJNZ R7, $ - 2 DJNZ R2, LP1 MOV P0, #255 ; 8个led灯灭 RET ;--- PRG2:MOV P0, #255 ; 8
8个led灯编程
说明 :也可以使用例1的的方法来关闭数码管 / void Main(void){ uchar i;while(1){ P1 = 0xfe;for(i=0; i<7; i++){ P1 = _crol_(P0, 1); //用于循环左移 Delay(15);} } } 这是一个51单片机
for (i=0;i<8;i++){ P1=w; //循环点亮LED w<<=1; //点亮灯的位置移动,最低位补0 w=w|0x01; //将最低位置1 delay(500); //延时 } } } 或:include "reg51.h"//程序中使用_crol_
编程实现对 8 个 LED 的输出控制 将实验箱中的 8255 片选信号连接到 218H~21FH,将 8255 的 4 个寄存器地址(A、B、 C 端口及控制字寄存器端口)设置为 218H~21BH。将 8255 的端口 A 的 8 个引脚:PA0~PA7
while(1) { for(j = 0; j < 8; j++) { P1 = 255; //全灭, P1外接LED, 是低电平发光.delay_ms(500); //稍等片刻.for(i = 0; i < 8; i++) { P1 <<= 1;delay_ms(900 - 100 * j
//启动T0 while(1) { //显示 P1=LED; }}//T0 中断函数void Int_T0() interrupt 1{ //另外,因为在模式1中,每次定时器溢出后,单片机不会自动对TH0和TL0重新赋值 //所以每当定时器中断,我们都要首先对TH
P0 = 0x00; //P0.0~P0.7分别接八个发光二极管,刚开始全灭 while(1){ delay(1000);P0 = 0xc0;//点亮前两个发光二极管P0.0和P0.1;delay(1000);//延时1秒 P0 = 0x30;//点亮第三个和第四个LED delay(
MAIN:MOV A,#0FEH MOV P1,A LCALL DELAY RL A SJMP MAIN DELAY:MOV R2,#100 DLY:MOV R3,$250 DJNZ R3,DJNZ R2,DLY RET END
用keil和proteus,画出电路,编写一段程序,用p1 口作为控制端口,使8个led
附件里有Proteus仿真、Keil C工程和程序文件,可以看看效果。 #include #include #define uchar unsigned char#define uint unsigned int//变量uchar Count,LED;//主程序void main(){ P0=0xff; Count=0; LED=0x01; TMOD=0x01; //12MHZ晶振 C51单片机对其12分频 //实际定时器“加1”频率为1MHZ 也就是1us //用定时器中断时间间隔 是从“开启定时器加1”到“溢出”的时间 //对于工作在模式1的定时器0来说 也就是从“开启定时器加1”到“(TH0 TL0)=(0xff 0xff)+1”的时间 //0xffff+1=65536 //如果(TH0 TL0)初始值是(65536-50000) 那么初始值到溢出需要“加1”50000次 //1次是1us 50000次就是50000us=50ms //如果我们对定时器的中断次数进行计数,每20次算作一个时间段,那么这样的一个时间段就是20*50ms = 1000ms = 1s //这就是利用定时器计时的原理 //因为TH0和TL0分别是高字节和低字节,所以赋初值时也要将(65536-50000)分成高低字节分别赋值给TH0和TL0 //高字节 是除以256后的到的商 低字节 是除以256后的到的余数 //另外,因为在模式1中,每次定时器溢出后,单片机不会自动对TH0和TL0重新赋值 //所以每当定时器中断,我们都要首先对TH0和TL0人工重新赋值 TH0=(65536-50000)/256;//50ms 定时 TL0=(65536-50000)%256; ET0=1; EA=1; TR0=1;//启动T0 while(1) { //显示 P1=LED; }}//T0 中断函数void Int_T0() interrupt 1{ //另外,因为在模式1中,每次定时器溢出后,单片机不会自动对TH0和TL0重新赋值 //所以每当定时器中断,我们都要首先对TH0和TL0人工重新赋值 TH0=(65536-50000)/256;// 恢复初值 TL0=(65536-50000)%256; //Count每中断一次加1 以20为周期 每当等于20时候说明1s到了 if(++Count==4) { Count=0; LED=_crol_(LED,1); }}要生成hex文件,具体放法可以百度,然后在proteus中找到你要的单片机,是51吧, at89c52单片机,然后双击单片机导入hex文件,然后就可以运行了,点击左下叫的开始按键,就是那个三角形的,有开始,暂停。可以不放晶振和其他电路就可以运行。要直观的话当然要放其他电路,不过晶振和复位电路是可以不画的。
#include#define uchar unsigned charuchar led[5]={0x7e,0x3c,0x18,0x00,0xff};uchar num;sbit key=P1^0;main(){P0=0xff;num=0;while(1) { if(key==0) { while(key==0); P0=led[num]; num++; num%=5; } }}
首先,你的电路图没有给出来,管脚是什么? 其次,我建议还是自己尝试写一写,这个不难,我给你个思路 首先定义变量类似于P1_2 = P1^2这种,先把这八个管脚全部定义好,之后给个for循环,让P1(假设的你LED灯连接的是P1口)口的P1^0~P1^7相关标志位依次等于0或者1(0还是1需要看你在LED等上给的是高电位亮还是低电位亮),之后再给个for循环,五次的循环,全部P1口置为1(假设高电平LED亮),之后设置P1口全为1,再让P1口的相关标志位置为0,再置为0的时候可以加个延时
你的程序不对! { P2=0XFE; for(i=0;i<20000;i++); P2=0XFD; for(i=0;i<20000;i++); P2=0XFB; for(i=0;i<20000;i++); P2=0XF7; for(i=0;i<20000;i++); P2=0XEF; for(i=0;i<20000;i++); P2=0XDF; for(i=0;i<20000;i++); P2=0XBF; for(i=0;i<20000;i++); P2=0X7F; for(i=0;i<20000;i++); } 上面是根据你的思路; 而最简单的是用一句左移指令,就可以搞定。 还是你自己想吧。
P0口,内部是开漏结构。 P0口,必须接上上拉电阻,否则输出1时,状态就不确定。 如果外接共阳的LED,输出零时发光,就不用接上上拉电阻。 这是内部结构的特点。
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。 2、#include "reg51.h"首先写出单片机的头函数。 3、#include "intrins.h"输入位移函数。 4、unsigned int count=0,led;定义函数。 5、输入主函数,定义单片机的端口,写入延时函数。 6、中断跳转,使流水灯运行起来。
首先,你的电路图没有给出来,管脚是什么? 其次,我建议还是自己尝试写一写,这个不难,我给你个思路 首先定义变量类似于P1_2 = P1^2这种,先把这八个管脚全部定义好,之后给个for循环,让P1(假设的你LED灯连接的是P1口)口的P1^0~P1^7相关标志位依次等于0或者1(0还是1需要看你在LED等上给的是高电位亮还是低电位亮),之后再给个for循环,五次的循环,全部P1口置为1(假设高电平LED亮),之后设置P1口全为1,再让P1口的相关标志位置为0,再置为0的时候可以加个延时