找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3021|回复: 3
打印 上一主题 下一主题
收起左侧

求高手帮忙。

[复制链接]
跳转到指定楼层
楼主
ID:37854 发表于 2012-4-5 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<reg52.h>
sbit wei=P2^3;
sbit duan=P2^2;
unsigned char code duanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char fen,shi,miao,k;
void main (void)
{ P0=0x24;
 wei=1;
 wei=0;
 P0=duanma[0];
 duan=1;
 duan=0;
 k=0;
 P1=0x01;
    TMOD=0x01;
    EA=1;
    ET0=1;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    TR0=1;
 while(1);
}
void dingshi0() interrupt 1  //定时器0中断程序
{        TH0=(65536-50000)/256;
         TL0=(65536-50000)%256;
         k++;
         if(k==20)
         { miao++;
             k=0;
             P0=weima[7];
             wei=1;
             wei=0;
             P0=duanma[miao%10];
             duan=1;
             duan=0;
             P0=weima[6];
             wei=1;
             wei=0;
             P0=duanma[miao/10];
             duan=1;
             duan=0;
                 P1=~P1;
               if(59==miao)
               { miao=0;
                         P0=weima[7];
                         wei=1;
                         wei=0;
                         P0=duanma[miao%10];
                         duan=1;
                         duan=0;
                         P0=weima[6];
                         wei=1;
                         wei=0;
                         P0=duanma[miao/10];
                         duan=1;
                         duan=0;
                         fen++; //显示分钟数码管
                         P0=weima[4];
                         wei=1;
                         wei=0;
                         P0=duanma[fen%10];
                         duan=1;
                         duan=0;
                         P0=weima[3];
                         wei=1;
                         wei=0;
                         P0=duanma[fen/10];
                         duan=1;
                         duan=0;

                 if(59==fen)
                 {
                         fen=0;
                         P0=weima[4];
                         wei=1;
                         wei=0;
                         P0=duanma[fen%10];
                         duan=1;
                         duan=0;
                         P0=weima[3];
                         wei=1;
                         wei=0;
                         P0=duanma[fen/10];
                         duan=1;
                         duan=0;
                         shi++;
                         P0=weima[1];
                         wei=1;
                         wei=0;
                         P0=duanma[shi%10];
                         duan=1;
                         duan=0;
                         P0=weima[0];
                         wei=1;
                         wei=0;
                         P0=duanma[shi/10];
                         duan=1;
                         duan=0;
                                           }
                if(24==shi)
                {
                    P0=0x24;
                     wei=1;
                     wei=0;
                     P0=duanma[0];
                     duan=1;
                     duan=0;     
                }                         
               }             
         }
   }
不知道哪儿错了 定时器能正正常运行(LED会闪烁说明可以进到IF(20=k)程序)可结果 不是按 我预想的 电子钟表  而是 秒的 十位 的数码管计数  其他的数码管全部是黑的 求高手解答。

[此贴子已经被作者于2012-4-5 16:54:44编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:37854 发表于 2012-4-5 21:29 | 只看该作者

求帮忙

 

回复

使用道具 举报

板凳
ID:37273 发表于 2012-4-7 17:02 | 只看该作者
显然是个数码管分时显示的问题,你的问题出在,你是同时刷各个数码管,那么眼睛只能看到最后一个8. 你要保证每个数码管都分配到一定的时间去点亮,人眼才能看到过个数码管量。 现在的情况是,显示秒个位的数码管只点亮了几微妙,而秒十位的显示1秒不到一点点。 建议你做个2ms的定时器中断,中断中刷一个位选的内容。
回复

使用道具 举报

地板
ID:38348 发表于 2012-4-14 16:41 | 只看该作者

嘿。。。。中断服务函数为么要做这么多事啊。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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