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

 51单片机按键扫描程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

# f+ d& z! O5 t1 ~( n9 ?0 E! h#include "reg52.h"* R2 i! z3 B6 @: t( F3 q
unsigned char count;      //0.5ms次数标识
& B6 \+ s! }  usbit pwm =P3^0 ;          //PWM信号输出
2 V5 ^0 _# \8 Zsbit jia =P3^7;           //角度增加按键检测IO口9 T' M$ z4 z" Z. R/ m* [
sbit jan =P3^6;           //角度减少按键检测IO口
' g, r" s6 ^( X( N* B! M. Munsigned char jd;         //角度标识  p0 G$ t+ C  L! c" Y. d1 g
void delay(unsigned char i)//延时4 t8 S  V! Q' c/ s$ t
{
8 Y6 s% _* \8 `$ j" s7 U6 G+ Y4 i' R  unsigned char j,k;
, W4 Y8 F$ o& a  for(j=i;j>0;j--)1 {2 ?6 L5 R- R' h
    for(k=125;k>0;k--);2 }5 X# D& l8 `/ ~
}
' S9 y. C! s3 D, R  r$ Zvoid Time0_Init()          //定时器初始化
/ e4 P$ M, Z! A. Q* A{: |- R) y: c4 w, S3 Z) ?8 s
TMOD = 0x01;           //定时器0工作在方式1    # v/ V7 [7 u, x7 l+ f: X
IE   = 0x82;
* x) n% L" y4 p0 h* kTH0  = 0xfe;, s4 H) f: o& k5 q3 d" Y/ w
TL0  = 0x33;     //11.0592MZ晶振,0.5ms
8 H4 C6 h7 Y& a, y7 T2 x    TR0=1;                 //定时器开始; t1 @) S) |, F2 O1 d  u! u6 ^% H
}, h/ A6 w/ f: _/ l
void Time0_Int() interrupt 1 //中断程序
0 E0 J/ F. t) s/ ?- ]9 x/ \  c{/ |4 |3 b7 M: [: J8 h
TH0  = 0xfe;             //重新赋值
; Q8 R! T% ~3 S) B2 F7 k0 yTL0  = 0x33;" D( a: f# m+ k% X
    if(count< jd)              //判断0.5ms次数是否小于角度标识1 @: \- ~" [  l
      pwm=1;                  //确实小于,PWM输出高电平
1 j, g( u2 ~8 W1 w# I! x    else
. D( V( p( f! ^! }( Y! ?      pwm=0;                  //大于则输出低电平
/ y# B4 r" A1 |    count=(count+1);          //0.5ms次数加1
. {2 M! t3 X3 E  A# w) d* I    count=count%40;     //次数始终保持为40 即保持周期为20ms. P# E8 Z2 D# f7 Y( X& p" f
}
! s) N0 l! r) m* x' K) f- `' G3 R) Y
void keyscan()              //按键扫描% {2 l% p; o1 r0 K1 x) H! i; h% p! J
{
$ u* U7 I: |+ W% |( ]! N" R   if(jia==0)               //角度增加按键是否按下+ u" T5 A: K. b- m" B4 H
  {6 [' T( p- U2 x( l- `
    delay(10);              //按下延时,消抖" n5 i, N5 g6 r0 ^  ]3 y
    if(jia==0)              //确实按下4 u# c* P2 Q/ t8 ?) i& |. U, F
     {& H! r4 ]8 P# P
      jd++;                 //角度标识加15 I8 o. i, s3 n& f$ q& \1 K
      count=0;              //按键按下 则20ms周期从新开始
! }" k! }4 ]/ V- Z      if(jd==6)3 B2 h* K: M/ R9 V
        jd=5;               //已经是180度,则保持* w6 E( c3 ?, N2 h& l" w% T+ ~
      while(jia==0);        //等待按键放开7 ~' T& ?% F9 c( ]$ a
     }
  W3 T% L; m$ L  }
& m9 O# i# B' }  if(jan==0)                //角度减小按键是否按下4 L6 S. a  f* g3 A+ m
  {& l+ I- r; o# K( z$ J
    delay(10);
. |7 J9 N) L% d- s; w$ Y: h# E    if(jan==0)
; R1 {1 B7 g0 D& A; Y     {: K) n3 J6 m3 \- Z! C7 W: ]
      jd--;                 //角度标识减1$ {6 l6 I5 |/ q! A! ]
      count=0;$ Z9 m) t& _( T# V% B0 i" `( ?6 n
      if(jd==0)
% ]! u! E* E/ l        jd=1;               //已经是0度,则保持
1 T. x# t% ]$ ?6 ~6 }8 U      while(jan==0);
0 Y0 I+ O5 e- P7 W- D     }
! V7 m& g5 c* X' p. [1 N  }8 j3 n& X8 M, X8 U
}
6 A6 \- J* C8 B( j$ R4 a5 ?void main()
: I1 B& ?+ @8 _+ I: v3 O……………………
5 z& i6 R  D2 J5 G9 {  g* o9 X5 W7 }0 `3 t
…………限于本文篇幅 余下代码请从论坛下载附件…………; j6 l6 s2 n% L

  k: c! m+ l2 K3 R1 B: C2 x- ]. V) j! F# k) ^4 W1 m" `
游客,如果您要查看本帖隐藏内容请回复

4 Z0 C- z; B5 Q# c# D% v0 h
. B6 O$ E' s  ]) U6 |' V: U

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-21 05:50 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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