//prj1 流水灯实验,LED灯是共阳极,给0亮。J1跳线帽 //用的是移位的方法 //头文件定义 include include //延时函数定义 void delay(void){ unsigned int i;unsigned int j;for(i=200;i>

// 51单片机控制八个发光二极管 左右循环。include define uchar unsigned char define uint unsigned int unsigned char TAB[]= {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf

//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay();P3=0xbf;//第七个灯亮 delay();P3=0x7f;//第八个灯亮 delay();} }

LED=0X01;//P1=00000001B while(1)//死循环,不停的点亮和熄灭LED { for(t=0;t<8;t++){ LED=~LED;//按位取反,点亮一个LED delay_ms(100);//延时0.1s LED=~LED;//按位取反 LED<<=1;//左移一位,

delay(); //调用延时函数 P3=0xef; //第五个灯亮 delay(); //调用延时函数 P3=0xdf; //第六个灯亮 delay(); //调用延时函数 P3=0xbf; //第七个灯亮 delay(); //调用延时函数 P3=

void main(void){ TMOD |= 0X10; //定时器1工作于方式1,16位定时器 TH1 = 0XFF; //定时器1定时时间=500uS TL1 = 0X06;ET1 = 1; //使能定时器1中断 EA =1; //开总中断 P1 = P1BUF;while

用五一单片机c语言编程,p1口控制八个发光二极管,实现每隔一秒,两两点亮,并循环。

void delay_s(unsigned char t);void main(){ while(1){ led = 1;//led 亮 delay_s(1);//延时1s led = 0;//led 暗 delay_s(5);//延时5s } } 这是主循环,你要把delay_s()这个延时函数补充进去,另外

1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,

当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循环,LED取反得到LED = 0,灯亮。*/ delay(500); /*此处延迟,保证连续两次按键

led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,

start:mov P0,#0FFh ;灌电流驱动灭灯 ,如果灯没有关,用 mov p0,#00h work:CLR LED1 ;灭如果反了把CLR改成 setb acall delay_1s SETB LED1 ;灭如果反了把setb改成 clr acall delay_3s ajmp work

当单片机LED灯一亮一灭间隔1秒时,可以使用以下代码实现:// 初始化IO口 P1 = 0xFF; // 设置延时时间 while (1) { P1 = 0x00; // 延时1秒 for (int i = 0; i < 10000; i++) { // 空循环 } P1 =

然后在这个定时器中断程序里面不断检测3.2口电平就行了,如果变回高电平就把灯在点亮(比如在这句直接将flag赋到设定的技术最大值)就行了。

求实现51单片机按下按钮LED灯亮1秒后熄灭?

说明:单片机控制LED灯间隔时间闪烁 所用程序很简单,实际情况可作相应变化,也有多种方式实现。proteus电路图 所需元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 (tip:没有给高

void t0isr() interrupt 1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;number++;if(number>1)number=0;switch(number){case 0:P2=0x02;P0=distab[dat/10];break;case 1:P2=0x01;P0=distab[dat%10];break;

设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s 然后再1s时的定时器中断子程序中设置输出脚的电平交替即可

当单片机LED灯一亮一灭间隔1秒时,可以使用以下代码实现:// 初始化IO口 P1 = 0xFF; // 设置延时时间 while (1) { P1 = 0x00; // 延时1秒 for (int i = 0; i < 10000; i++) { // 空循环 } P1 =

EA = 1;ET0 = 1;TR0 = 1;} void main(void){ InitTimer0();while(1)if(time==20) //中断20次,1s { time=0;LED=!LED; P1.0上的LED1s亮灭一次 } } void Timer0Interrupt(void) interrupt 1 { TH0

{ P1=0xff; //点亮P1口第0个引脚上的LED灯,0xff为二进制的11111111 delay(1000); //延时1秒 P1=0x00; //将P1口全部置为0,熄灭LED灯 delay(1000); //延时1秒 } } 上述程序的作用是在单片机的P1口上间隔点亮

单片机间隔点亮一led灯的C语言程序

TF0=0;//定时器清0 t++; //中断一次累加1 if(t==20) //预置值,溢出20次就是1秒钟,晶振12MHZ { t=0;P3=~P3; //反转LED灯的亮灭 } } /***/

TR1=1;while(1);} void timer1(void) interrupt 3//中断子程序 { TH1=(65536-50000)/256; //定时50毫秒 TL1=(65536-50000)%256;a++;if(a==20){a=0;LED=!LED;}//20次是1s LED亮灭 }

P0 = 0xc0;//点亮前两个发光二极管P0.0和P0.1;delay(1000);//延时1秒 P0 = 0x30;//点亮第三个和第四个LED delay(1000);P0 = 0x0c;delay(1000);P0 = 0x03;} } 二、include include <

//设置定时器工作方式为方式1 EA=1;//开总中断 ET0=1;//开中断允许位 TR0=1;//定时器计数 P1=0xfe;//这里假设led灯与P1口相连并且 //低电平有效 } void timer0()interrupt 1 { TH0=0x3c;TL0=0xB0;//

include define uchar unsigned char sbit LED=P1^0;uchar time;void InitTimer0(void){ TMOD = 0x01; //定时器0,工作方式1 TH0 = 0x3c;TL0 = 0xb0; //50ms中断一次 EA = 1;ET0 = 1;

每按下一次按键,ID的值是不相同的,所以单片机就很容易识别不同功能的身份了。(2. 设计方法 从上面的要求我们可以看出,L1到亮灭受开关K1来控制,我们给L1亮灭定义出不同的ID号,当L1在亮时,ID=0;当L1在灭时,

只要主程序中使用定时器行成间隔1s的定时,然后依次顺序点亮即可,可以通过对应GPIO依次置1或0实现,视外部电路而定。

用51单片机的定时器实现LED灯逐一点亮,间隔一秒。要求拨动控制开关可以控制灯的方向。

上述程序的作用是在单片机的P1口上间隔点亮一盏LED灯,每隔1秒钟灯的状态会发生一次变化,即由点亮状态变为熄灭状态,再由熄灭状态变为点亮状态。

1 利用定时计数器0 工作在方式2 定时50毫秒 结合软件计数器(初始值选20)允许定时计数器中断 2 设计一个定时器0的中断服务程序 每50毫秒 就中断 在中断程序中软件计数器减1 当减到0时,表示1秒时间到

先写一个延时子函数delay,延时时间1秒。然后写LED=0;delay(1);LED=1;这样就可以做到一亮一灭,再把这段程序加入到循环中就可以,循环函数很简单不用再说了吧,如果还不懂回复我给你程序

TR0 = 1;//启动计数器0 启动后,TH0TL0就会自动加一。如下:B800 B801 B802 ……当加到0000时,TF0就自动为1。

51单片机 定时器问题 (LED小灯 每隔一秒亮灭一次)

可以用for循环试试unsingned char i;for(i=0;i<5;i++)//流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-

void timer0() interrupt 1 { uchar t;//定义变量 TF0=0;//定时器清0 t++; //中断一次累加1 if(t==20) //预置值,溢出20次就是1秒钟,晶振12MHZ { t=0;P3=~P3; //反转LED灯的亮灭 } } /***/

1 利用定时计数器0 工作在方式2 定时50毫秒 结合软件计数器(初始值选20)允许定时计数器中断 2 设计一个定时器0的中断服务程序 每50毫秒 就中断 在中断程序中软件计数器减1 当减到0时,表示1秒时间到

timetemp: DS 1 LED: DS 1 CSEG AT 00H ORG 0000H LJMP START ORG 000BH LJMP Timer0Interrupt START:MOV SP,#60H MOV timetemp,#20 MOV P1,#0FFH;LED低电平点亮 LCALL InitTimer0 MOV LED,#

51单片机用定时器,怎么编程流水灯一秒闪烁一次,

嘿嘿 这个俺可以帮你解答 1 利用定时计数器0 工作在方式2 定时50毫秒 结合软件计数器(初始值选20) 允许定时计数器中断 2 设计一个定时器0的中断服务程序 每50毫秒 就中断 在中断程序中软件计数器减1 当减到0时,表示1秒时间到 (重新送初始值20) 判断拨动开关状态 如果为低低电平 则选择控制LED的端口内容左移一位 如果为高低电平 则选择控制LED的端口内容右移一位 即可实现对流水灯的方向控制。 呵呵 满意 就选满意回答哦
如果想实现无限循环那就采用死循环方式,可以无限的循环如while(1){};然后设定定时器定时时间为1s(此值需要根据单片机确定是否可以设定这么大),其次,设定一个变量对时间进行计数,根据计数情况做出相应的改变,程序可以这样设定: unsigned char gucLEDStatus = 0x00; //全局变量,表示灯当前的状态 0为灭,1为亮 volatile unsigned int gusTimeCnt; //全局变量对时间计数 int main() { //增加定时器初始化并开放中断 while(1) { if(gucLEDStatus == 0x01) //当前为亮状态 { if(gusTimeCnt >= 7200) //两个小时时间到 { gusTimeCnt = 0x00; //清零 gucLEDStatus = 0x00; //灯为灭状态 //此处加程序代码,控制灯为灭的状态 } else { //此处加程序代码,控制灯为亮的状态,此处会重复执行,可以进行控制 } } else if(gucLEDStatus == 0x00) //灯为灭的状态 { if(gusTimeCnt >= 3600) //1个小时 { gusTimeCnt = 0x00; gucLEDStatus = 0x01; //亮状态 //增加程序代码,控制灯亮 } else { //增加程序代码,控制灯灭,此处会重复执行,可以进行控制 } } } return 0; } 在中断函数中,对gusTimeCnt进行递增即可!
我再帮你补一课,看了你的标题,我写了一个用定时器0来控制一个LED灯第隔1秒钟亮灭一次的程序,希望对你有用,另外我也写了一个你说的那个程序,一起发上来吧 ****************这个是用定时器0控制一个灯的亮和灭****************************** #include #define uchar unsigned char #define uint unsigned int /**************************************/ uchar num; bit tt; sbit d=P1^0; /******************主程序入口********************/ void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TCON=0x10; EA=1; ET0=1; tt=255; while(1) { if(num==20) { tt=!tt; d=tt; num=0; } } } void timer() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++; } ****************这个程序是逐个点亮的(思路:由256逐减1,值由LED灯显示)*********************** #include #define uchar unsigned char #define uint unsigned int /**************************************/ uchar num,tt; //bit tt; sbit d=P1^0; /******************主程序入口********************/ void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TCON=0x10; EA=1; ET0=1; tt=255; while(1) { if(num==20) { tt--; P1=tt; num=0; } } } void timer() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++; }
算法: 1 采用定时器定时25毫秒 启动定时器工作 2 每当定时时间到中断 在中断服务程序中软件计数器减1(初始值为20) 3 当软件计数器减到0时,表示0.5秒时间到 这时可以判断开关状态 开关合上 可以让8个LED左移一位 开关断开 可以让8个LED右移一位 呵呵 按上诉算法 编写程序 就可以实现你的要求(指导可以见百度知道的消息 右上角) 满意 就选满意回答
设置一个delay_2s()就是: delay_2s() { for(i=0;i<200;i++) { for(j=0;j<200;j++) } } 具体要看你的晶振大小 然后 void main() { uchar temp = 0x01; while(1) { delay_2s(); P0 = temp delay_2s(); temp <<=1; i++; if(i>=7) { i = 0; temp = 0x01 } } } 很容易理解就是让0X01一直左移赋值给P0口然后循环
我再帮你补一课,看了你的标题,我写了一个用定时器0来控制一个LED灯第隔1秒钟亮灭一次的程序,希望对你有用,另外我也写了一个你说的那个程序,一起发上来吧 ****************这个是用定时器0控制一个灯的亮和灭****************************** #include #define uchar unsigned char #define uint unsigned int /**************************************/ uchar num; bit tt; sbit d=P1^0; /******************主程序入口********************/ void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TCON=0x10; EA=1; ET0=1; tt=255; while(1) { if(num==20) { tt=!tt; d=tt; num=0; } } } void timer() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++; } ****************这个程序是逐个点亮的(思路:由256逐减1,值由LED灯显示)*********************** #include #define uchar unsigned char #define uint unsigned int /**************************************/ uchar num,tt; //bit tt; sbit d=P1^0; /******************主程序入口********************/ void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TCON=0x10; EA=1; ET0=1; tt=255; while(1) { if(num==20) { tt--; P1=tt; num=0; } } } void timer() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++; }
外部中断的优先级是高于定时器中断的。首先是触发外部中断嘛,在外部中断程序里面开定时器中断,定时器设置为50ms,这个直接装初值大概46000(晶振12m)的样子,具体你自己算一下。然后在调用定时器中断程序里面肯定是要有个标志位的,这个标志位会累加n个定时器时间直到8s,然后在这个定时器中断程序里面不断检测3.2口电平就行了,如果变回高电平就把灯在点亮(比如在这句直接将flag赋到设定的技术最大值)就行了。最好用下降沿触发,低电平触发容易出问题总感觉,可能你程序逻辑是完全正确的,但是仿真或者实物的时候会出问题。
这个很简单:写个键盘扫描函数,一个延时函数。 单片机上电一直扫描键盘就可以,判断如果有按键按下就把LED对应的IO口拉低(或拉高,看你的硬件电路而定)点亮LED,延时10秒后再拉高IO口关闭LED。然后再回到键盘扫描程序继续扫描键盘。这是最简单的方法。
选用P1口作为输出口,接8只发光二极管,编程实现使8个发光二极管每隔200ms循环依次左移点亮.【摘要】 选用P1口作为输出口,接8只发光二极管,编程实现使8个发光二极管每隔200ms循环依次左移点亮.【提问】 选用P1口作为输出口,接8只发光二极管,编程实现使8个发光二极管每隔200ms循环依次左移点亮.【回答】 编程是编定程序的中文简称,就是让计算机代码解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。【回答】 五颗星哦【回答】
这个程序很简单,我觉得你自己在我的指导下也可以写出来,这样可以增加你的记忆,也可以多学一点东西。就是不明白为什么要从4000H开始执行,这样你的电路就要增EPROM(或EEPROM)了。 程序你可以这样写, 1、让一位亮(MOV P1.0,#0H ) 2、闪的次数(MOV R1,#5H ) 命令后面不写了 3、调用2秒延时程序。 4、取反 。 5、调用2秒延时程序。 6、减一判断R1是否到0,没到返回4,到了向下执行。 7、左移一位。 8、转移到2。这样就完成一个循环了。 至于仿真软件proteus 那就简单了,你自己画,如果不会画,找一个图自己修改一下就可以了。 这样写好玩吧?我也好长时间没有用汇编写了,命令有一点小的瑕疵(取反的位数),你可以自琢磨一下再写。