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

 51单片机按键扫描程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

5 X' H( {" Z7 M1 {( y0 S. Q#include "reg52.h"  @. l7 r0 a9 N8 Z8 g6 p( G- [9 v1 g
unsigned char count;      //0.5ms次数标识$ ^; {! }9 P5 z% `: S! t
sbit pwm =P3^0 ;          //PWM信号输出- b. U+ F2 p3 V, Z3 Q* H
sbit jia =P3^7;           //角度增加按键检测IO口  s) k+ J/ M2 i9 f9 c& T; ?. j) t: U
sbit jan =P3^6;           //角度减少按键检测IO口
8 P& P! }$ ~) @  }4 q, wunsigned char jd;         //角度标识
. }, Q2 ~! z" W' xvoid delay(unsigned char i)//延时
7 k4 c! `, E0 B# b. k5 y8 ]{
; E( k6 |% j+ v! ]2 c  unsigned char j,k;7 U/ `+ y# t/ Y+ ^9 t8 Q
  for(j=i;j>0;j--): z6 A0 Q. F1 W. b# L
    for(k=125;k>0;k--);
% o% Q' K4 }" k% m}7 ?+ n+ {( J) c8 V; J& O
void Time0_Init()          //定时器初始化4 _3 q4 `5 A$ v2 M5 ^
{
* G7 U2 Y3 h5 z: W, YTMOD = 0x01;           //定时器0工作在方式1   
) }& b; u* F: W' X! h1 I' HIE   = 0x82;& b+ R/ H* H  @# `. C" M/ N
TH0  = 0xfe;  u- t: c( ^8 ]
TL0  = 0x33;     //11.0592MZ晶振,0.5ms# W% y2 w+ d' i3 ~
    TR0=1;                 //定时器开始6 k, A1 d! v3 [. o* r& L8 p* ^
}; d1 e5 `- J9 k0 R2 X0 X
void Time0_Int() interrupt 1 //中断程序4 q% ^' g- ^$ Z/ f
{
! v9 G& x" j$ K( V6 p+ ?' H3 oTH0  = 0xfe;             //重新赋值4 g$ N6 r: a% g1 D. d& z
TL0  = 0x33;% E& E* t7 p) \& K8 Z( r; i5 h
    if(count< jd)              //判断0.5ms次数是否小于角度标识
6 C& G8 {% v) z      pwm=1;                  //确实小于,PWM输出高电平" ~+ \  `& c) X1 L5 S) b
    else" j/ d0 _$ Q$ H
      pwm=0;                  //大于则输出低电平
& B/ V1 ]5 j+ f" ]/ t    count=(count+1);          //0.5ms次数加1
7 @5 w& X4 h, g0 G( K+ R    count=count%40;     //次数始终保持为40 即保持周期为20ms
$ ^! T+ [5 c3 f7 q# e0 q' J6 f}
  L* j& \% Q6 N4 s1 E! e$ b" N3 U5 N1 O* v" J
void keyscan()              //按键扫描
/ O$ E' F5 }, J  ~; ?) ^{
  e9 A6 f4 G, w4 @- L$ E   if(jia==0)               //角度增加按键是否按下
4 J, u2 e. I5 {0 ~. i# g  {
9 V% r2 ~" d# X0 f* b1 L    delay(10);              //按下延时,消抖
; C8 [% l5 [& e    if(jia==0)              //确实按下3 M% b; g; k9 z
     {
7 _+ _; I: B1 i! |( ]  F( k- p      jd++;                 //角度标识加1
% x; L3 m, j; e& S* G- @      count=0;              //按键按下 则20ms周期从新开始
/ m+ F# ~, X6 k6 t( s5 V! Z1 d% _5 x: ]      if(jd==6)- z+ e- j9 \% |
        jd=5;               //已经是180度,则保持
7 h/ |) k( G: C$ ]5 o0 ?      while(jia==0);        //等待按键放开
4 M9 m' m) g: T0 E) L  [% `     }
: F$ s; D2 ?& p: u  }
. q* B! q+ ~# ~) N1 x) W  if(jan==0)                //角度减小按键是否按下; {2 r* V; b0 y: U$ i% r
  {
  f, W4 O4 ]2 G3 H& c    delay(10);* d4 f7 N+ L+ w! U0 E. L2 I. q
    if(jan==0)
: J6 N5 W1 _9 Z% [  A     {
4 n0 M2 w  [9 [7 |      jd--;                 //角度标识减1$ i  {- P6 ]  }2 L$ o
      count=0;! Z% _( [1 p9 p
      if(jd==0)
5 K8 J, q" |" W) s        jd=1;               //已经是0度,则保持/ F2 D- h2 ~7 w% R3 A! E( H
      while(jan==0);: O5 F8 o& l5 o! ?' W/ D
     }
, r- A# i; u+ F, c3 b- u8 m9 k  }! I+ f; m% P% A% w: c% J
}  i* ~# y; Q7 N2 ]+ L& H4 @$ ?
void main()
* I( y6 V8 V4 e7 L4 @9 _. j3 T/ s……………………$ j) P) I- B4 f; ?
% x) l8 I4 S( t3 I
…………限于本文篇幅 余下代码请从论坛下载附件…………3 M' }" h, O  ]% W" U% q

- j0 }6 H2 D/ X8 a
# |% m5 ^$ q' y& p' e) o# D
游客,如果您要查看本帖隐藏内容请回复

. h  h) Y" R* j5 c
# Z' v1 y/ h/ {$ W4 v0 w

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-20 16:07 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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