|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
+ K; V; ?" Z6 x% H# L7 g程序如下:
2 _( @& y6 H, a0 \#include<reg52.h>! w4 g8 @. ]7 ]/ D$ V6 W
#define uchar unsigned char //定义uchar uint2 z, c- x9 Q1 c# A
#define uint unsigned int _4 S/ T9 R( N" S3 ^2 |# B+ b
sbit dula=P2^2; //定义数码管段显示" }4 v1 @. o& {3 Z' H/ P* t5 U7 i
sbit weila=P2^3; //定义数码管位显示" O$ j: H6 I/ i) \* \
uchar code table[]={ //定义数码管显示从0--9
d% i% w9 I! t3 ]/ S3 K- [0x3f,0x06,0x5b,
+ |0 s8 W& b+ E4 n0 A1 F0x4f,0x66,0x6d,0 f2 e" B: |" X% m+ }; x
0x7d,0x07,0x7f,0x6f};
6 U/ E8 { I9 E- A3 }, P; ]2 m! [2 o B! c$ e# P. Y
void display(uchar,uchar); //声明数码管显示函数
- R+ N( M, o' _8 E% Rvoid delay(uint); //申明延时函数5 S% n9 j) o+ k; r: L) D
uchar num,num1,shi,ge;
# ?$ B) n2 B3 g9 O+ Pvoid main() //主函数
" a. F, z) C9 v+ B+ }+ Q1 Q6 L* [; `{
; c! y G$ C9 t# \ TMOD=0X01; //定时方式选择
: h, B. W7 A+ C; A: _7 N5 g TH0=(65536-45872)/256; //写定时初值- ?: K x- A0 W; e* b8 `
TL0=(65536-45872)%256;
: [0 P" c0 z4 ~) N EA=1; //开启总中断! n$ I3 G4 U% {8 G) O- i5 R- k$ X
ET0=1; //开定时器0中断2 R# T% W! D& k2 |: e: A* n! v R
TR0=1; //启动定时器02 q' i1 g$ Q u$ A& q- H8 Y
while(1)
7 l9 a+ `& E7 o2 k/ Z6 i0 u: O {3 V9 g+ Y. y$ n! I
display(shi,ge); //数码管显示函数+ N. J" P C" T) ^9 n+ w% n. C1 }
}
" M2 J& y9 ?2 \& s+ G}
- ?- \ W1 k3 M" J$ u3 R% v e+ R2 z, v2 k6 U9 w
void display(uchar shi,uchar ge) //显示函数6 q" i) }/ t X* ^
{$ I& r% \/ J8 A, u
dula=1; //打开段选' ?: q; Q% h4 b/ A* G
P0=table[shi];) U; ~9 h: y& N: u# H# Z* |
dula=0;+ `9 c8 h" @' v
P0=0xff; //重置P0 防止数码管乱码& P6 {% a& n2 @7 ^8 d. O
weila=1;( W8 ]6 L7 v: d' V& A" P5 Q
P0=0xfe;
) [# q/ l* Q8 Z6 _5 @ weila=0;
: [$ R3 P7 n V. X4 ?& E% b! w4 I7 w delay(5);# T& G1 M1 f+ k( j" [+ }
8 E' t: Z$ I+ r3 H1 s( L dula=1;
3 \$ W" I- V2 g0 n3 \ P0=table[ge];
7 l& [, w) t3 B4 y5 X9 Z dula=0;
4 l( P- |5 m9 [; ?! j) x) w' V/ U P0=0xff;
/ e3 l3 y2 l2 _! T: c& ?7 o/ m weila=1;
: j$ N) d- S! n9 C. b6 C" d P0=0xfd;
$ Q i" ]! u& d3 x) g: c weila=0;
2 L t! b& E0 H) n* t& e$ U delay(5);
+ V$ m9 I6 B6 H8 E0 b! `+ F}/ R4 G8 M0 E5 L" U& q, m* D3 I
/ i9 h8 ?( n: P a9 I
void delay(uint xms) //延时函数 延时xms ms
" R5 z3 p6 v; Z1 G* k) g{
: k* h! o! |7 K0 J) }4 l2 a uint i,j;* k# }" y9 m! \
for(i=xms;i>0;i--)
# x- w: H [5 M# X7 J7 {1 E1 ^ for(j=110;j>0;j--);" q9 e/ L) i: ?. U. C8 N; d: u. f
}1 b# d2 j; Q# Q2 V
9 S D, {( a4 M2 G: `9 A; M m
void T0_Time() interrupt 3 //定时器0中断 定时方式1
" ]0 N! M% G0 q" X3 a, \0 Y9 f7 @' `{' n7 ~! T1 z9 V; q2 g
TH0=(65536-45872)/256;
: n, b8 k& D& jTL0=(65536-45872)%256;' H' {2 D4 U C
num1++;
B+ x: C' Q, H8 G" o2 ^; Kif(num1==20) //检测到1s了没有
6 ^8 u2 D. ~8 x: W' R {
) _, g" m- ^; Z# n! D num1=0;
( P- }, X e8 L$ F9 o; l* w8 a num++;
! D2 P' [3 w9 }! ^# F5 f6 x if(num==60) //实现两个数码管从00--59; D; ^& h3 v4 u
num=0;
* c! z& X. Z; T2 f% t" O+ n shi=num/10;9 J: s6 z' Z7 X) W
ge=num%10;
) j; ~/ }( j4 { }7 ~* u2 \, S4 H* R: B
} |
|