|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,$ c: _& N* W+ @0 z' ^
程序如下:
9 B+ X, U/ ^& Q; b: Y/ j9 e& H#include<reg52.h>, q h- G; w' Y
#define uchar unsigned char //定义uchar uint; [5 }. ~3 g2 H5 N) p
#define uint unsigned int3 e [) x1 O \6 C4 N
sbit dula=P2^2; //定义数码管段显示0 p0 O: M9 f( ?$ }
sbit weila=P2^3; //定义数码管位显示* j/ y; N2 J' [2 \) N! Q
uchar code table[]={ //定义数码管显示从0--9- M% ] s% Y/ ^. G) T2 C6 p
0x3f,0x06,0x5b,
7 Z E! q$ {0 \4 [) A& w0x4f,0x66,0x6d,
7 B7 J% W9 M! F0x7d,0x07,0x7f,0x6f};
+ j: K" I; }% ^: Q2 c2 I& z' Z8 y7 d5 {1 W; K" _: i& {: x
void display(uchar,uchar); //声明数码管显示函数
x8 m# D7 x. gvoid delay(uint); //申明延时函数- \3 R" ~# G. Y5 r. N( U3 i" w
uchar num,num1,shi,ge;3 N" | h) s1 A! v; d' Z+ X
void main() //主函数
" x; ^0 c& i; o5 T2 R" w, U{
/ t4 i! V1 G0 E: l1 E TMOD=0X01; //定时方式选择
/ S$ B$ ?2 q y. u$ i TH0=(65536-45872)/256; //写定时初值 ~1 h/ q" j, f( I7 Y0 m( V% Y* ?
TL0=(65536-45872)%256;, _% k V) e+ E9 S/ D9 x# Y! d
EA=1; //开启总中断
* q7 ~7 ]: s" J/ p( K ET0=1; //开定时器0中断% g- K2 c; g6 C3 L0 u" v; I8 h
TR0=1; //启动定时器0
" j9 q" g( t; J4 @) U. k while(1)/ Q4 o2 b# s1 ~
{1 u2 {2 {- }% E0 ~3 [! Y' g
display(shi,ge); //数码管显示函数+ h( G0 L# ^& p
}
% |8 ?8 L9 j0 b( p5 i4 j}1 M6 d6 A O0 |) S+ |* U
7 I" s+ e8 R# o: m7 \
void display(uchar shi,uchar ge) //显示函数
4 J4 \3 F' Z! O) [9 _+ d. w& R" {{6 v K* ]. u' O3 T/ _* Q
dula=1; //打开段选7 @% G- r2 ~' g3 p) ~ l6 G
P0=table[shi];4 W& t! M/ v3 u1 X( n
dula=0;
4 u& ]9 C/ o6 `8 S! o P0=0xff; //重置P0 防止数码管乱码) V3 K* z3 d6 d" q- o$ w
weila=1;, p9 F2 q. \; n5 Z
P0=0xfe;' B3 O4 |1 C% I
weila=0;/ K$ S7 j9 y! A! [: Y
delay(5);& @5 j1 F2 X* ^" q
7 t q; x4 `- [2 l/ \' T. ? dula=1;
# F- H- ^ g3 y Q" b P0=table[ge];% ^) {) i! \ a3 I. N Y
dula=0;) H* C$ c6 ^" \# X8 \
P0=0xff;; e, ?; \5 v+ |" `# Q6 q
weila=1;% z3 n3 \3 a# A
P0=0xfd;
0 I( h; L( G/ L/ }; Y" G weila=0;" {4 T& e7 E U; H6 S! h
delay(5);
! S, p9 T9 @( U, `}# l5 C, V+ P: q/ [7 P
, c+ a3 A+ K! W& h& S
void delay(uint xms) //延时函数 延时xms ms }. f/ L. z5 w- o) Z
{
, F+ q0 z, ~- o" s f# ?, p uint i,j;
( C8 a6 T' l+ U+ T9 a for(i=xms;i>0;i--)
. Y, T/ G* r- Z. d! }, T' p for(j=110;j>0;j--);
9 k' o$ y$ ?- Z4 M! \' w}
1 r# M1 R9 I3 R& `
; P& m: W o$ j0 ~+ kvoid T0_Time() interrupt 3 //定时器0中断 定时方式13 V3 A7 K5 [! w7 e
{
* w; m: _: {' h# {3 b/ QTH0=(65536-45872)/256;; s& ~6 j# L. F
TL0=(65536-45872)%256;
( m h! e/ L% [0 D% s+ Rnum1++;! c! G; O1 R- H7 d+ L& |
if(num1==20) //检测到1s了没有 3 c5 C: \$ j. K* K3 l
{
& B% ^+ r0 {3 a9 t- o9 O- T* M+ y num1=0;
4 U1 B& r" p8 x4 E. P. O! C num++;" x/ ]4 S( v8 i
if(num==60) //实现两个数码管从00--599 L( `5 X; _& a" U) b
num=0;8 X# X7 W: m/ |
shi=num/10;
" i2 @! G* n2 u6 v5 ~& i ge=num%10;
- ^# j/ x5 `% \: }9 l, }) G# Q5 p }
; @* c5 T8 N! Q% ]3 T- C2 u} |
|