找回密码
 立即注册

QQ登录

只需一步,快速开始

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

8数码管实现秒表控制

[复制链接]
跳转到指定楼层
楼主
ID:40554 发表于 2012-5-20 21:38 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
/**********************************************************************************
*  标题:                            8数码管实现秒表控制8数码管实现秒表控制                                                 *
*                                           淘宝梦飞电子工作室                                                                        *
*                                                    *
***********************************************************************************
*       按键start 开始计时
*       按键stop  停止
*       按键reset 复位
*       最多计时60分钟
***********************************************************************************/


#include <reg51.h> 
#include <intrins.h>

sbit start=P1^0;
sbit stop=P1^1;
sbit reset=P1^2;

unsigned char CNT=0;
 
//此表为 LED 的字模, 共阴数码管 0-9  - 
unsigned char code   Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  //段码控制

//此表为8个数码管位选控制, 共阴数码管 1-8个  - 
unsigned char code   dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};    //位选控制   查表的方法控制

/************主函数**********************/ 
main()
{  
 unsigned char ms_10,sec,min;
   unsigned int LedOut[10];     //变量定义
   unsigned char i,j;

   ms_10=0;
 sec=0;
 min=0;


 //定时器及中断初始化
    TMOD=0x02;  //定时器0,选择工作方式2-8位自动重装
  TH0=0x9C;   /*采用定时器计时,12MHz晶振下,计数初值=256-100=156 (0x9C)*/
  TL0=0x9C;   //定时100us
     ET0=1; //定时器0开中断
     EA=1; //开总中断
  TR0=0;//计时器不工作

  while(1)
  {  
    
    if(!start) TR0=1;    //计时器工作
  if(!stop)  {TR0=0;}
    if(!reset) {TR0=0; CNT=0;  ms_10=0; sec=0; min=0; break;}

    if(CNT>99) 
      {CNT=0;
      ms_10++;//每过100*100us=0.01秒,ms_10累加一次 
    if(ms_10>99)
       {
       ms_10=0;
     sec++;
     if(sec>59)
        {
       sec=0;
       min++;
       if(min>59) min=0;
      }
     }
     }  


    //将计数值Time 转化为时间,存储到Ledout中;
   LedOut[0]=Disp_Tab[min/10%10];//分
     LedOut[1]=Disp_Tab[min%10];//分
     LedOut[2]=0x40; 
     LedOut[3]=Disp_Tab[sec/10%10];  //秒 
   LedOut[4]=Disp_Tab[sec%10];  //秒
     LedOut[5]=0x40;
     LedOut[6]=Disp_Tab[ms_10/10%10];     //0.01秒
     LedOut[7]=Disp_Tab[ms_10%10];           //0.01秒  

   //输出到数码管上
  for( i=0; i<9; i++) 
  {  
   P0 = LedOut;
   P2 = dispbit;   //使用查表法进行位选   
   for(j=0;j<100;j++);
   }
  
  }   
} 

 


void Timer0(void) interrupt 1    
{
 CNT++;  
}

 

 

使用八位数码管显示,实现秒表程序。无锁存,直接控制。

 
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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