找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 728|回复: 2
打印 上一主题 下一主题

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

[复制链接]

31

主题

113

帖子

-1万

积分

未知游客(0)

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

EDA365欢迎您!

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

x
亲们  我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,2 V; E8 ?, \: s: L- G) Y9 ~, I/ u
程序如下:
' E" [& ~2 O, w6 L#include<reg52.h>
8 B8 F5 w) m/ S" I) h, B5 L#define uchar unsigned char         //定义uchar uint
# n' }. b3 B$ d  ]: x; d! o2 w#define uint unsigned int
9 n2 V) P: C7 P2 R- B, Z7 Qsbit dula=P2^2;                         //定义数码管段显示
7 D% Y3 U0 r, I$ B7 a  H+ b+ ^sbit weila=P2^3;                //定义数码管位显示
  _+ ^, u% P9 a5 n3 y# Yuchar code table[]={                //定义数码管显示从0--9
; v, K; s, Y% \* ?  w9 g: F0x3f,0x06,0x5b,
6 }$ Y; k2 A$ k6 i( p0x4f,0x66,0x6d,1 Q8 i% y# ?9 F
0x7d,0x07,0x7f,0x6f};9 e& G, B, a- \, m; d

& c7 a% y' W! v& C; ?9 W3 [) X* G9 a+ Rvoid display(uchar,uchar);        //声明数码管显示函数
* v) B0 U( C: ]% d! |: [void delay(uint);                //申明延时函数
" j0 X+ v1 @0 C& b+ z0 S. @uchar num,num1,shi,ge;7 d- y# J% W. a7 j: b" Y+ c
void main()                        //主函数
: m* P. ]/ ]% j  `% q! y{
7 Q/ [) F3 k6 c. r; R  TMOD=0X01;                        //定时方式选择" b% ?6 L/ V( x. q
  TH0=(65536-45872)/256;        //写定时初值! y9 w. P0 ?1 g! f
  TL0=(65536-45872)%256;6 x* D4 D7 D5 G2 W' X/ l, }8 |
  EA=1;        //开启总中断5 E9 K4 V& F3 C$ v* J
  ET0=1;        //开定时器0中断
1 U" j6 \- J0 c3 Z4 I2 A  TR0=1;        //启动定时器0
" _* t0 \% o  M7 ]  while(1)
% B8 F4 C, X# s1 Z9 g; v1 w, j  {; G; F& V/ K, Z- G! w# P
    display(shi,ge);                //数码管显示函数
4 j, z$ Y5 c. @* q; s3 B  }9 J6 M# j, n& i' C. H
}- @* o* l# f* v* e/ J% s; I% P
% D2 N3 k: H. X; c* d
void display(uchar shi,uchar ge)        //显示函数
% ]$ T" D3 @6 s0 ^: M4 a5 [' V{, j" n: X* n- i9 p
   dula=1;                        //打开段选8 w5 |5 G9 N. t- G: m( Y
   P0=table[shi];/ c* D6 \9 i' _  s
   dula=0;3 ~, j2 Y, {  b! Q  x
   P0=0xff;                        //重置P0 防止数码管乱码
- e, }7 S8 \7 W0 g5 f" R- ~& G   weila=1;
/ @5 \7 G6 ?1 u; G) k# }2 ^/ b   P0=0xfe;3 y5 `  l  {, l' j8 D* [& g6 @
   weila=0;! y9 J/ d' o: b$ j
   delay(5);0 z: q$ c) U  W* Y
  # e- A7 v. x' B/ Q; O+ F
   dula=1;4 [# K) R1 P6 i9 n) v( }3 f- R6 M
   P0=table[ge];
. e9 w9 M2 ]3 \   dula=0;# l7 q( J% \2 Q6 ^: K
   P0=0xff;
) c" q8 C% X! H& A0 m9 [! P0 k9 v   weila=1;' G0 E3 _# H9 k
   P0=0xfd;
' c' ^' r7 N# J! s) y   weila=0;% `& x1 l" J( ?5 b2 J
   delay(5);5 N. e4 T& |, _3 j- N1 b( a
}' ?/ g7 B. b! S$ P+ ?
7 ]& t) X, A3 F+ I2 I! p% R6 m
void delay(uint xms)    //延时函数 延时xms ms' K5 c# m: }3 t" o
{! _1 E4 v5 z) }3 I# s; @
   uint i,j;1 E7 z: n( d* y/ C
   for(i=xms;i>0;i--); _8 h+ k; z- l2 C# \+ _& B: g
    for(j=110;j>0;j--);7 G2 R  \# ?0 N4 W% E
}: C5 E. e- Z( a5 m/ v! k
( m) x0 _7 K% D$ |: L  j+ W8 p- a
void T0_Time() interrupt 3   //定时器0中断 定时方式1
2 j5 f! @& ], O& u5 H% T, a( |. J# l{4 X/ t! \' o# `+ c$ l
TH0=(65536-45872)/256;
# \+ ~/ r  ^% i" a: J0 g) T, uTL0=(65536-45872)%256;; q& ?3 }! ^, ?7 d9 Z
num1++;$ H5 i7 b8 d0 T0 q" W! i2 V
if(num1==20)      //检测到1s了没有 9 c) ^$ U5 Y$ B- m9 l1 I. W4 h
   {
5 T* l4 K  @8 z* {! m    num1=0;/ ~7 ^, X' r0 y3 `
    num++;. A6 g' ^2 f' Y, g% _- ?
    if(num==60)   //实现两个数码管从00--59
' |1 B; e' f& }8 l    num=0;: ]& }" z  f6 E% O/ |0 }6 i
    shi=num/10;
2 T- J% M- }+ _/ P    ge=num%10;' Q+ E! B  a6 [6 L7 z  U6 ?  [
    }
6 g) o3 j1 Z3 R) Q2 M, ~}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

13

主题

120

帖子

1219

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

31

主题

113

帖子

-1万

积分

未知游客(0)

积分
-11465
3#
 楼主| 发表于 2012-7-26 12:08 | 只看该作者
hi_yjs 发表于 2012-7-26 11:20
* U# b" H7 c2 `% N改成“interrup 1”才是定时器0中断
- j) g2 c# o( X4 m
呵呵 谢谢  刚才发现了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-8 22:02 , Processed in 0.058150 second(s), 31 queries , Gzip On.

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

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

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