找回密码
 注册
关于网站域名变更的通知
查看: 303|回复: 2
打印 上一主题 下一主题

 51单片机按键扫描程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-12 09:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机按键扫描程序
单片机源程序如下:

- T4 I; y/ B) o% m, R: ^#include "reg52.h"
0 ?- }+ J/ ~  a: A# G  ]$ Z; O  N7 iunsigned char count;      //0.5ms次数标识
# [" E, g" Q0 L9 R' ~sbit pwm =P3^0 ;          //PWM信号输出
- v8 z6 Q6 k( m2 d9 z1 Psbit jia =P3^7;           //角度增加按键检测IO口
' q& x5 q+ U  w5 `" [5 `sbit jan =P3^6;           //角度减少按键检测IO口" ^9 \/ r; f9 _: a8 N5 H! [
unsigned char jd;         //角度标识
% f9 {! T2 h" r6 avoid delay(unsigned char i)//延时5 N5 K2 s4 V' M. X  A
{
% ?& O9 F$ c1 {: D) E7 X! a  unsigned char j,k;
. O: T, E* _% G/ K; P; \/ }9 o  for(j=i;j>0;j--)* b9 x0 y9 p. ~+ g
    for(k=125;k>0;k--);
: P( a3 X/ f# ~" v6 N& j$ y5 E}
+ g2 \' c# U+ a5 L, Q6 `& \& [void Time0_Init()          //定时器初始化
4 A+ l0 k. G) f2 {& s9 \( b  S{
" M: F1 w% ^( g. Z+ q6 _- rTMOD = 0x01;           //定时器0工作在方式1   
: M/ C. t& i& M& g! h9 oIE   = 0x82;
4 c% E9 W) o/ P5 X; iTH0  = 0xfe;0 v) d) R7 t# g& ?
TL0  = 0x33;     //11.0592MZ晶振,0.5ms
& f$ ]/ p7 J9 O( ?    TR0=1;                 //定时器开始
2 q5 V0 G# {7 N  e3 E* Z}/ a; P0 N! A  \
void Time0_Int() interrupt 1 //中断程序0 l6 z" J8 w3 I' `
{/ Q( a/ t% u; ~* ~0 j
TH0  = 0xfe;             //重新赋值
0 o7 ~" h; v2 @/ gTL0  = 0x33;
4 k, ]. z5 s; n* R. Z    if(count< jd)              //判断0.5ms次数是否小于角度标识. y: P) M& F. g5 s1 m
      pwm=1;                  //确实小于,PWM输出高电平
+ l3 }) ~: m# |0 H1 ~  }+ I    else
# A# D- |6 ^* I      pwm=0;                  //大于则输出低电平3 T) S) H( L( s
    count=(count+1);          //0.5ms次数加13 D& q: C$ F. z3 t- x& L
    count=count%40;     //次数始终保持为40 即保持周期为20ms1 |' X3 @: r: A! _( D' k+ S2 _
}
" _0 E3 x) M3 a# G) w: D: T( g6 ?$ R+ y4 ]! t
void keyscan()              //按键扫描
- N, ?: y- S- c, Z/ F% k4 X8 y{
4 a$ K  |5 F. S! C* A   if(jia==0)               //角度增加按键是否按下
4 T7 Y8 }* ~- q  G' V$ w: S  {. e  _) s# \7 M0 @
    delay(10);              //按下延时,消抖
) P5 X! d5 E( D/ [8 l- N" N7 ?    if(jia==0)              //确实按下9 Z' K" G% E6 k* p6 A& ]0 }6 _
     {
3 Y3 R9 ^* V& g9 n      jd++;                 //角度标识加1
, W: v  Z% o/ H+ C      count=0;              //按键按下 则20ms周期从新开始: O' k% F: y  f& ^0 B/ i
      if(jd==6)
6 `0 E- R. T& e" G1 b" C, I1 C: K        jd=5;               //已经是180度,则保持
1 f. z3 L9 E7 e) V, \      while(jia==0);        //等待按键放开
( o2 l7 g' _0 a! Y& ]( w: f     }& n9 Z6 V1 Y: l: k3 R) M0 s! k
  }3 i/ h, B6 ~' s. M
  if(jan==0)                //角度减小按键是否按下/ h. R7 w% k8 l2 k* T
  {
8 a- |" E+ V1 A2 m3 h) X4 {% O, x( U8 D    delay(10);
. ?+ I1 P3 j. U9 B, b0 @$ y6 j- n& i    if(jan==0)
; q9 O9 u* o5 l  M     {
; x1 N1 J3 R4 L' V; j2 t6 I3 k      jd--;                 //角度标识减1
# |5 [6 A. V1 Z/ ~% o/ T      count=0;
, f9 U! x8 K( H$ C* E  o0 D      if(jd==0)  O3 z* X/ w/ J0 z/ G( Z
        jd=1;               //已经是0度,则保持
; G1 j3 T4 q; d) c      while(jan==0);1 D( G* w( K( O* D
     }
, n0 H& }; A  t9 b9 I$ N  }6 q0 a" C( o! D% a6 I+ [! J; K
}
% l8 Y7 K8 G8 z1 w. U1 @  Z. ivoid main(). P! ^  i( L, ?& \' ~
……………………3 @( _( D5 ~2 `; [

5 W# X7 N4 z9 P9 s…………限于本文篇幅 余下代码请从论坛下载附件…………% b. y' ]. k0 h. W

1 K7 A+ e) _/ Y  P( t! C' D7 n/ v' F, S& c/ z+ \7 N
游客,如果您要查看本帖隐藏内容请回复

! X- ~: `- j0 ]& {) m; A$ _
4 w0 q4 I5 h" W& \0 u! f2 D! b9 N

该用户从未签到

3#
发表于 2019-1-31 16:32 | 只看该作者
看看楼主的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-6 23:37 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表