找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机电子秒表仿真及源程序 实现0.01S~59分的计时 带3按键

查看数: 8622 | 评论数: 2 | 收藏 4
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-3-18 04:03

正文摘要:

给51黑电子论坛的朋友们分享一个51单片机做的电子秒表程序,带开始和停止和清除3个按键,可以实现0.01S~59分的计时。下面是该电子秒表的仿真原理图:

回复

ID:612453 发表于 2019-9-17 17:29
51hei官方发布 发表于 2017-3-18 04:04
该秒表的led数码管驱动程序:

你好吗要怎么把中间的横线去掉了只用六位
ID:140725 发表于 2017-3-18 04:04
该秒表的led数码管驱动程序:
  1. #define LED_GLOBAL 1
  2. #include "led.h"
  3. /****************************************
  4. *函数名称:delay_us(uint us)
  5. *函数功能:实现微秒级的延时
  6. *函数入口:us,延时函数循环后期数
  7. *函数出口:无
  8. ****************************************/
  9. void delay_us(uint us)
  10. {
  11.   uint i;
  12.   while(us--)
  13.   {
  14.     for(i=0;i<100;i++);
  15.   }
  16. }
  17. /****************************************
  18. *函数名称:led_init(void)
  19. *函数功能:六位七段数码管显示初始化
  20. *函数入口:无
  21. *函数出口:无
  22. ****************************************/
  23. void led_init(void)
  24. {
  25.    LED=segLedCode[0];
  26.    LED_CS1=0;
  27.    LED_CS2=0;
  28.    LED_CS3=0;
  29.    LED_CS4=0;
  30.    LED_CS5=0;
  31.    LED_CS6=0;
  32.    LED_CS7=0;
  33.    LED_CS8=0;
  34. }
  35. /**********************************************
  36. *函数名称:ledWrite(uchar c,uchar n,uchar mod)
  37. *函数功能:对一组数码管的某一位进行短暂显示
  38. *函数入口:c,要显示的数据;n,显示一组数码管中的
  39.            第n位;mod,c的数据形式
  40. *函数出口:无
  41. *说明:当mod==DIGITAL时,c为数字0~9的ANCII码形式,
  42.        此时在n位数码管上显示想用数字
  43.        当mod==CHARACTER,直接将c输出数据口
  44. ***********************************************/
  45. void ledWrite(uchar c,uchar n,uchar mod)
  46. {
  47.    if(CHARACTER==mod)
  48.    {
  49.           LED=c;  
  50.    }
  51.    else if(DIGITAL==mod)
  52.            {
  53.               if((c-'0')<0x0a)
  54.                   {
  55.                     LED=segLedCode[c-'0'];
  56.                   }
  57.                   else
  58.                   {  
  59.                         LED=segLedCode[0];
  60.                   }
  61.            }
  62.    switch(n)
  63.    {
  64.                 case 0x01:
  65.                 {
  66.                   LED_CS1=0;
  67.                   delay_us(10);
  68.                   LED_CS1=1;
  69.                   break;
  70.                 }
  71.                 case 0x02:
  72.                 {
  73.                   LED_CS2=0;
  74.                   delay_us(10);
  75.                   LED_CS2=1;
  76.                   break;
  77.                 }
  78.                 case 0x03:
  79.                 {
  80.                   LED_CS3=0;
  81.                   delay_us(10);
  82.                   LED_CS3=1;
  83.                   break;
  84.                 }
  85.             case 0x04:
  86.                 {
  87.                   LED_CS4=0;
  88.                   delay_us(10);
  89.                   LED_CS4=1;
  90.                   break;
  91.                 }
  92.                 case 0x05:
  93.                 {
  94.                   LED_CS5=0;
  95.                   delay_us(10);
  96.                   LED_CS5=1;
  97.                   break;
  98.                 }
  99.                 case 0x06:
  100.                 {
  101.                   LED_CS6=0;
  102.                   delay_us(10);
  103.                   LED_CS6=1;
  104.                   break;
  105.                 }
  106.                 case 0x07:
  107.                 {
  108.                  LED_CS7=0;
  109.                   delay_us(10);
  110.                   LED_CS7=1;
  111.                   break;
  112.                 }
  113.                 case 0x08:
  114.                 {
  115.                   LED_CS8=0;
  116.                   delay_us(10);
  117.                   LED_CS8=1;
  118.                   break;
  119.                 }
  120.                 default:
  121.                   break;

  122.    }

  123. }
  124. /***************************************************************************
  125. *函数名称:ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
  126. *函数功能:循环在数码管上显示缓冲区中的数据
  127. *函数入口:segCode,指向显示缓冲区中的指针;segCodeMod,0~7位为1或0标示1~8位数码管
  128.            显示的数据的类型(DIGITAL或者CHARACTER);segNumber,代表要显示数码管的
  129.                    位数
  130. *函数出口:无
  131. *说明:本函数主要实现将显示缓冲区中的数据在数码管上显示出来
  132. ****************************************************************************/                     
  133. void ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
  134. {
  135.            uchar segCount;
  136.         for(segCount=0;segCount<segNumber;segCount++)
  137.         {
  138.            if(segCodeMod&0x01)            /*1代表此处显示任意字符 */
  139.            {
  140.              ledWrite(segCode[segCount],segCount+1,CHARACTER);
  141.            }
  142.            else
  143.            {
  144.              ledWrite(segCode[segCount],segCount+1,DIGITAL);
  145.            }
  146.            segCodeMod=segCodeMod>>1;
  147.         }
  148. }
复制代码

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

Powered by 单片机教程网

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