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

用定时器控制一个灯亮5S 灭5S

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用定时器控制一个灯亮5S 灭5S. b' T2 d& H7 j% n8 I( |8 i
* l4 |/ ^; g6 _! H' E/ ]
: Z: f  B* G' P

; l/ l; U9 N: p, N
5 p% B) O7 `3 S' Y- I
#include "reg52.h"                 //此文件中定义了单片机的一些特殊功能寄存器8 T, H- }  y3 M( g
typedef unsigned int u16;          //对数据类型进行声明定义
2 m. \5 ]! a$ y) G1 {; z: D5 A4 ttypedef unsigned char u8;
# G7 O: L/ h: M0 O, r- J0 A, d+ k
! l" c7 Z- y1 ], ?' O; z2 E9 W/ Fsbit k1=P3^1;         //定义P31口是k1# w$ i2 U0 m- P! [4 G3 ^
bit flag = 0;( }% C) X" U! S, B7 \1 Q9 u6 D
sbit led = P2;void Timer0Init()0 W2 ~7 R# J, C. O9 z6 W: g6 u
{
' e4 `, W: c. O2 @6 |9 @. ~        TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。, Y. y% C; j' h2 f" I
        TH0=0XFC;        //给定时器赋初值,定时1ms% X8 ]3 j  d# t% G8 [
        TL0=0X18;        ) _9 h2 w/ F+ q2 b6 d4 G
        ET0=1;//打开定时器0中断允许
$ \' a: J7 j1 P. Y6 g' g/ p        EA=1;//打开总中断
/ A6 `# E2 N; E( s  E" d. }        TR0=1;//打开定时器                        ' o2 ?, k% c  C/ W& I0 @8 J# W
}# J9 j) R) ]0 o5 x! \! \( b
void delay(u16 i); Z6 b  j  p9 `' {4 ^
{
$ J( v/ m" Y  V9 p" V6 H. B' K4 S        while(i--);        : l0 _" {8 j9 ~6 b
}
# T) w) Q! F: r# T* f  V$ Jvoid keypros()0 X% [5 |2 b4 f3 n$ J, f
{* y5 z: i- s" Q. q% w. @) [
        if(k1==0)                  //检测按键K1是否按下- @5 ?# a  n2 L6 n+ V8 k1 q
        {        
6 c+ W. r* C* }; ^1 m/ L6 j+ a                delay(1000);   //消除抖动 一般大约10ms$ n; K. [' R/ K6 i7 t
                if(k1==0)         //再次判断按键是否按下6 w" h0 k) U* o7 a! |
                {
0 P  [$ B! `8 }' a, X7 ~% O                        led = 0;! ]. E+ y" b1 S% U
                }8 H' }# u: P/ E2 `7 \. d, }9 M
                while(!k1);         //检测按键是否松开. Y* @1 ]7 B) d8 P# ]1 I
        }               
- T  s; L( G4 q1 X6 A  T8 M! j* N- d}void main()
3 |! T1 q4 R* a2 O* f{        
6 s. q, B7 k: f8 D6 k" m8 k3 O8 s    P2=0xff;; H3 ]7 S4 S9 [7 }
        Timer0Init();  //定时器0初始化/ r  J4 D* E- Q0 f
        while(1); M9 B- ?+ x6 Z
        {
4 K' G+ T. o1 D/ B: o9 O; z           keypros();
) o, I3 ]# _- O) K4 ]        }               
7 [, g, i* P! b5 W3 b! m}5 H! J! T. X9 s4 J$ ]! r
void Timer0() interrupt 1
& x. m4 F9 w  O0 W. Z+ O9 A{* W0 j( @( K: }; V( U2 u* k
        static u16 i;* j5 O' ]0 G( c3 Z3 R) w9 M
        TH0=0XFC;        //给定时器赋初值,定时1ms" \& P- `' \7 X/ _
        TL0=0X18;
7 v3 E' r8 L9 [* D; A- E3 B8 x        if(led == 0)
5 B- Q9 l* B; f7 E: O. e* {4 Z* ]7 t. c        {5 O- r* R) f/ r9 O/ K0 G
                i++;
1 F' N" ^, j( j4 H7 b" Y$ ~                if(i==5000)1 T- ~4 R9 p4 X4 e
                {
1 U4 w" @) Q) M) {                        i=0;
4 Q. N- y2 L3 E. p+ z/ ^                        led = 1;                        
+ k2 _7 N2 V& t) v                }4 _4 Q$ G5 G) ]- L8 D0 }
        }                ) h; c3 ]. F/ L# |* e
}

5 w4 B- Y+ j3 H9 B6 S' P. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 21:50 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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