EDA365电子论坛网
标题:
亲们,新手请教程序;使用中断实现00--59显示
[打印本页]
作者:
zhuxiaoxing
时间:
2012-7-26 10:10
标题:
亲们,新手请教程序;使用中断实现00--59显示
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
X& q: i4 R! p" C: X2 H
程序如下:
* d4 D0 s8 y' j$ z3 n6 U* w# @
#include<reg52.h>
" W& Z4 W8 \& L' S5 [" Q
#define uchar unsigned char //定义uchar uint
2 V+ K( x1 Y% W4 A
#define uint unsigned int
* r3 X( b' Y+ O
sbit dula=P2^2; //定义数码管段显示
- Q$ {) S" ^& F- K
sbit weila=P2^3; //定义数码管位显示
0 X& M0 _* U: X/ P# o- d& z2 Y
uchar code table[]={ //定义数码管显示从0--9
8 ?% [8 g' v7 ^
0x3f,0x06,0x5b,
) T' w6 K" q- S1 _" g, r# Q
0x4f,0x66,0x6d,
4 @2 d6 g# z2 h& w0 G
0x7d,0x07,0x7f,0x6f};
9 p$ Q" Y# v) I' z8 ~/ d
9 K( `- M' ^9 d+ W/ ?: u$ ]
void display(uchar,uchar); //声明数码管显示函数
7 T& Z. t5 q, x
void delay(uint); //申明延时函数
( I' z& b; U( B# b- O2 f* _9 A
uchar num,num1,shi,ge;
$ o: y: e# n! z" N& F* @+ M$ F3 x
void main() //主函数
& f D+ f) A# i7 l3 m6 J Y
{
' b/ }$ R' R# e7 J( d$ `: _
TMOD=0X01; //定时方式选择
( E- O# I: @1 t3 F
TH0=(65536-45872)/256; //写定时初值
- C" M- P1 d5 A4 P+ R
TL0=(65536-45872)%256;
3 N5 i: V& f' ^- C4 V5 V. _* }
EA=1; //开启总中断
8 b- V' s0 ?; B
ET0=1; //开定时器0中断
, y* Z4 E3 N* P a4 ]; {6 S
TR0=1; //启动定时器0
& N& Z9 R+ F" p
while(1)
8 Z, W |+ e- d; P
{
' y5 H( B$ D4 T' e7 h8 g% S9 u
display(shi,ge); //数码管显示函数
: Y L7 q& V$ H' a
}
9 x1 c/ d. Y4 }- o% n
}
7 n$ G+ j: c$ K1 N; A* F f
: r& A! X5 N* t: N+ }8 e
void display(uchar shi,uchar ge) //显示函数
/ A- ]1 J0 R+ c/ | l( F0 N: S
{
7 {: x- {9 K/ k" z& Z5 l
dula=1; //打开段选
: U' t; u# M2 b+ [
P0=table[shi];
. B7 h) k, B1 T4 b5 g
dula=0;
2 W& c3 B1 ?6 t* f* j3 c
P0=0xff; //重置P0 防止数码管乱码
f [ z* C( H6 C, v
weila=1;
) R+ e S. E! b0 `3 F; a+ y7 S
P0=0xfe;
" Z3 Y. q2 ]4 d7 d9 @
weila=0;
5 K* \# `- u* o2 }- V9 g }5 i
delay(5);
( \1 a6 s8 g6 e; H j
; B/ o; x1 k1 @$ g2 ^; F8 Z
dula=1;
* R4 h9 M8 i4 X- y; p0 v6 ~7 N6 p
P0=table[ge];
2 t( m" e3 F/ d. ?0 T$ x( H
dula=0;
- n, ^4 h6 |2 X' N; n
P0=0xff;
/ e- I4 ]. ^" ^" `
weila=1;
2 w9 t1 E( |0 R A; \% o
P0=0xfd;
) |' y# p! E t1 ^8 E8 S
weila=0;
; C5 L2 B+ S6 h$ {
delay(5);
2 t3 s \* ?* G. |7 y0 z
}
; E- y) U0 N% n; S4 J: O4 }
# L# ~; I9 I7 l8 R- W. g
void delay(uint xms) //延时函数 延时xms ms
& ~, J2 k0 v4 N
{
$ y7 v3 O* ~) C7 @8 N. L) J6 L
uint i,j;
6 s' e( ^ |/ o& D( L1 F
for(i=xms;i>0;i--)
5 a7 \1 {) b4 R; ^* u8 u V
for(j=110;j>0;j--);
! I: m$ q6 o, y+ s( @8 D8 L
}
- e5 g: j( ]% A; f5 A" D+ _& D9 l
- c" c3 Z" C6 I, a
void T0_Time() interrupt 3 //定时器0中断 定时方式1
$ A$ M! `, L0 J
{
2 }$ S! R8 \- Y6 ]
TH0=(65536-45872)/256;
; L" \! `5 F5 _9 S, m0 d/ s
TL0=(65536-45872)%256;
% ?5 m- K% j- r
num1++;
3 p! A- L0 ^% Z& N1 ~
if(num1==20) //检测到1s了没有
; i: E6 J4 T. K6 y2 j" \+ |. L- B
{
# A. e7 ?3 J' s/ i
num1=0;
x U# S$ ~% a% z, i4 w* C: T
num++;
+ P" u: ]- E. G1 \1 j
if(num==60) //实现两个数码管从00--59
& v7 u: @: e5 B! ?* ^5 p8 v' S1 Z* D
num=0;
7 i8 m- C+ j* ]0 Z! g: |/ }, a
shi=num/10;
' s6 ]0 @9 B7 \
ge=num%10;
* J) v1 ~4 r5 E& V+ ]
}
( e5 d1 B5 x2 s2 U& b; r- w
}
作者:
hi_yjs
时间:
2012-7-26 11:20
改成“interrup 1”才是定时器0中断
作者:
zhuxiaoxing
时间:
2012-7-26 12:08
hi_yjs 发表于 2012-7-26 11:20
3 W: q$ e: X3 c
改成“interrup 1”才是定时器0中断
; ^ N( Z0 C8 r
呵呵 谢谢 刚才发现了
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2