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

 51单片机按键扫描程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机按键扫描程序
单片机源程序如下:
  \. S8 ?9 T+ C: L$ I
#include "reg52.h"
- s% |! f0 I9 q% }8 hunsigned char count;      //0.5ms次数标识
0 G8 S3 g8 z( R6 y2 g. }sbit pwm =P3^0 ;          //PWM信号输出
8 W  ]+ p5 l' G/ i9 x7 ~3 O1 Esbit jia =P3^7;           //角度增加按键检测IO口/ @6 h! c; W- z9 d: l9 f7 B# e
sbit jan =P3^6;           //角度减少按键检测IO口
& V# Y) n+ s$ ]: Q' }unsigned char jd;         //角度标识
/ }2 z. {( d3 i* P9 E! E1 {void delay(unsigned char i)//延时! P9 C. {9 O/ g5 Y; X' Y6 |
{1 R9 p1 Z3 [: |
  unsigned char j,k;& z7 D. L3 |) g4 L" O' z# x
  for(j=i;j>0;j--)$ W9 ]# y* D& `$ [8 T* J% j
    for(k=125;k>0;k--);* y- K+ f+ b6 `
}
' q2 r& i  z+ C( Q( I6 N% n% t/ dvoid Time0_Init()          //定时器初始化
4 o1 V" ~6 Y4 H2 A{
6 _! M* P, @3 k, f. ~( t7 d7 [2 |; dTMOD = 0x01;           //定时器0工作在方式1   
& \1 f/ `3 T! o4 i7 l5 D; q3 LIE   = 0x82;
% _- L+ N  D" i- F0 m. d4 G+ WTH0  = 0xfe;5 N7 D  U; i7 I* r/ Q
TL0  = 0x33;     //11.0592MZ晶振,0.5ms  c. T8 f# n. q( O( D
    TR0=1;                 //定时器开始7 e$ f# g- k) @8 c+ {- d
}
/ s, a6 O8 s  n! U$ Y3 Z- N% `void Time0_Int() interrupt 1 //中断程序  O  m8 f4 c9 q2 p' ]
{
5 F8 F/ z& W0 J- y2 Y6 Z4 rTH0  = 0xfe;             //重新赋值8 m- {1 D* C0 N
TL0  = 0x33;
! I# _! _1 h+ l9 a; K; q    if(count< jd)              //判断0.5ms次数是否小于角度标识% ], A; }9 a% ]5 R3 M
      pwm=1;                  //确实小于,PWM输出高电平: S: u8 Q# h/ Q1 e0 K# Q
    else
1 p6 t9 {. f7 i* H) c3 p& Y      pwm=0;                  //大于则输出低电平
. M2 v% e1 B. k& j/ |+ p. Y) P    count=(count+1);          //0.5ms次数加1  z+ @! Y+ P: ^$ W$ j
    count=count%40;     //次数始终保持为40 即保持周期为20ms7 W: U5 ?$ A- {
}+ l, {# p2 g9 g9 y8 L

- I/ w4 K8 ^1 F! dvoid keyscan()              //按键扫描* y& e$ U6 w+ {8 N! l
{ % b7 M0 {- g* F5 a5 D+ K
   if(jia==0)               //角度增加按键是否按下
0 ]" Z4 ^  u' r; Y7 [  {. D& m3 i& K; }, Y* z
    delay(10);              //按下延时,消抖
" S' K2 E3 x) t) X5 \8 M    if(jia==0)              //确实按下
# w3 `' n* Y+ U% @* w     {
( Q0 F! Q& w% }( d; |6 H; l2 h      jd++;                 //角度标识加1
1 A- d8 U/ i; ?) H$ D0 v      count=0;              //按键按下 则20ms周期从新开始
) ]: \9 Q! ^; w  p6 O3 m" N6 w. Y      if(jd==6)9 ]3 i" O" b# F+ R* _
        jd=5;               //已经是180度,则保持
$ k8 j* T* T9 Q4 h! B      while(jia==0);        //等待按键放开
& h7 j8 t+ q9 B, C( \3 T     }" K0 g0 N- t# Y: e
  }
( ^( K* D- G7 s4 k/ y  if(jan==0)                //角度减小按键是否按下7 e" I, G* s7 v/ Z9 J
  {& ^1 a) X! z! N% i- R1 t
    delay(10);
; S: @3 D% Y, q( y! n    if(jan==0)  }  c/ c7 P: c4 N/ d
     {
( g) g, ]4 T8 }2 V      jd--;                 //角度标识减1  D# X9 k0 Z1 S3 s$ ]
      count=0;# [" s7 s, k' I$ y  C
      if(jd==0)$ f, Y, u$ M4 ^* J6 P# E
        jd=1;               //已经是0度,则保持
: ]  S% _% |9 x      while(jan==0);' h) F+ d8 H9 Q$ X- t: U
     }6 ?" H* {. l" s$ X" O" w
  }$ T$ r! o2 z- ?8 C
}3 z3 M  R) g  \4 N& C1 i" E- c
void main()
9 {" [# x0 L/ ^: j% f1 n……………………- V2 L0 W1 Q6 X. g

4 ?+ T9 r" z7 g+ x* Z…………限于本文篇幅 余下代码请从论坛下载附件…………
# \2 ^. R* ]" e' U# F) s
' H# V( J3 P: U$ S2 Y2 p7 K5 @
5 q+ e( J' u! I, u
游客,如果您要查看本帖隐藏内容请回复

1 d! T8 X6 v3 d9 Q  L; E6 U7 T+ H( ?, t% O2 f. t0 \+ ]  p: a

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 01:32 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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