中断方式:ORG 0000H JMP MAIN ORG 000BH JMP T0_INT MAIN:MOV TMOD, #01H MOV TH0, #HIGH(65536-62500)MOV TL0, #LOW (65536-62500)SETB TR0 MOV A, #7FH MOV P0, A M_
P1=0x00;//点亮P1口 delay(2000);//延时 P1=0xff;//熄灭P1口 delay(200);//延时 } } 纯手打,答对你有帮助的话请采纳 谢谢
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;//左移一位,
// 51单片机控制八个发光二极管 左右循环。include
用五一单片机c语言编程,p1口控制八个发光二极管,实现每隔一秒,两两点亮,并循环。
举个简单的例子,8个LED灯的正级分别接在P1.0到P.7上面,负极分别接在P2.0到P2.7上面,P1 = 0xff; (P1口全部高电平) P2 = 0x00; (P2口全部低电平),此时电流通过P1口经LED流向P2口,8个灯全部点亮,
功能:开发板8个发光管一起闪动 实验内容:输出底电平可以点亮RD口的发光管 高电平可以关掉发光管 开发板连接方法:装上J2。/ include
1:设置一个变量zhidaoi,它可以从0循环到3 2:检测一个已取消缓冲的键。按“+1”3:当I值为每个值时,执行相应的模式。水量灯参考程序 #include #include #定义uchar无符号字符 Ucharj,温度;无效延迟(无符号整型
CALL PRG1 ; 亮且发音 CALL PRG2 ; 灭且静音 SJMP 0 ;--- PRG1:MOV P0, #0 ; 8个led灯亮 MOV R2, #200 LP1:CPL P1.0 ; 蜂鸣器响 DJNZ R6,DJNZ R7, $ - 2 DJNZ R2, LP1 MOV P0
请设计一个8个led同时全部闪烁的程序 include
方法:1:设定一个变量i,可以从0到3循环的变化 2:检测一个经过消抖处理的按键,按一下,i+1 3:当i值为各个值时,执行相应的花样。流水灯参考程序 include include define uchar unsigned char uchar j,temp;void de
用单片机设计8个led灯同时闪烁的程序!!
请设计一个8个led同时全部闪烁的程序 include
点阵的 48 列数据线驱动由 6 片 74HC595 级联组成,前一片 74HC595 的 Q’H 引脚连接下一片的SI引脚,各片的SCK、RCK、SRCLR、G引脚分别并联。 (2)LED点阵块 图三LED点阵块 8*8的LED点阵为单色行共阴模块,单点的工作电压为
P1 = P1LEDBUF ;P1LEDBUF =_crol_(P1LEDBUF,1); //位移P1口LED,准备下一轮 //如果灯亮和灭的刚好反了(熄了一个灯,亮了7个)就把初值改了 } if(Counter == 40){ Counter = 0;//计数清0,周期2秒
1、简单的做法是:每个LED的阳极接5V,阴极串限流电阻1k左右后接单片机P1口。(89C51单片机端口输出电流是靠上拉,很小60uA以下,输入电流是MOS管对地,每个管脚1.6mA左右。因此对于51必须靠灌电流直接驱动LED。即共阳接法。
列驱动用8位的移位74hc595或16位恒流驱动芯片stc2221,行驱动用达林顿或三极管
51单片机的引脚是拉低能力强,74ls138拉低时电流不到10mA,考虑到138是低电平有效,作为扫描信号是低有效,其它线是高电平,所以,如果不加反向器的情况下,138是接行或列led的负极.P1口接led的正极,可是P1口高输出能力
51单片机LED8*8驱动
we2=1;P0=xdat[i];we2=0;if(++i==8) i=0; //每屏一个数字由8 个字节构成 if(++t==250) //每个数字刷新显示一段时间 { t=0;if(++Num_Index==10) Num_Index=0; //显示下一个数字 } break;case 1
根据你的要求写了一个,记得选择满意答案哦 ;FOSC = 12MHz ;sysclk = 1us flag bit 00h cnt equ 25000 ;计时器初始值,频率 = 20,周期 = 50ms,一半为25ms org 00h jmp main org 0003h jmp int0_isr org
没必要循环初始化你的LCD,将初始化程序放到主函数中。你的显示函数中也已经包含了清屏指令,不需要在while里面再次加入清屏指令。如果一定要用,建议你在所有清屏指令后加入的延时够大。清屏指令过多,延时太少的话,相当于
^_^,我以前做个一个类似的项目,经验认为一般每一行使用1~2ms就可以了,也就是说实际应用中20ms内完成一个周期一般是没有问题的,频率太高,显示会变暗,频率太低就会闪烁,下面是部分代码,原程序还有一个红外遥控输入
我用51单片机串行通信方式去控制一块8×8LED点阵屏,显示的时候,文字闪烁厉害……
MAIN:MOVR1,#7;MOVA,#0FCH LOOP1:MOVP1,A RLA CALLDELAY DJNZR1,LOOP1 MOVP1,00H CALLDELAY CALLDELAY MOVR1,#7;MOVA,#3FH LOOP2:MOVP1,A CALLDELAY RRA DJNZR1,LOOP2 MOVP1,#00H CALLDELAY SJMP MAIN DEL
sbit key3=P3^2;void delay(int ms){ uchar i;while(ms--)for(i=0;i<123;i++);} uchar code tab[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x
P3=0xbf; //第七个灯亮 delay(); //调用延时函数 P3=0x7f; //第八个灯亮 delay(); //调用延时函数 } }
虽然编程51单片机。而且让每个LED灯都亮得非常好。这可太好了问题。这个技术应该有专门的负责人员来搞定。
sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;uchar led1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchar led2[]={0xe7,0xdb,0xbd,0x7e};bit flag;void delay(uchar a){ uchar i;while(
用74hc595芯片做输出,即可实现三个端口控制多输出的问题。对于超过八输出,再增加一个595芯片即可实现。
求解答,这个51单片机如何用三个端口控制八个LED灯流水闪烁
第一种:/* 文件名:8bkey.asm?功能:AT89S51单片机的P1接8个发光二极管接了8个开关,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。入口参数:无 出口参数:无 硬件说明:1 接
delay(500);LED=0x00;} } if(K2==0){ delay(10);if(K2==0){ delay(500);LED=0x00;delay(500);LED=0xff;delay(500);LED=0x00;delay(500);LED=0xff;} } } } 大致程序如上,按实际需要修改。
八个灯接在单片机的P1口(P0,P2,P3,P4都一样)while(1){ delay(你想要延时的时间);P1=0xff;delay(你想要延时的时间);P1=0;} 注意led最好加驱动,不然单片机会坏的。
DJNZ R2, LP2 MOV P0, #255 ; 8个led灯灭 RET ;--- END
方法:1:设定一个变量i,可以从0到3循环的变化 2:检测一个经过消抖处理的按键,按一下,i+1 3:当i值为各个值时,执行相应的花样。流水灯参考程序 include include define uchar unsigned char uchar j,temp;void de
请设计一个8个led同时全部闪烁的程序 include
利用单片机控制8个发光二极管,实现8个灯同时闪烁的控制程序
这个程序很简单,我觉得你自己在我的指导下也可以写出来,这样可以增加你的记忆,也可以多学一点东西。就是不明白为什么要从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 那就简单了,你自己画,如果不会画,找一个图自己修改一下就可以了。 这样写好玩吧?我也好长时间没有用汇编写了,命令有一点小的瑕疵(取反的位数),你可以自琢磨一下再写。硬件接法没说,假设注水灯接在P0口,高电平点亮,以下程序可供参考。 主程序: #include #define uchar unsigned char uchar a=0, b=0; void main() { TMOD=0X00;//定时器0以工作方式0 TH0=(8192-5000)/256;//定时5ms TH0=(8192-5000)%256; ET0=1;//开定时器0中断 EA=1;//开总中断 TR0=1;//启动定时器0 while(1); } 中断程序: void timer0 (void) interrupt 1 { a++; if(a==100)//中断100次 500ms { a=0; P0=3<<b; // 3用二进制表示是 00000011 亮两个灯 // 左移2位后为00001100 仍亮两个灯 b+=2; if(b==8)b=0; } }
驱动小功率LED是没有问题的。1个51单片机外加4个PNP三极管(如C9012或8550),以及12个电阻就可以了。将32个LED分成4组共阳连接,采用动态扫描方式输出驱动LED,这样共占用单片机12根口线。
5ms×8=40ms(25次/秒),这只是人眼视觉暂留的下限。 我觉得你至少应该提高4~5倍的刷新速度才行(例如每行显示1ms)。 另外如果你的51还要执行别的运算,应尽量减少它们的时间,也就是让51的绝大部分时间都在驱动LED“显示”。 如果还不行,那就只能在LED驱动一侧加锁存器了。
你好,你那个U2是什么器件?请说明一下。或者把这个仿真文件直接发过来,实现比较快。
#include 包含单片机专用头文件 #include 这个是什么俺也不知道,但这个程序不需要这个头文件 void Delay10ms(unsigned int c); 自定义的延时函数声明 main() 主函数 { unsigned int LED; 建立一个数值型变量,变量名 LED LED=0xfe; 给这个变量赋值,0xfe 换成二进制数为 1111 1110 while(1) 主循环 { P2=LED; 点亮发光管,即先点亮右边的第一个 Delay10ms(50); 延时一段时间 LED=LED<<1; 点亮的发光管,向左移动一位 if (P2==0x00) 判断是否8个全部点亮了 { LED=0xff; 如果全部点亮,则将全部发光管熄灭 } } } void Delay10ms(unsigned int c)延时函数主程序 { unsigned char a, b;建立两个变量 a b for(;c>0;c--)循环语句,不断改变变量数值,已达到延时目的 { for(b=38;b>0;b--) { for(a=130;a>0;a--); } } } 给你翻译了,希望能帮到你
8*8也就能显示字符,显示汉字比较吃力。 #include #include #define uchar unsigned char #define uint unsigned int uchar code Table_of_Digits[]= { 0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //0 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7 0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8 0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00, //9 0xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff }; uchar code xdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar i=0,j=0,t=0,Num_Index,key,xi,yi; sbit we1=P1^1; sbit we2=P1^3; //主程序 void main() { //P1=0x80; Num_Index=0; //从0 开始显示 TMOD=0x01; //T0 方式0 TH0=(65536-2000)/256; //2ms 定时 TL0=(65536-2000)%256; IE=0x82; key=0; xi=0; yi=0; EX0=1; IT0=1; TR0=1; //启动T0 while(1); } //T0 中断函数 void ext_int0() interrupt 0 { key++; key&=0x03; } void LED_Screen_Display() interrupt 1 { TH0=(65536-2000)/256; //2ms 定时 TL0=(65536-2000)%256; switch(key) { case 0: P0=0xff; we1=1; P0=~Table_of_Digits[Num_Index*8+i]; we1=0; P0=0xff; //输出位码和段码 we2=1; P0=xdat[i]; we2=0; if(++i==8) i=0; //每屏一个数字由8 个字节构成 if(++t==250) //每个数字刷新显示一段时间 { t=0; if(++Num_Index==10) Num_Index=0; //显示下一个数字 } break; case 1: we1=1; P0=~xdat[xi]; we1=0; we2=1; P0=ydat[yi]; we2=0; if(++t==250) //每个数字刷新显示一段时间 { t=0; yi++; if(yi>7){yi=0;xi++;} if(xi>7)xi=0; } break; case 2: we1=1; P0=0x00; we1=0; P0=0xff; //输出位码和段码 we2=1; P0=xdat[i]; we2=0; if(++t==250) //每个数字刷新显示一段时间 { if(++i==8) i=0; //每屏一个数字由8 个字节构成 t=0; } break; default: key=0; i=0; j=0; t=0; xi=0; yi=0; Num_Index=0; we1=1; P0=0xff; we1=0; we2=1; P1=0x80; we2=0; break; } }
#includereg52.h void LED_turnon() { } void Delay1s() { } void LED_turnoff() { } void main() { while(1) { LED_turnon(); Delay1s(); LED_turnoff(); Delay1s(); } }
方法: 1:设定一个变量i,可以从0到3循环的变化 2:检测一个经过消抖处理的按键,按一下,i+1 3:当i值为各个值时,执行相应的花样。 流水灯参考程序 #include #include #define uchar unsigned char uchar j,temp; void delay(unsigned int ms) { uchar t; while(ms--) for(t=0;t<123;t++); } void main() { P1=0xff; delay(500); temp=0xfe; //有点怪,led接在P2.3~P2.6 for(j=0;j<4;j++) { P1=temp; delay(500); temp=_crol_(temp,1); } P1=0xff; while(1); }