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

亲们,新手请教程序;使用中断实现00--59显示

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
亲们  我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
& X1 ~8 Z- q; @3 @' }* J程序如下:+ x$ H- r4 ], u) O- p( f. `/ J9 Y
#include<reg52.h>
( x3 m3 u; ]# C' H. M; y2 Y#define uchar unsigned char         //定义uchar uint
$ h4 K* \& Q/ ^/ {% @#define uint unsigned int
$ O# V& C$ N7 o8 x- a3 p: U% k/ S* Usbit dula=P2^2;                         //定义数码管段显示
- |3 n; T; m: T3 ~sbit weila=P2^3;                //定义数码管位显示/ x5 o7 N# K- s) B+ Y: ?
uchar code table[]={                //定义数码管显示从0--9
5 N3 [9 [0 B+ T; t  s. h0 i2 M0x3f,0x06,0x5b,
- b+ ]$ e# J8 B1 n0x4f,0x66,0x6d,
$ s: Z1 W& L" i  w9 p! w' ~0x7d,0x07,0x7f,0x6f};
3 O1 W' O" N8 D8 g" V- B( f7 n! b9 j  }; g  w
void display(uchar,uchar);        //声明数码管显示函数4 J9 P9 S  @' W* w) q+ n' t
void delay(uint);                //申明延时函数
* r& c1 s/ h+ S: w. `9 auchar num,num1,shi,ge;+ [) }2 x% w* \6 ]
void main()                        //主函数
- F! J" @: v: [5 {{& Y4 p6 @9 z% R$ Y; y
  TMOD=0X01;                        //定时方式选择" a6 c# U; F4 ]9 W3 l8 P. c5 g. A
  TH0=(65536-45872)/256;        //写定时初值
+ p5 H, J& |% `  TL0=(65536-45872)%256;0 `; c# F9 `; S
  EA=1;        //开启总中断
* g" O# L6 m! o0 @  ET0=1;        //开定时器0中断
5 Q- ?; k4 U/ {) F. D/ ^  TR0=1;        //启动定时器0: D/ T& I6 H2 ~6 e% D+ G% R, i
  while(1)5 d' R& \2 }. e! m/ p* L1 l+ J
  {! D; _% ^: {, f% z+ q  K. W
    display(shi,ge);                //数码管显示函数9 @. E* o7 N2 E. c
  }
& e5 W5 B% p& l4 A: V}
( u. Y( w8 n8 C" k- Y. N' P
6 @2 A! U. q! Dvoid display(uchar shi,uchar ge)        //显示函数" g' L% k% Q" U0 [- p3 @
{5 a/ y& P) n( I9 V' K: M! B$ o* j
   dula=1;                        //打开段选7 Z- ~' F) S5 z" w% w  w
   P0=table[shi];$ s4 U: a1 L& @
   dula=0;" Q3 W# z; n! t) v( }
   P0=0xff;                        //重置P0 防止数码管乱码. R2 h' I+ M3 |- c7 N
   weila=1;. B5 M5 ~; y: I* X5 J7 E( W# R
   P0=0xfe;1 h3 L' \0 C! L* ~% `& Y
   weila=0;
) o9 _  N8 F0 F% @   delay(5);
9 m% \4 g! ^9 d" F3 d  
$ i: ^) |+ Q; A  G   dula=1;
2 r# y; T1 s6 @3 x9 c+ Y0 b! F: z   P0=table[ge];( A; y& `) ], `) W8 Z
   dula=0;
# x* W5 b. D# c5 F1 n   P0=0xff;
7 e4 p9 p6 K4 _   weila=1;! A' x0 _) c! E( Q1 V( g
   P0=0xfd;9 m. D1 d8 G1 Z  t% {5 E
   weila=0;& G9 C; x& G$ F$ g$ v
   delay(5);
  y- R% j1 c4 R}
. j% h$ J* x! g, J7 E, |, h8 B+ T' d' e1 }. p* E
void delay(uint xms)    //延时函数 延时xms ms
' X9 S7 [* a( F+ T7 U7 i  K% j5 [, l{
# [, i5 N" B1 P  H' Q7 k; ]   uint i,j;
1 Z- A: U' U5 D! N1 s7 g   for(i=xms;i>0;i--)
! |0 ?/ J8 p4 u- p* X    for(j=110;j>0;j--);
+ F: T4 S, m# X, m- h}, [& o" e' @' Z; W% P7 O6 o6 I9 K2 f6 L

3 f# B0 l% ?/ g, O8 t) cvoid T0_Time() interrupt 3   //定时器0中断 定时方式1( F+ T3 J6 c4 y  S; Q: g$ t8 M
{
1 {9 y# S& W  jTH0=(65536-45872)/256;3 N% Y% |7 \9 P  {. x
TL0=(65536-45872)%256;
/ L- H* D0 S5 knum1++;
, j7 W; R; Z- d5 Cif(num1==20)      //检测到1s了没有
+ c8 {6 I  {8 J3 t. |2 H7 p0 ^5 T   {- k) F3 l; o! J; i* ~
    num1=0;( M# h4 s4 x" X! r, d
    num++;: K! `. F% x; G: g
    if(num==60)   //实现两个数码管从00--592 `- Y5 I5 b- L% y
    num=0;
  I0 y/ l3 m8 X    shi=num/10;; ~$ I6 w- ?& O+ ?6 s) H( y$ }
    ge=num%10;
6 J3 o! Y0 ~# |! V* \  A    }) G* \: J: g; O
}

该用户从未签到

2#
发表于 2012-7-26 11:20 | 只看该作者
改成“interrup 1”才是定时器0中断

该用户从未签到

3#
 楼主| 发表于 2012-7-26 12:08 | 只看该作者
hi_yjs 发表于 2012-7-26 11:20
* Q2 I2 ^/ A! w/ P% d改成“interrup 1”才是定时器0中断

/ ~+ c, z5 U6 t1 i4 X) ^$ d呵呵 谢谢  刚才发现了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-22 05:00 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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