P1口是输入:如果你用的是89C51单片机的话,外部中断是在P3.2和P3.3引脚,P1口是没有的。所以,如果你既想用外部中断又想用P1口做控制输入端,就需要用“与(或)”逻辑电路从P1口导出中断信号给P3.2和P3.3引脚
while(P2_7); //没有按就循环 } else while(!P2_7); //按下就循环,等待松开 } void main(void) //主函数名 { while(1) { w(1); P1_0 = 0; w(0); P1_0 = 1;w(1); P1_1 = 0
:main*函数功能 :主函数*输 入 :无*输 出 :无***/main(){unsignedcharLED;LED=0xfe; //0xfe=11111110 while(1){ P0=LED;Delay10ms(50);LED=LED0;c--){for(b=38;b>0;b--){for(a=130;
你好:电路结构这样就够了,接下来需要程序去支持。因为现在使用手机回答,程序我没法给,但是你可以先到我百度空间里,最近的一篇文章叫单片机编程,里边我有写各种LED亮灭的程序和设计原理;如果不是你需要的,那你回复我,
程序如下:ORG 0000H LJMP MAIN ORG 000BH LJMP T0_INT ORG 0030H ;--- MAIN:MOV TMOD, #01H MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz MOV TL0, #LOW(65536 - 10000)SETB TR0
include
CPL p2.0;10*6*10MS=600MS时间到,P1.1取反 l1:RETI;中断返回 END 很简单吧 ,改一点就ok了。
89C51. p2口控制8个LED灯,正常运行时循环右移,中断(INT1)时,8个LED灯闪
1、首先在电脑中新建项目:Keil uVision4 51单片机LED闪烁编程,如下图所示。2、然后设计单片机端口与LED灯相连,如下图所示,输入代码。3、接着创建延迟函数,如下图所示,输入以下代码。4、然后创建C语言主函数,如下图
2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候 3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒钟有一个灯在闪烁,其中有一秒钟是灭灯状态 程序中使用了P1口与8个发光
给个四路:定意一个变量;if(按键1按下)变量为1;if(按键2按下)变量为2;if(变量==1){ 左移控制;} else if(变量==2){ 右移控制;}
count=0;//清零重新计数 P1=~P1;//0.5s闪烁 } }
define FALSE 0 define uchar unsigned char define th0 0x9e define tl0 0x58//25ms @12MHz Fosc鬼知道你的晶振多大 sbit LED=P1^0;//鬼又知道你的LED在哪 void Timer0()interrupt 1 { TL0=tl0;TH0=th0;LED
while(ms--){ for(i=0;i<120;t++){ ; } }}void main(){ unsigned char i=0,j=0; PData=0x00;//全灭状态 for (i=8;i>0;i--){//控制常亮的位置,先从最高位开始,依次循环到最低
mov ie,#83h mov p1,#00h jmp end
单片机MCS-51汇编问题。P1 口接8个LED灯,程序运行后,8个LED灯闪烁,闪烁频率为20Hz。急急急!!!!!!
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
include
1:设置一个变量zhidaoi,它可以从0循环到3 2:检测一个已取消缓冲的键。按“+1”3:当I值为每个值时,执行相应的模式。水量灯参考程序 #include #include #定义uchar无符号字符 Ucharj,温度;无效延迟(无符号整型
1、首先在电脑中新建项目:Keil uVision4 51单片机LED闪烁编程,如下图所示。2、然后设计单片机端口与LED灯相连,如下图所示,输入代码。3、接着创建延迟函数,如下图所示,输入以下代码。4、然后创建C语言主函数,如下图
请设计一个8个led同时全部闪烁的程序 include
1:设定一个变量i,可以从0到3循环的变化 2:检测一个经过消抖处理的按键,按一下,i+1 3:当i值为各个值时,执行相应的花样。流水灯参考程序 include include define uchar unsigned char uchar j,temp;void delay(un
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, #255 ; 8个led灯灭
求单片机设计8个led灯同时闪烁,并且led灯亮的时候控制蜂鸣器发生,led灯灭的时候关闭蜂鸣器的程序,谢谢
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。2、具体实现方法可以参考如下程序:
#255 ; 8个led灯不亮 MOV R2, #200 LP2:SETB P1.0 ; 蜂鸣器不响 DJNZ R6,DJNZ R7, $ - 2 DJNZ R2, LP2 MOV P0, #255 ; 8个led灯灭 RET ;--- END
用CD4017外加NE555做脉冲即可。
LED = LED>>1; // 右移 LED = LED|0x80;} else { P2 = LED;LED = LED << 1; // 左移 LED = LED | 0x01;} } void delay(unsigned int b){ unsigned char j;for(b; b > 0; b--) /
1. 假设 单片机输出低电平(0) LED 亮;2. 假设晶振为12M,则计数器 计数一次则为1uS;3. 假设你说的LED是一排(8个)都接在单片机P0口;4. 假设你说的是8个都同时亮,同时灭;5. 假设你说的是 亮 1S 然后
很简单,用rand函数和srand函数,这样将得到的值对8取余数,即rand%8,就可以点亮随机的灯了,至于其他如何点亮环节还有延时的你可以自己编写,想学单片机的人是必须学的,我也就不提示了,这只是个思路,要是全给你完整代
1:首先设定一个变量i,可以是从0到3循环的变化,2:再检测一个经过消抖处理的按键,按一下,即i+1 3:当i值为各个值时,执行相应的变换花样。流水灯参考程序 include include define uchar unsigned char uchar j,tmp
单片机 8个LED灯随机闪烁怎么做?
;定时器定时一秒,一个数码管秒个位加1,同时八个LED灯循环流动 很简单的题目,只能写很简单的程序:ORG 0000H JMP START ORG 000BH INC R2 RETI START:SETB TR0 MOV IE, #82H MOV R3, #127
LOOP1:MOV P0,LED JNB FLAG,MOV A,LED RL A MOV LED,A CLR FLAG DJNZ R2,LOOP1 MOV LED,#0FEH MOV R2,#8 LOOP2:MOV P0,LED JNB FLAG,MOV A,LED RL A RL A MOV LED,A CLR FLAG DJNZ R2,LOOP2 MOV
KEY1 EQU P1.0 KEY2 EQU P1.1 ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV A,#0FEH MOV P2,A LOOP:JB KEY1,LOOP1 MOV P2,#0FFH LCALL DELAY RL A MOV P2,A LCALL DELAY SJMP LOOP LOOP1:JB KEY2,LOOP
;假设1:D1~D8八个彩灯接在P1口,输出低电平发光 ;假设2:系统晶振为12MHz ;假设3:N = 5 ;程序如下:ORG 0000H MOV R3, #5 ;N=5 LOOP0:MOV A, #0FFH MOV P1, #0FFH ;开始时全灭 ;---逐个
求汇编,八个led交替闪烁,汇编语言汇编语言 按下开关s1(开关是那种按下去不会弹回来的),led1.3.5.7和led2.4.6.8交替闪烁,按下s2,led1234和led5678交替闪烁,间隔都是0.5秒,按下s3全灭 --- 电路与程序
求汇编,八个led交替闪烁,汇编语言汇编语言
不会。。。。路过。。。。网络100分 专业人士也不会花那么多时间来 编这个题吧 应该把 手机 留下/程序: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++); }
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。 2、具体实现方法可以参考如下程序: 拓展资料: 1、单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。 2、单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 3、单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。 参考资料:百度百科:单片机
方法: 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); }
//prj1 流水灯实验,LED灯是共阳极,给0亮。J1跳线帽 //用的是移位的方法 //头文件定义 #include #include //延时函数定义 void delay(void) { unsigned int i; unsigned int j; for(i=200;i>0;i--) { for(j=200;j>0;j--); } } void main() { P0 = 0xfe; //1111 1110 delay(); while(1) { P0 = _crol_(P0,1) ; // 将P0端口循环左移 delay(); if(P0 == 0x7f) { P0 = _cror_(P0,1); delay(); P0 = _cror_(P0,1); delay(); P0 = _cror_(P0,1); delay(); P0 = _cror_(P0,1); delay(); P0 = _cror_(P0,1); delay(); P0 = _cror_(P0,1); delay(); P0 = _cror_(P0,1); delay(); } } }
#include #include #define uchar unsigned char uchar cnt; void t0isr() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; cnt++; P1=_crol_(P1,1); } main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; P1=0xfe; while(1); }
这是一个很简单的控制单片机端口的程序,估计老师要求用定时器的吧 提问的时候没说具体要求,所以只好给出一个利用定时器来完成的流水灯程序 定时时间为一秒,即1000毫秒,可根据实际需要进行修改 星号是各个函数间的分隔符号,不喜欢可以删除,程序如下: /***************************************************************************/ #include //通用89C52头文件 char LD[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED流水灯编码 int n,t; /***************************************************************************/ void main(void)//主函数 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; TMOD=0x01; EA=1; ET0=1; TR0=1;//定时器初始化 while(1) { P2=LD[t];//状态输出 } } /***************************************************************************/ void int1() interrupt 1 //定时器中断 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++; if(n>1000){n=0;t++;}//如果达到一秒 if(t>7){t=0;}//如果达到24小时,小时清零 } /***************************************************************************/
#include //头文件声明 // #define uint unsigned int #define uchar unsigned char sbit wela=P1; // P1口控制各数码管的数据发送数据 // sbit key1=P3^2; uchar num; uchar num1; uchar num2; uchar num3; uchar num4; //计数为NUM,num1为个位,num2为十位....// uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //计数数字在数码管上的显示(数码管是8位的..) // void delay(uint z); void liushui(); void main() { EA=1;//开总中断 // EX0=1;//开外部中断0 3.2口,默认的是电平触发方式,如果需要用跳变沿触发,请设置下,INT0为P3.2口// num1=0; num2=0; num3=0; num4=0; while(1) //程序大循环// { wela=0x80; delay(100); //选择个位,显示0 wela为 P0口,锁存器的选择,将数据发送到不同的锁存器锁存 // P3=table[num1]; delay(100); wela=0x40; delay(100); //选择十位,显示0 // P3=table[num2]; delay(100); wela=0x20; delay(100); //选择百位,显示0 // P3=table[num3]; delay(100); wela=0x10; delay(100); //选择千位,显示0 // P3=table[num4]; delay(100); liushui(); //调用流水灯函数 num1=num1++; //判断数码管的显示方式 if (num1>9) { num2++; num1=0; if (num2>9) { num3++; num2=0; if(num3>9) { num4++; num3=0; if(num4>9) { num1=0 ; num2=0 ; num3=0 ; num4=0 ; } } } } } } void liushui() //子程序 { P1=0x01 ; delay (200); P1=0x03 ; delay (200); P1=0x07 ; delay (200); P1=0x0F ; delay (200); P1=0x1F ; delay (200); P1=0x3F ; delay (200); P1=0x7F ; delay (200); P1=0xFF ; delay (200); P1=0X00; delay (400); } void delay(uint z) //延时子程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void exit0() interrupt 0 //中断服务程序 { P1=0x80 ; delay (200); P1=0xC0 ; delay (200); P1=0xE0 ; delay (200); P1=0xF0 ; delay (200); P1=0xF8 ; delay (200); P1=0xFC ; delay (200); P1=0xFE ; delay (200); P1=0xFF ; delay (200); P1=0X00; delay (400); num1=num1--; if (num1<1); { if(num2<1); { if(num3<1); { num4--; num3=9; } num3--; num2=9; } num2--; num1=9; } wela=0x80; delay(100); P3=table[num1]; delay(100); wela=0x40; delay(100); P3=table[num2]; delay(100); wela=0x20; delay(100); P3=table[num3]; delay(100); wela=0x10; delay(100); P3=table[num4]; delay(100); } 你不会再QQ问问上也问了的吧,怎么那么像?http://wenwen.soso.com/z/q250236048.htm 把中断服务程序改一下~~就可以用了