朋友们帮忙写个51单片机的按键小程序?汇编的

作者&投稿:都帝 (若有异议请与网页底部的电邮联系)
求大神帮写一个51单片机的小程序。用4×4键盘~


#include//Function declarationsvoid cct_init(void);void delay(int);void lcdinit(void);void writecmd(int);void writedata(char);void Return(void);char READ_SWITCHES(void);char get_key(void);//*******************//Pin description/*P2 is data busP3.7 is RSP3.6 is EP1.0 to P1.3 are keypad row outputsP1.4 to P1.7 are keypad column inputs*///********************// Define Pins//********************sbit RowA = P1^0; //RowAsbit RowB = P1^1; //RowBsbit RowC = P1^2; //RowCsbit RowD = P1^3; //RowDsbit C1 = P1^4; //Column1sbit C2 = P1^5; //Column2sbit C3 = P1^6; //Column3sbit C4 = P1^7; //Column4sbit E = P3^6; //E pin for LCDsbit RS = P3^7; //RS pin for LCD// ***********************************************************// Main program//int main(void){ char key; // key char for keeping record of pressed key cct_init(); // Make input and output pins as required lcdinit(); // Initilize LCD writecmd(0x95); writedata('w'); //write writedata('w'); //write writedata('w'); //write writedata('.'); //write writedata('T'); //write writedata('h'); //write writedata('e'); //write writedata('E'); //write writedata('n'); //write writedata('g'); //write writedata('i'); //write writedata('n'); //write writedata('e'); //write writedata('e'); //write writedata('r'); //write writedata('i'); //write writedata('n'); //write writedata('g'); //write writecmd(0xd8); writedata('P'); //write writedata('r'); //write writedata('o'); //write writedata('j'); //write writedata('e'); //write writedata('c'); //write writedata('t'); //write writedata('s'); //write writedata('.'); //write writedata('c'); //write writedata('o'); //write writedata('m'); //write writecmd(0x80); while(1) { key = get_key(); // Get pressed key //writecmd(0x01); // Clear screen writedata(key); // Echo the key pressed to LCD }}void cct_init(void){ P0 = 0x00; //not used P1 = 0xf0; //used for generating outputs and taking inputs from Keypad P2 = 0x00; //used as data port for LCD P3 = 0x00; //used for RS and E }void delay(int a){ int i; for(i=0;i E = 1 delay(150); E = 0; // => E = 0 delay(150);}void writecmd(int z){ RS = 0; // This is command P2 = z; //Data transfer E = 1; // => E = 1 delay(150); E = 0; // => E = 0 delay(150);}void lcdinit(void){ ///////////// Reset process from datasheet ///////// delay(15000); writecmd(0x30); delay(4500); writecmd(0x30); delay(300); writecmd(0x30); delay(650); ///////////////////////////////////////////////////// writecmd(0x38); //function set writecmd(0x0c); //display on,cursor off,blink off writecmd(0x01); //clear display writecmd(0x06); //entry mode, set increment}void Return(void) //Return to 0 location on LCD{ writecmd(0x02); delay(1500);}char READ_SWITCHES(void) { RowA = 0; RowB = 1; RowC = 1; RowD = 1; //Test Row A if (C1 == 0) { delay(10000); while (C1==0); return '7'; } if (C2 == 0) { delay(10000); while (C2==0); return '8'; } if (C3 == 0) { delay(10000); while (C3==0); return '9'; } if (C4 == 0) { delay(10000); while (C4==0); return '/'; } RowA = 1; RowB = 0; RowC = 1; RowD = 1; //Test Row B if (C1 == 0) { delay(10000); while (C1==0); return '4'; } if (C2 == 0) { delay(10000); while (C2==0); return '5'; } if (C3 == 0) { delay(10000); while (C3==0); return '6'; } if (C4 == 0) { delay(10000); while (C4==0); return 'x'; } RowA = 1; RowB = 1; RowC = 0; RowD = 1; //Test Row C if (C1 == 0) { delay(10000); while (C1==0); return '1'; } if (C2 == 0) { delay(10000); while (C2==0); return '2'; } if (C3 == 0) { delay(10000); while (C3==0); return '3'; } if (C4 == 0) { delay(10000); while (C4==0); return '-'; } RowA = 1; RowB = 1; RowC = 1; RowD = 0; //Test Row D if (C1 == 0) { delay(10000); while (C1==0); return 'C'; } if (C2 == 0) { delay(10000); while (C2==0); return '0'; } if (C3 == 0) { delay(10000); while (C3==0); return '='; } if (C4 == 0) { delay(10000); while (C4==0); return '+'; } return 'n'; // Means no key has been pressed}char get_key(void) //get key from user{ char key = 'n'; //assume no key pressed while(key=='n') //wait untill a key is pressed key = READ_SWITCHES(); //scan the keys again and again return key; //when key pressed then return its value}

其实用一个按键就行 用个中断 中断里加个标志位 就行 重要的是 1602显示字 你自己会不会啊? 要是这个都不会 那你自己先看教学视频吧

(1);P3.3小键盘按下P1.3亮再按0.5秒灭。
org 0000h
ajmp main0
org 0080h
MAIN0:
CLR 21H ;清标志
main:
mov c,p3.3 ;检测按键
jc main
MOV R6,#200 ;设定延时
MOV R7,#200
TT0:
JNB 21H,TT2 ;检测灯状态
tt:
mov c,p3.3 ;检测按键
jnc tt1

JNB 20H,MAIN ;检测时间标志
CLR 20H
AJMP TT3
TT2:
mov c,p3.3 ;检测按键
jnc tt2
TT3:
CPL 21H ;改变灯状态
cpl p1.3
ajmp main
TT1: NOP ;延时但不是子程序
NOP
NOP
NOP
NOP
NOP
DJNZ R6,TT
MOV R6,#200
DJNZ R7,TT
MOV R7,#200
SETB 20H
AJMP TT
end
(2)数码管数据 p0,数码管控制p2 独立按键p1口 ,;对独立键进行按键次数计数,三位数码管显示。 *
;K1按下后,进行加1计数 *
;K2按下后,进行减1计数。 *
;K3按下后,进行加5计数。 *
;K4按下后,清计数单元,数码管显示0。 *
;按住键可以快速计数。
K1 BIT P1.4
K2 BIT P1.5
K3 BIT P1.6
K4 BIT P1.7
K_OLD EQU 30H
K_NEW EQU 31H
K_COUNT EQU 32H
DISSTART EQU 40H ;显示单元首地址
LED_DATA EQU P0 ;数码管数据口定义
;---------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0080H
;---------------------------------------------------------
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P0,#0FFH
MOV K_OLD,#00H
MOV K_COUNT,#00H
MAIN1:
CALL CONVT
CALL PLAY
CALL KEY_PROG
JMP MAIN1

KEY_PROG:
CALL K_SCAN ;键扫描
MOV A,K_NEW
CJNE A,K_OLD,KEY_P1
JMP KEY_P_END
KEY_P1:
MOV R4,#20
KEY_P2:
CALL CONVT ;用显示程序来进行键延时
CALL PLAY
DJNZ R4,KEY_P2

CALL K_SCAN ;再判断键是否按下
MOV A,K_NEW
CJNE A,K_OLD,KEY_P3
JMP KEY_P_END
KEY_P3:
JB ACC.0,LOOP1 ;K1按下
JB ACC.1,LOOP2 ;K2按下
JB ACC.2,LOOP3 ;K3按下
JB ACC.3,LOOP4 ;K4按下
JMP KEY_P_END
LOOP1:
INC K_COUNT ;键计数加1
JMP KEY_P_END
LOOP2:
DEC K_COUNT ;键计数减1
JMP KEY_P_END
LOOP3:
INC K_COUNT ;键计数加5
INC K_COUNT
INC K_COUNT
INC K_COUNT
INC K_COUNT
JMP KEY_P_END
LOOP4:
MOV K_COUNT,#00H ;键计数单元清零
KEY_P_END:
RET
;---------------------------------------------------------
;代码变换 (HEX TO BCD)
;---------------------------------------------------------
CONVT:
MOV A,K_COUNT
MOV B,#100
DIV AB
MOV DISSTART+2,A ;百位存放在DISSTART+2
MOV A,#10
XCH A,B
DIV AB
MOV DISSTART+1,A ;十位存放在DISSTART+1
MOV DISSTART,B ;个位存放在DISSTART
RET
;---------------------------------------------------------
; 键扫描子程序
;---------------------------------------------------------
K_SCAN:
MOV P1,#0FFH
MOV K_NEW,#00H
MOV A,P1
CPL A
ANL A,#0F0H
SWAP A
MOV K_NEW,A
RET
;---------------------------------------------------------
;延时子程序
;---------------------------------------------------------
DELAY:
MOV R6,#200
DEL:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL
RET
;---------------------------------------------------------
PLAY:
MOV R0,#DISSTART ;获得显示单元首地址
MOV R1,#07FH ;从第一个数码管开始
MOV R2,#03H ;共显示3位数码管
DISP1:
MOV A,@R0 ;获得当前位地址
MOV DPTR,#TAB_NU ;获得表头
MOVC A,@A+DPTR ;查表获得显示数据
MOV LED_DATA,A ;显示数据
MOV P2,R1 ;开始显示当前位
MOV A,R1 ;准备显示下一位
RR A
MOV R1,A ;下一位
INC R0 ;取下一个单元地址
LCALL DELAY2MS ;延时 2 MS
DJNZ R2,DISP1 ;重复显示下一个
MOV P2,#0FFH ;关闭显示
RET ;显示完成,返回
;---------------------------------------------------------
;延时子程序
;---------------------------------------------------------
DELAY2MS:
MOV R6,#10
DEL1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
TAB_NU:
db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代码表
;**********************************************************
END

两个例子我想够你明白的了。详细的解释,代表性的例子,可慢慢学习

试一下这个,灯接在p1.2,按键接在p3.3
ORG 00H;
MOV P3,#0FFH ;
SETB P1.2 ;
START:JNB P3.3,TT0;
AJMP START ;
TT0:LCALL D1MS ;
JNB P3.3,TT0;
CPL P1.2;
AJMP START;
D1MS: MOV R7, #10 ;
D1:MOV R6, #250;
DJNZ R6,$;
DJNZ R7,D1 ;
RET ;
END

程序如下:
ORG 00H
START:
JB P3.3, $ ;高电平,就是没有键按下,原地等待.
CALL D20MS ;延时.
JB P3.3, START ;消抖.
JNB P3.3, $ ;等待释放.
CPL P1.2; ;外接LED亮灭.
SJMP START ;继续.
;-------------------------------
D20MS: ;延时子程序.
MOV R7, #20
D1: MOV R6, #250
DJNZ R6, $
DJNZ R7, D1
RET
;-------------------------------
END

很完美的按键控制可调时钟。消抖都在里面包含。好好研究~~~~~~~

R_QH EQU 44H
R_BZ BIT 18H
R_1 EQU 26H
R_2 EQU 27H
R_3 EQU 28H
B_DEBOUNCE EQU 65H
B_HASKEY EQU 66H
ORG 0000H
LJMP L_MAIN
ORG 000BH
LJMP I_T0
ORG 001BH
LJMP I_T1
ORG 0030H

L_MAIN:
MOV SP,#62H
MOV TMOD,#11H
MOV TH0,#HIGH(62536)
MOV TL0,#LOW(62536)
MOV TH1,#HIGH(15536)
MOV TL1,#LOW(15536)
MOV IE,#10001010B
SETB TR0
SETB TR1
SETB PT1
SETB R_BZ
MOV 40H,#59H
MOV 41H,#58H
MOV 42H,#23H
MOV R_1,#20
MOV R_2,#0
MOV R_3,#55H
MOV 55H,#0
MOV 56H,#0
MOV 57H,#0
MOV 58H,#0
MOV 59H,#0
MOV 5AH,#0
MOV B_HASKEY,#00H
MOV B_DEBOUNCE,#00H
LCALL F_CHAIFEN

L_LOOP:

JB B_DEBOUNCE,L_JSJZ
MOV P1,#0FH
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,L_PRESS
JNB B_HASKEY ,L_WAJ
LCALL F_KEYRELEASE
CLR B_HASKEY
L_WAJ: LJMP L_FANHUI

L_JSJZ:

CLR B_DEBOUNCE
LCALL F_KEYSCAN
LCALL F_KEYservice
SETB B_HASKEY
LJMP L_FANHUI

L_PRESS:
JNB B_HASKEY,L_GAX
LCALL F_XDYS200ms
LCALL F_KEYHOLD
LJMP L_FANHUI

L_GAX:
SETB B_DEBOUNCE
LCALL F_XDYS20ms
LJMP L_FANHUI
F_KEYRELEASE:
CPL P2.0
RET

F_KEYHOLD:
MOV A,75H
CJNE A,#02H,L_NEXT3
LJMP KEY2
RET
L_NEXT3:
CJNE A,#03H,L_FANHUI0
LJMP KEY3
L_FANHUI0:
RET

L_FANHUI:
LJMP L_LOOP

F_KEYSCAN:
MOV P1,#0FH
MOV A,P1
MOV R4,#0FFH
L_LOOP1:
INC R4;计算移动次数,得到第几位为0
RRC A
JC L_LOOP1
MOV P1,#0F0H
MOV A,P1
MOV R5,#0FFH
L_LOOP2:
INC R5;计算移动次数,得到第几位为0
RLC A
JC L_LOOP2

MOV B,#4
MOV A,R4
MUL AB
ADD A,R5
MOV 75H,A
RET
F_KEYservice:
MOV A,75H
MOV DPTR,#T_LJMP
MOV B,#3
MUL AB
JMP @A+DPTR
T_LJMP:
LJMP KEY0
LJMP KEY1
LJMP KEY2
LJMP KEY3
LJMP KEY0
LJMP KEY1
LJMP KEY2
LJMP KEY3
LJMP KEY0
LJMP KEY1
LJMP KEY2
LJMP KEY3
LJMP KEY0
LJMP KEY1
LJMP KEY2
LJMP KEY3
KEY0:
CPL R_BZ
MOV R_QH,#40H
LJMP L_D

KEY1:
JB R_BZ,L_D

MOV A,R_QH
ADD A,#1
MOV R0,A
MOV R_QH,R0
CJNE R0,#43H,L_D
MOV R_QH,#40H
LJMP L_D

KEY2:
JB R_BZ,L_D
MOV R1,R_QH
MOV A,@R1
ADD A,#1
DA A
MOV @R1,A
CJNE R1,#42H,L_LL
CJNE @R1,#24H,L_D
MOV @R1,#00H
LJMP L_D
L_LL:
CJNE @R1,#60H,L_D
MOV @R1,#00H
LJMP L_D

KEY3: JB R_BZ,L_D
MOV R0,R_QH
CJNE R0,#42H,L_FENMIAO
DEC @R0
CJNE @R0,#0FFH,L_JJ
MOV @R0,#23H

LJMP L_D

L_FENMIAO:
MOV R0,R_QH
DEC @R0
CJNE @R0,#0FFH,L_JJ
MOV @R0,#59H
LJMP L_D
L_JJ:
MOV A,@R0
ANL A,#0FH
MOV R1,A
MOV R0,R_QH
MOV A,@R0
ANL A,#0F0H
CJNE R1,#0FH,L_D
ADD A,#09H
MOV @R0,A

L_D: LCALL F_CHAIFEN
RET

F_CHAIFEN:
MOV R0,#40H
MOV R1,#55H

L_DD: MOV A,@R0
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV @R1,A
INC R0
INC R1
CJNE R0,#43H,L_DD
RET

;中断T0

I_T0: PUSH PSW
PUSH ACC
SETB RS0
MOV TH0,#HIGH(62536)
MOV TL0,#LOW(62536)

MOV A,R_2
SWAP A
MOV R0,R_3
ORL A,@R0
MOV P0,A
INC R_2
INC R_3
MOV R0,R_2
CJNE R0,#06H,L_EXIT
MOV R_3,#55H
MOV R_2,#0
L_EXIT:
POP ACC
POP PSW
RETI
;中断T1
I_T1:

PUSH ACC
PUSH PSW

SETB RS1
MOV TH1,#HIGH(15536)
MOV TL1,#LOW(15536)
DJNZ R_1,L_EXIT2
MOV R_1,#20
JNB R_BZ,L_EXIT2
MOV A,40H
ADD A,#1
DA A
MOV 40H,A
CJNE A,#60H,L_LCHAIFEN
MOV 40H,#00H
MOV A,41H
ADD A,#1
DA A
MOV 41H,A
CJNE A,#60H,L_LCHAIFEN
MOV 41H ,#00H
MOV A,42H
ADD A,#1
DA A
MOV 42H,A
CJNE A,#24H,L_LCHAIFEN
MOV 42H,#00H

L_EXIT2 :

L_LCHAIFEN:

LCALL F_CHAIFEN
POP PSW
POP ACC
RETI

F_XDYS20ms:

MOV R6,#100
L_LOOP9:

MOV R5,#100

DJNZ R5,$

DJNZ R6,L_LOOP9

RET

F_XDYS200ms:

MOV R6,#50
L_LOOP11:
MOV R7,#100
L_LOOP10:

MOV R5,#40

DJNZ R5,$

DJNZ R7,L_LOOP10
DJNZ R6,L_LOOP11
RET

END

用中断好。


书友们帮帮忙,求言情作者凯琍合集。
书友们帮帮忙,求言情作者凯琍合集。  我来答 1个回答 #热议# 如何缓解焦虑情绪?天枰芽芽 2014...51 七天 凯 单行本 殷柏升 方可卿 52 爱哟喂好大胆 凯 单行本 章宇伦 简爱玲 53 痴心岁岁平安

一个人在外地工作的励志句子锦集(51句)
37.以后得经常回老家,看着发小们混的都不错,你这个背井离乡的人混的那么差怎么还好意思回来呢! 38....20.一个人在外漂泊的日子很苦,你要忍受长夜漫漫,人心淡淡,熬过孤孤单单,最后修炼成仙,天冷了,风雨中...这些励志语句,正能量的句子肯定会让您收获满满,这些正能量的句子,非常适宜发发朋友圈,动动手指多帮助身边...

两个女儿朋友圈说说(精选51句)
47、有两个女儿以后,唯一的想法就是希望长大千万不要变太丑。48、你们是亲姐妹,你们共同流着同样的血液,你们两个要相亲相爱,你们两个要互相扶持着而长大!49、宝贝女儿们,爸爸妈妈爱你!50、两个宝贝,愿你们快快脱去幼稚和娇嫩,扬起创造的风帆,驶向成熟,驶向金色的海岸。51、我的人生总是那么的...

谁能给我推荐几个过节拜年的短信
猪年运程希望我是今年第一个给你送来祝福的人,作为知己我只有打心底里对你说一句:愿你所有的愿望都能成功! 谢谢你一年来对我工作的大力支持和帮助!愿我们在新的一年里团结开拓,把我们的工作做得更好! 猪年运程零时的钟声响彻天涯,新年的列车准时出发。它驮去一个难忘的岁月,迎来了又一度火红的年华。祝新年快乐...

2个回答 - 真心话有趣的问题有哪些
1、你会选择Having sex beforemerriage吗;2、做自己最性感、最妩媚的表情或动作;3、做一个大家都满意的鬼脸;4、最喜欢在座哪位异性;5、自己最丢人的事;6、与一位异性十指相扣,对视10秒;7、异性知己有几个;8、邀请一位异性为你唱情歌,或邀请一位异性与你情歌对唱;9、像一位异性表白3...

暗示朋友决裂的句子不失风度(51句)
暗示朋友决裂的句子不失风度(51句)  我来答 1个回答 #活动# 参与造句大挑战,答题瓜分万元豪礼 情感学者 2022-07-30 · TA获得超过442个赞 知道小有建树答主 回答量:268 采纳率:100% 帮助的人:122万 我也去答题访问个人页 关注 展开全部 暗示朋友决裂的句子不失风度【篇一】 1.友情...

朋友们 帮个忙 翻译成中文好了...等着急用啊...
2安装在白雪皑皑的山谷危险过山车顶!惊险的冒险展开了破轨 3在城市空间的战争,星球大战!该机的军舰穿过时空隧道空间使安全的城市!4从长城和明代邪恶,保护士兵的最后一战!为了保护长城noryongdu(老龙头)应清醒地认识到传说中沉睡的巨龙!5。乘坐飞机,并击落敌机做!植物在受到攻击离我们去一个奇怪...

用一边一边写一句话
帮助的人:0 我也去答题访问个人页 关注 展开全部 1、他一边检讨着自己的错误,一边观察大家的...7、同学们一边听课,一边把重点抄下来。 8、我一边复习功课,一边把难写的字写下来。 9、萨姆一边等...51、他一边跑步,一边听音乐。 52、当我们还在流连刚才的西湖风光,导游已经带着我们穿过一个圆门,来到...

表达谢意的话
13、向所有帮忙过我的朋友和我所爱的朋友说声感激,感激你走进我的生命,让我的生命丰富、美丽,我愿我有生韶光,带你无穷欢愉! 14、其实天很蓝,阴云总要散;其实海不宽,此岸连彼岸;其实泪也甜,当你心如愿。其实我要你快乐每一天! 15、感谢领导们在百忙之中抽出宝贵的时间来检查我们的培训,在这短短的几天里...

XN79929841444朋友们帮忙查下走那了,急谢谢挂号信哦
XN79929841444 2011-06-21 15:20:49 | 当前处理:正在安排投递 | 处理机构:山水小区投递部 处理时间 处理单位 邮件状态 2011-06-15 12:26:15 营业经营 交寄 寄达地---内蒙古自治区呼和浩特市 2011-06-17 14:51:00 国家局 到达处理中心 2011-06-18 09:50:00 呼和浩特市 到达处理...

茅箭区18932535232: 朋友们帮忙写个51单片机的按键小程序?汇编的 -
乐正瑶津彤: (1);P3.3小键盘按下P1.3亮再按0.5秒灭.org 0000h ajmp main0 org 0080h MAIN0: CLR 21H ;清标志 main: mov c,p3.3 ;检测按键 jc main MOV R6,#200 ;设定延时 MOV R7,#200 TT0: JNB 21H,TT2 ;检测灯状态 tt: mov c,p3.3 ;检测按键 jnc tt...

茅箭区18932535232: 跪求大神帮忙写51单片机按键程序 -
乐正瑶津彤: S1 BIT P2.1S2 BIT P2.2 ORG 0000HK1: JB S1, K2 MOV P1, #0K2: JB S2, K1 MOV P1, #255 SJMP K1END就这些,就可以了.

茅箭区18932535232: 怎么写一个51单片机程序当做按键,就是写的程序相当于一个按键的功能? -
乐正瑶津彤: 判断两次按键的时间间隔 如果大于1s就实现一种功能 小于1s实现另外一种功能

茅箭区18932535232: 试分别为51单片机设计一个上拉输入和下拉输入的按键电路 -
乐正瑶津彤: 51单片机用的按键电路,通常都是用按键接地的.只有 P0 口需要加上上拉电阻.

茅箭区18932535232: 求一段51单片机用按键控制LED的程序. -
乐正瑶津彤: while(1) { if(num>=20) //num==20最好改成 >=20 防止由于按銉延时而错过num==20的机会而使程序出现长时的混乱 { num=0; led1=~led1; led2=~led2; } if (key==0)//按键是否按下 { 延时10-20ms; while(key==0);//按键是否抬起 if (tr0==1)tr0=0: else tr0=1: } } 也可以用开关中断来实现 如果按键不听使唤,在if (key==0)后大括号里的延时语句后再加一次if (key==0)判断

茅箭区18932535232: 求一个51单片机程序,要求用一个按键控制流水灯的启停,按一下流水启 -
乐正瑶津彤: #include <reg51.h> typedef unsigned char uint8; typedef unsigned int uint16; it anjian = P1

茅箭区18932535232: 刚开始学单片机,谁能给写个单按键的程序啊? 要求要有按键去抖,用定时器,去抖不用延时函数. -
乐正瑶津彤: 先设置定时器基准时间 开中断 检测要用到的IO口 是1则启动定时器 时间到中断响应 然后再检测用到的IO口是1还是0...学了很长时间了,忘了寄存器怎么设. 道理是这样~~~希望能帮到你!

茅箭区18932535232: 谁能帮我用C语言编一个80C51的按键程序 -
乐正瑶津彤: 你先凑合着看看,有时间我再来完善.你应该可以自己改改吧?unsigned char key,key_h,kpush;unsigned int key_l;//按键连接到p1.0、p1.1、p1.2void int_t0(void) inter...

茅箭区18932535232: 求大神写一个用51单片机和pcf8951,用按键控制输出电压的程序. -
乐正瑶津彤: 容易理解写:设置b1、b2、b3、reset四按钮(按0)应LED1、LED2、LED3三灯(点亮0) int reset, b1,b2,b3,LED1,LED2,LED3; while(1) {(读取reset) if(reset==0) { LED1=LED2=LED3=1; read=1; } if(read==1) { (读取b1, b2, b3); if(b1==0) { LED1=0; read=0; } elseif(b2==0) { LED2=0; read=0; } elseif(b3==0) { LED3=0; read=0 } else LED1=LED2=LED3=1; } }

茅箭区18932535232: 求一个简单的51单片机程序 (一个按键控制两个口输出) -
乐正瑶津彤: 确实是初学呀,P0,P1,P2都有8个IO口,所以暂且给你都安排在第一个口吧. #include<reg51.h> #define uchar unsigned char sbit key=P0^0; sbit pluse1=P1^0; sbit pluse2=P2^0; void delay(int ms) { uchar i ; while(ms--)for(i=0;i<120;i++); } main() ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网