请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 1906|回复: 0

请问怎么改我这个程序可以让选中的时间闪烁,在线等,急!!!

 关闭 [复制链接]

1

主题

1

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2019-6-21 10:49:07 | 显示全部楼层 |阅读模式
  1.         #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4.   u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00,0x80 };//数码管显示0-9和-的断码
  5.   /*定义全局变量*/
  6.   unsigned int counter;          //定义计数数据
  7.   unsigned char mode;                //定义模式
  8.   unsigned char second=0,minute=0;hour=12;//定义秒分时的初始值
  9.   unsigned char ADD_bit=0,DEC_bit=0,flag=0;//加标志位和减标志位赋初值
  10.   sbit LSA=P2^2;
  11. sbit LSB=P2^3;
  12. sbit LSC=P2^4;
  13.    

  14.   /*定义按键*/
  15.   sbit k1=P3^1;                      //按键P3^1调节模式变化
  16.   sbit ADD=P3^0;                    //按键P3^0实现加一
  17.   sbit DEC=P3^2;                    //按键P3^2实现减一
  18.   sbit k4=P3^3;                                          // 按键P3^3调闹钟        暂时不会

  19.           
  20.           /*******************************************************************************
  21. * 函 数 名         : delay
  22. * 函数功能                   : 延时函数,i=1时,大约延时10us
  23. *******************************************************************************/
  24.   void delay(u16 i)
  25.     {
  26.       while(i--);
  27.                 }                          
  28.                



  29.            void Digdisplay()
  30. {               
  31. LSA=1;LSB=1;LSC=1;                                          //7
  32. P0=smgduan[hour/10];delay(10);P0=smgduan[11];//间隔一段时间扫描,消隐                  
  33. LSA=0;LSB=1;LSC=1;                                          //6
  34. P0=smgduan[hour%10];delay(10);P0=smgduan[11];

  35. LSA=0;LSB=0;LSC=1;                                          //4
  36. P0=smgduan[minute/10];delay(10);P0=smgduan[11];          
  37. LSA=1;LSB=1;LSC=0;                                          //3
  38. P0=smgduan[minute%10];delay(10);P0=smgduan[11];                
  39.         if(counter>0&&counter<49)
  40.                 {        LSA=1;LSB=1;LSC=0;        P0=0x80;delay(10);
  41.                
  42.                         }       
  43.                 else                                         

  44.                 {LSA=1;LSB=1;LSC=0;        P0=0x80;}


  45. LSA=1;LSB=0;LSC=0;                                          //1
  46. P0=smgduan[second/10]+0x80;delay(10);P0=smgduan[11];
  47. LSA=0;LSB=0;LSC=0;                                          //0
  48. P0=smgduan[second%10];delay(10);P0=smgduan[11];

  49.   LSA=0;LSB=1;LSC=0;           //2
  50. P0=smgduan[10];delay(1);P0=smgduan[11];
  51. LSA=1;LSB=0;LSC=1;                                          //5
  52. P0=smgduan[10];delay(1);P0=smgduan[11];
  53. }


  54.   



  55. /*按键扫描*/
  56. void Buttonscan()                 
  57. {
  58.    /*通过标志位来控制模式*/
  59.    if(k1==0)  //控制模式键 按下
  60.    {  
  61.    flag=1;                         //确定按键按下
  62.    }
  63.    if((k1)&&(flag))
  64.    {
  65.    flag=0;
  66.    mode++;
  67.    if(mode==4)
  68.    mode=0;
  69.    }


  70.    if(mode==1)         //加减秒
  71.    {

  72.    /*加按键*/
  73.    if(ADD==0)  //加键按下
  74.    {       
  75.    ADD_bit=1;
  76.    }
  77.    if((ADD)&&(ADD_bit))
  78.    {
  79.    ADD_bit=0;
  80.    second++;
  81.    if(second==60)
  82.    second=0;
  83.    }
  84.    
  85.    /*减按键*/
  86.    if(DEC==0)
  87.    {
  88.    DEC_bit=1; //按下按键
  89.    }
  90.    if((DEC)&&(DEC_bit==1))
  91.    {
  92.    DEC_bit=0;
  93.    if(second==0)
  94.    second=59;
  95.    second--;
  96.    }
  97.    }
  98.    
  99.       
  100.    


  101.    if(mode==2) //加减分
  102.    {
  103.    if(ADD==0)
  104.    {
  105.      
  106.    ADD_bit=1;
  107.    }
  108.    if((ADD)&&(ADD_bit))
  109.    {
  110.    ADD_bit=0;
  111.    minute++;
  112.    if(minute==60)
  113.         minute=0;
  114.         }

  115.         if(DEC==0)
  116.         {
  117.         DEC_bit=1;
  118.         }
  119.         if((DEC)&&(DEC_bit==1))
  120.         {
  121.         DEC_bit=0;
  122.         if(minute==0)
  123.         minute=60;
  124.         minute--;
  125.         }
  126.         }
  127.        
  128.        
  129.          if(mode==3)   //加减时
  130.   {
  131.    if(ADD==0)
  132.    {
  133.    ADD_bit=1;
  134.    }
  135.    if((ADD)&&(ADD_bit))
  136.    {
  137.    ADD_bit=0;
  138.    hour++;
  139.    if(hour==24)
  140.         hour=0;
  141.         }

  142.         if(DEC==0)
  143.         {
  144.         DEC_bit=1;
  145.         }
  146.         if((DEC)&&(DEC_bit==1))
  147.         {
  148.         DEC_bit=0;
  149.         if(hour==0)
  150.         hour=24;
  151.      hour--;
  152.         }
  153.         }
  154.          }
  155.        

  156.         /*初始化*/
  157.         void time0Init()
  158.         {
  159.         TMOD=0x01; //设置定时器模式一
  160.         TH0=0xd8;//高八位赋初值
  161.         TL0=0xf0;//低八位赋初值
  162.         TR0=1;//启动定时器0计数
  163.         ET0=1;//使能定时器中断
  164.         EA=1;//使能总中断
  165.         }
  166. /*主函数*/

  167.    void main()
  168.   {          
  169.      time0Init();  //初始化函数
  170.           
  171.   while(1)
  172.   {         

  173.   Digdisplay();         //显示函数   
  174.   Buttonscan();                 //按键

  175.   }

  176.   }


  177.          /*中断*/
  178.          void time0() interrupt 1
  179. {
  180.           TH0=0xd8;//高八位赋初值
  181.       TL0=0xf0;//低八位赋初值
  182.           counter++;
  183.            if(counter==100)
  184.            {
  185.                 counter=0;
  186.                 second++;//秒加1         
  187.                 if(second==60)
  188.                  {
  189.                  second=0;
  190.                  minute++;//分加1
  191.                   if(minute==60)
  192.                  {
  193.                  minute=0;
  194.                  hour++;//时加1
  195.                   if(hour==24)
  196.                      hour=0;
  197.                  }
  198.                  }
  199.                  }
  200.          }
复制代码
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 14:27 , Processed in 0.077783 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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