|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,' {. P7 m4 O# B: Q+ F" D
程序如下:0 d# R$ f# u7 c' U( E) o9 U
#include<reg52.h>
# [" h0 o/ U& d* b i+ h#define uchar unsigned char //定义uchar uint2 p2 X1 N6 D" L! g
#define uint unsigned int% X8 i& ], g9 K7 b. K
sbit dula=P2^2; //定义数码管段显示; ?# ~1 {" y6 k* n! o0 y. u% t
sbit weila=P2^3; //定义数码管位显示, p5 f- X+ P! Z# y9 C C& z
uchar code table[]={ //定义数码管显示从0--93 i: T; |) P' k' @
0x3f,0x06,0x5b,3 [4 ?/ C0 N# b1 r3 e; C
0x4f,0x66,0x6d,
. ?( @8 S( W" t2 ^1 U0x7d,0x07,0x7f,0x6f};' O' l2 J- B( b2 L
' j2 n9 l/ X& Z+ P( D, Ivoid display(uchar,uchar); //声明数码管显示函数
3 {1 `" v1 ^ ^3 I0 Hvoid delay(uint); //申明延时函数! c$ X }( i0 H
uchar num,num1,shi,ge;
- {& Z/ a4 ~. ^7 b* Wvoid main() //主函数
8 h6 N2 b9 g2 D{3 r! V% \" F" E
TMOD=0X01; //定时方式选择
' V9 V3 Q' y* ^/ D( W8 f TH0=(65536-45872)/256; //写定时初值
( {+ R! Z! h/ h TL0=(65536-45872)%256;/ W" j5 N: r& i0 V8 i
EA=1; //开启总中断
+ i* i; C! k" D3 f! V ET0=1; //开定时器0中断
6 H0 _- |8 Q4 W) P TR0=1; //启动定时器0
6 `, H$ F) q/ }, V1 `/ \) k- Q while(1)
4 _! }+ O, E D; L6 h; U {
! z, m/ s) ~8 c3 I4 g9 m display(shi,ge); //数码管显示函数
0 a+ g1 R: z5 D5 h }' ?! D3 }2 _1 K- z- t5 |5 }
}
2 L5 |5 V' D4 O% Y* E7 K0 ?+ b0 d
7 G& n" p$ x- t5 l& G& nvoid display(uchar shi,uchar ge) //显示函数5 \9 [, h) c7 P2 B3 b4 q
{
* V- r. _$ w, V# \) ~/ f9 F! ]4 Z dula=1; //打开段选
9 a+ r/ O; T% Z4 T6 h5 S4 M P0=table[shi];( ^- a) I, Q: F( C
dula=0;/ @1 k5 Q# O4 P2 U& m2 {
P0=0xff; //重置P0 防止数码管乱码1 W& `7 Q. P, B; A/ x
weila=1;- V. o. S3 c/ B" k
P0=0xfe;( q7 O4 T$ [& `, r
weila=0;1 K b. h8 t3 j+ q7 O1 d8 u# p
delay(5);
! k# m( m& W9 Y) R8 G: f , x0 P5 s: b9 M, L; Q
dula=1;2 o9 N* ^ e) n w& M
P0=table[ge];
1 w6 L' ?: ]. M5 ] dula=0;: E5 `1 S. N9 [% J
P0=0xff;
5 m3 l8 L7 W, P& C; Z0 A3 \$ i3 g weila=1;
# c9 z$ V. L- i s' j P0=0xfd;
/ W3 l5 v9 K7 J3 V+ y# m weila=0;% |! {& m! ?" Y* x: G5 V
delay(5);
9 B Q2 ^' W9 X+ c6 W ~ x ^}
! ]2 {) F! ~. i$ N2 t: \4 M9 N; R. g9 J
void delay(uint xms) //延时函数 延时xms ms R% W+ x3 J! ]- n4 i. k7 H% T% N
{
! l0 c$ Z p: H; p6 e uint i,j;
. L- ]; F* H [, n" j6 F for(i=xms;i>0;i--)8 p e+ b; J/ K* ^# ]
for(j=110;j>0;j--);
$ N! X M( w% W+ F! ?}
2 ~# k |+ A E8 v: @: V
b% J6 W) ]! Xvoid T0_Time() interrupt 3 //定时器0中断 定时方式1 o; s) V6 L, _
{! C. v) }) e* p" s* h
TH0=(65536-45872)/256;
% E( l2 w* s" F! L" o4 hTL0=(65536-45872)%256;
# d) W, {! Y/ y3 [. U: bnum1++;# [& J5 ?, L" f6 n' p3 S
if(num1==20) //检测到1s了没有
@7 y$ G. F( E, R {
, |6 C2 |% E9 M) a4 a num1=0;
" [/ `' v" Y8 n# W* f. l num++;
9 d' p& }. ^! H* h4 m: j if(num==60) //实现两个数码管从00--592 x$ W2 p- w. `# S5 `
num=0;
2 n! J7 W4 {, @7 K2 d+ P2 }. e shi=num/10;" Y- j" A3 `8 i5 o* Q) f' |: g. G* k
ge=num%10;
n( P- l" v) N$ g$ c' o }
3 w+ Q) }5 g$ S2 C} |
|