52并不比51多接口,都是四个I/O口(P0,P1,P2,P3),我上面的程序把按键接在了P2口上,LED灯接在了P3口上。
int main(){ while(1){ p1=0xff;delay();p1=~p1;} } void delay(){ for(int i=0;i<1000;i++)for(int j=0;j,1000;j++)} 太久不碰单片机了,记不清了,大概就是这样
/* 准备第二个数据 */ uiDataOne = uiDataOne << 1;} /* 输入第二个数据:uiDataTwo */ for (i = 0; i < 8; i++){ /* 给出脉冲信号,首先将CLK置为0 */ HC595CLK = 0;if (0 != (uiDataTwo
//0xfe = 1111 1110,//说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环case 0xfd:P0=dofly_table[2];LED1=0;break;//调用表中的第三个//元素 0xa4 下标 0 才表示数组中的第一个元素case 0xfb:P
跪求!!!STC89C52单片机,用八个按键控制分别控制八个LED灯的代码(C语言)
include
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定
8个就可以类推)\r\r1、初始值为0:上电复位后,单片机驱动数码管显示0.(如果不会,百度里搜51控制数码管等关键字,特别多试验电路和程序。
void main(void){ //有必要的话,这里先对单片机各类寄存器进行初始化,这里因为简单,未做相关初始化工作 for(;;){ if(KEY1==0)//如果按键1被按下 {LED1=0;}//开启LED1灯 else{LED1=1;}//否则关闭LED1等,
在C51单片机中编写8个开关控制8个小灯的程序,用C语言和汇编语言两种编写
k,i;while(1){k=P1;//读按键键值,此处省略消抖程序for(i=0;i<8;i++){ //8次循环if((k&0x01)==0){//扫描到按下的按键break;//跳出循环}k>>=1;//k右移1位}P2=table[i];//根据i的值显示}}
sbit KEY2 = P1^1;sbit LED1 = P2^0;sbit LED2 = P2^1;void main(void){ //有必要的话,这里先对单片机各类寄存器进行初始化,这里因为简单,未做相关初始化工作 for(;;){ if(KEY1==0)//如果按键1被按下
MAIN:MOV SP,#7 MOV P0,#0FFH;P0口初始化,设置P0口为输入方式 LOOP:MOV A,P0;将P0口的状态读入累加器A,P0口的状态由开关SW1~SW2控制 MOV P1,A;P0口的状态送P1口显示 MOV 20H,A;将P0口的状态数据送20H单元
8个开关分别接P1.0-P1.7 控制输出是P0.0-P0.7LED灯 还有开关延时6S和按住一个按钮锁住其它按钮 例如:按下P0.0松开按钮 然后延时5s灯亮并且在5s之内锁住P0.1-P0.7的输入 --P0.0,是接的按键? 前面不
汇编语言的变成已经很不习惯了。假设 八个开关分别接在 P1.0—— P1.7,八个发光二极管接在 P0.0 -P0.7 。汇编语言编程如下。ORG 0000H start: mov P1,#0ffH mov P0,#0ffH mov A,P1 mov P0,A lcall delay
CPL P1.1 LOOP2:JB P0.2,LOOP3 JNB P0.2,CPL P1.2 LOOP3:JB P0.3,LOOP4 JNB P0.3,CPL P1.3 LOOP4:JB P0.4,LOOP5 JNB P0.4,CPL P1.4 LOOP5:JB P0.5,LOOP6 JNB P0.5,CPL P1.5 LOOP
求汇编语言程序:8个开关p0.0——p0.7分别控制8个灯p1.0——p1.7,
LED = 0x00;} while ( Maikuan!=200){ LED = 0x55;} Maikuan = 0;} //最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。for(j = 0;j<=7;j++){ i
k,i;while(1){k=P1;//读按键键值,此处省略消抖程序for(i=0;i<8;i++){ //8次循环if((k&0x01)==0){//扫描到按下的按键break;//跳出循环}k>>=1;//k右移1位}P2=table[i];//根据i的值显示}}
做出来了:
P1口接SW,SW另一端接地 P2口接LED,LED另一端接地
MOV IO_LED,#DATA_CloseLED;同时关闭8个LED LCALLDELAY500MS;延时0.5秒 MOV IO_LED,#DATA_OpenLED;同时打开8个LED LCALLDELAY500MS;延时0.5秒 LJMP MAIN;循环 END;上面程序演示了8个LED间隔0.5秒同时亮
程序如下: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
急求程序,89C51汇编语言写8个按键控制8个LED
这程序,是我写的。 程序,是好用的,初始状态,可以做到全灭。 你的电路,弄反了。 你把八个LED,都反过来,公共端,接在电源上,就可以了。 正确电路,可见: http://zhidao.baidu.com/question/591052586.html ------------ 按照楼主的电路,如下程序即可: ORG 0000H JMP MAIN ORG 000BH JMP T0_INT ORG 0030H ;--------------------------------- MAIN: MOV TMOD, #01H MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz MOV TL0, #LOW(65536 - 10000) SETB TR0 MOV IE, #82H MOV R7, #50 ;500ms ;初始化 MOV 20H, #03FH ;低 6 位的初始状态,是灭的 MOV 21H, #0FFH ;初始化 LOP:SJMP LOP ;--------------------------------- T0_INT: MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz MOV TL0, #LOW(65536 - 10000) MOV A, P2 CPL A MOV B, A XRL A, 21H ANL A, 21H MOV 22H, A MOV 21H, B ANL A, #3FH XRL 20H, A MOV A, 22H ANL A, #0C0H XRL 23H, A DJNZ R7, T0_E MOV R7, #50 ;500ms亮500ms灭 JB 23H.7, S2 XRL 20H, #80H SJMP S3 S2: ANL 20H, #7FH ;ORL 20H, #80H S3: JB 23H.6, S4 XRL 20H, #40H SJMP T0_E S4: ANL 20H, #0BFH; ORL 20H, #40H T0_E: MOV P1, 20H RETI ;--------------------------------- ENDORG 00H AJMP MAIN ORG 13H AJMP EX1INT ORG 0030H MAIN: MOV P1,#0 SETB EA SETB EX1 SETB IT1 MAIN1: MOV P1,A AJMP MAIN1 EX1INT: INC A CJNE A,#0,RTI MOV A,#0 RTI: RETI END
汇编语言的变成已经很不习惯了。 假设 八个开关分别接在 P1.0—— P1.7,八个发光二极管接在 P0.0 -P0.7 。汇编语言编程如下。 ORG 0000H start: mov P1,#0ffH mov P0,#0ffH mov A,P1 mov P0,A lcall delay ljmp start delay: mov r7,#100 loop: mov r6,#100 djnz r6,$ djnz r7,loop ret END
延时做 nop 的多次嵌套循环,用ajump 指令和 djnz Rn 指令 关于屏蔽接收,可以用相关寄存器做 逻辑处理,或者是比较跳转处理 摁钮来说,因为是输入,在输入之前,先对接脚做输出高电平处理,然后做接收,否则可能会烧掉单片机接脚内部的fet 管 延时六秒不好控制,如果晶振频率你知道的话,多用nop指令,来缓冲循环段的长短不一问题
用c51是多么简单的事情啊。你的每个灯的顺序不说。不好写。 思路这样的: sbit led1=p1^0; ~~~ 把所有的灯都定一下。 void delay(int ms) { int x,y; for(x=ms;x>0;x--) for(y=110;y>0;y--); } 一个nms的延迟,要求是12m的晶振。 void main() { while(1) { led1=0; delay(1000); led1=1; 里面随便写了。 } }
51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序: ;假设晶振12MHZ,P1控制8个LED低电平亮 ;启动入口======================== ORG 0000H ;复位启动 AJMP START ; ORG 001BH ;T1中断 AJMP T1INT ; ;定义变量======================== YSJS EQU 30H;延时计数器 LED EQU 31H;LED控制缓冲器 ;主程序========================== START: MOV LED,#0FEH ;初始化数据 MOV YSJS,#0 ; ; MOV TMOD,#10H ;定时器1工作于方式1,16位定时器 MOV TL1,#0B0H ;设置定时初值 MOV TH1,#3CH ;定时时间=50mS SETB ET1 ;使能定时器1中断 SETB TR1 ;启动定时器1 SETB EA ;开总中断 MOV P1,LED ;初始化流水灯 ; LOOP: JMP LOOP ;循环等待中断 ; ; T1INT: PUSH PSW ;定时器1中断程序 PUSH ACC ;保护现场 ; MOV TH1,#3CH ;定时时间=50mS MOV TL1,#0B0H ; INC YSJS ; PUSH ACC ;保护ACC MOV A,YSJI ; CJNE A,#2,QT1 ;50mS*2=100mS MOV P1,LED ; MOV A,LED ; RL A ;累加器A的值循环左移1位 MOV LED,A ; MOV YSJS,#0 ; ; QT1: POP ACC ;恢复现场 POP PSW ; RETI ;返回主程序 END ;汇编程序结束
电路(图)不合适 1、P0口应该用于输出,你可以接LED,且负极接管脚,正极接VCC. 2、按键任意接P1~P3 仅告诉这些!!
/******************************************************* * 程序名称:hc595.c * 程序功能:595的应用文件 * 程序作者:吴鉴鹰 * 创建时间:2014-3-10 * 修改时间: * 程序版本:V0.1 ******************************************************/ /* * 包含头文件 */ #include "inc/hc595.h" #include "reg51.h" /* * 定义引脚 */ /* 时钟信号线引脚定义 */ sbit HC595CLK = P0^5; /* 片选信号线引脚定义 */ sbit HC595RCK = P0^6; /* 数据输入引脚定义 */ sbit HC595DATA = P0^7; /****************************************************** * 函数名称:SendData * 函数功能:74HC595数据的发送 * 入口参数:unsigned int uiDataOne, unsigned int uiDataTwo * 出口参数:void *******************************************************/ void SendData(unsigned int uiDataOne, unsigned int uiDataTwo) { unsigned int i = 0; /* 将片选信号置为低电平 */ HC595RCK = 0; /* 输入第一个数据:uiDataOne */ for (i = 0; i < 8; i++) { /* 给出脉冲信号,首先将CLK置为0 */ HC595CLK = 0; if (0 != (uiDataOne & 0x80)) { HC595DATA = 1; } else { HC595DATA = 0; } /* 给出脉冲信号,首先将CLK置为1 */ HC595CLK = 1; /* 准备第二个数据 */ uiDataOne = uiDataOne << 1; } /* 输入第二个数据:uiDataTwo */ for (i = 0; i < 8; i++) { /* 给出脉冲信号,首先将CLK置为0 */ HC595CLK = 0; if (0 != (uiDataTwo & 0x80)) { HC595DATA = 1; } else { HC595DATA = 0; } /* 给出脉冲信号,首先将CLK置为1 */ HC595CLK = 1; /* 准备第二个数据 */ uiDataTwo = uiDataTwo << 1; } /* 将片选信号置为高电平 */ HC595RCK = 1; }