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

 51单片机按键扫描程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

4 J8 j- X- G" K2 _#include "reg52.h"9 Z( X/ D5 v# V. l' r+ V
unsigned char count;      //0.5ms次数标识
9 |9 i4 ^0 y) h( o8 {sbit pwm =P3^0 ;          //PWM信号输出2 `( d0 |3 \$ A
sbit jia =P3^7;           //角度增加按键检测IO口
% m2 Q% y$ o5 i& j8 @4 msbit jan =P3^6;           //角度减少按键检测IO口
  x% i( `& q6 V: `) G- @" {" {, A4 V. R% Sunsigned char jd;         //角度标识, `& o4 y1 @& G  A4 q0 x" w6 r( @
void delay(unsigned char i)//延时
* x9 q- U/ j& I{
$ h* ]: _; I# R  k" ~) P; z; Y( f  unsigned char j,k;
# i( V; j5 B0 s2 V8 A9 u+ S  for(j=i;j>0;j--)
- I4 a/ \8 q) [4 X    for(k=125;k>0;k--);
! Z" l% r* G& B2 T% j0 ]' Q}
" h& ~' p2 L8 t2 a( N; F' A- Kvoid Time0_Init()          //定时器初始化/ c8 N2 Q6 M0 Q" f# D* N) D
{
6 b' {7 \* D1 F! g- @/ P1 k5 g; ZTMOD = 0x01;           //定时器0工作在方式1    & F9 W2 |! i1 s: ^$ \
IE   = 0x82;; Q( _7 |" K+ z# |5 K  x
TH0  = 0xfe;8 @& c: _+ u( S( n* Q( _( {' N2 z2 `
TL0  = 0x33;     //11.0592MZ晶振,0.5ms" u2 h7 d7 W8 f# _: M
    TR0=1;                 //定时器开始- k2 P4 \; f: f9 j5 o' \% \  M
}: t2 p9 f7 N+ q0 ~
void Time0_Int() interrupt 1 //中断程序. G9 B! S4 r8 U3 _
{$ v6 b& Y3 h, j0 ^) \
TH0  = 0xfe;             //重新赋值) F# J5 w$ x! M4 j
TL0  = 0x33;
5 P0 z. x& h2 B6 f    if(count< jd)              //判断0.5ms次数是否小于角度标识  [& R' [( y/ ^+ _8 u4 P  d
      pwm=1;                  //确实小于,PWM输出高电平' _- q" {& M8 M7 h& Z; h
    else
+ f2 F8 l, }) s: f  G      pwm=0;                  //大于则输出低电平" ]3 l4 D' l- t- a. C! ~* s4 p0 y
    count=(count+1);          //0.5ms次数加1
( I; ~1 p+ l6 c4 {( K" G( R; c7 R/ g    count=count%40;     //次数始终保持为40 即保持周期为20ms) k4 y# M/ ?) E, Q
}& @8 y. M  }% f
: Y, r, [# _/ N7 p4 ~. m) M. v* F
void keyscan()              //按键扫描
% I+ P9 o* _" D5 V( M{ # q  U5 k( o7 L( k& V. c0 d
   if(jia==0)               //角度增加按键是否按下
, G0 u4 h: g' `3 T; L9 ]  {, i( M4 R0 s6 n/ v( }
    delay(10);              //按下延时,消抖5 q( r5 Z" U* Q) ^( ]
    if(jia==0)              //确实按下
- }( T1 D( f  [: F8 j! x     {
; v; u+ I$ Y* O      jd++;                 //角度标识加1
# L0 f, |3 x) K; `  o      count=0;              //按键按下 则20ms周期从新开始$ n* \% s+ [9 Q$ H, |
      if(jd==6)
5 B0 s' Z* G* n% V7 X. K& m        jd=5;               //已经是180度,则保持
0 j8 E( E- K- ?! p# p) e0 {" c      while(jia==0);        //等待按键放开: p9 `0 e2 I: |& X% U0 K" S
     }/ U8 A1 P5 w# R4 ]/ [8 [
  }
% j4 A8 t$ X$ ]* V4 ]- `  if(jan==0)                //角度减小按键是否按下' h  W% m! ^* [
  {
% Z" I! M& c5 k: |8 t6 a    delay(10);
% x$ ~* R0 i6 N; h2 \- O    if(jan==0)
0 b3 X6 k  u! c+ P     {( y! L5 \5 k! r. \4 [
      jd--;                 //角度标识减1
! v# i, S4 A' ^5 ]- C' A8 D) A; v      count=0;
8 J- R0 b; @% F$ V/ A0 x      if(jd==0)
' c) i. Q( r, ]% ^! u' F        jd=1;               //已经是0度,则保持
: P2 X; g* b2 F$ w/ b: U: p      while(jan==0);% j% j0 \& {  x- l2 {1 G
     }* d# b$ d7 I; f
  }
0 s8 [* C9 u) ~& `- A}
: e8 {# ]1 x' v* Yvoid main()* @8 t7 P1 d3 i" h/ ^
……………………$ g2 A9 f" w" k0 I7 u9 ?7 D" j

$ O- {  l+ q, R& L…………限于本文篇幅 余下代码请从论坛下载附件…………
; m, S- V9 j: h; R, O/ s
, y1 z" p* H/ {  A. w, I; A6 ?3 M7 R; ~# h( g  C8 I
游客,如果您要查看本帖隐藏内容请回复

7 ]. R' c( U% `! \( H# G
8 k/ K5 m4 p. E" j8 d

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-18 15:41 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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