找回密码
 立即注册

QQ登录

只需一步,快速开始

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

四块P6板组成的64X128点阵屏制作的比赛用倒计时器

[复制链接]
跳转到指定楼层
楼主
用STC15F2K60S2单片机控制,带矩阵按键,大字显示倒计时,可实际用于比赛(为21日西门子逻辑控制比赛专做), 附所有项目代码,供参考


单片机源程序如下:
  1. //LED屏控制程序   本程序驱动32*64LED彩色屏
  2. //每一个单元屏传送2路数据
  3. #include <stc15f2k60s2.H>
  4. #include "common.h"
  5. #include "delay.h"
  6. #include "arkey.h"      //行列按键
  7. #include "ledping.h"    //LED屏
  8. #include "zk.h"

  9. bit djs_F=0;              //倒计时标志
  10. bit sec_F=0;              //秒标志
  11. bit shun_F=0;             //闪烁标志
  12. u8 timecount=0;           //时间计数
  13. u8 data min,sec;

  14. u8 data djs[4];                //倒计时数组

  15. void Timer0Init(void)                //2ms@22.1184MHz晶振
  16. {
  17.         AUXR |= 0x80;                //?????1T??
  18.         TMOD &= 0xF0;                //???????
  19.         TL0 = 0x33;                //??????
  20.         TH0 = 0x53;                //??????
  21.         TF0 = 0;                //??TF0??
  22.         TR0 = 1;                //???0????
  23. }


  24. void main()
  25. {
  26.         u8 data key,status;
  27.   u16 m;
  28.   Timer0Init();        //2ms定时初始始化
  29.         SP=0xf0;
  30.   while(1)
  31.    {
  32.                 if (status==0)
  33.                 {         
  34.                  key=KeyScan();
  35.                  if (key!=0)                   //判断是否有按键
  36.                  {
  37. //                                 T_keyF=0;
  38.                                  switch(key)
  39.                {
  40.                       case 0x01: status=5;   break;
  41.                 case 0x02: status=6;   break;
  42.                 case 0x03: status=7;   break;
  43.                 case 0x04: status=8;   break;       //查询温度 DS18B20
  44.                 case 0x05: status=9;   break;
  45.                 case 0x06: status=10;   break;
  46.                 case 0x07: status=11;  break;
  47.                 case 0x08: status=12;  break;
  48.                 case 0x09: status=13;  break;       //90分钟倒计时
  49.                 case 0x0a: status=14;  break;       //倒计时开始
  50. //                case 0x0b: status=15;  break;
  51. //                case 0x0c: status=16;  break;
  52. //                case 0x0d: status=17;  break;
  53. //                case 0x0e: status=18;  break;
  54. //                case 0x0f: status=19;  break;
  55. //                case 0x10: status=20;  break;
  56.                                  default: status=0;
  57.                }
  58.                                  key=0;                        //清空按键值
  59.                          }
  60.                  if (djs_F)
  61.                  {
  62.                          djsrun();                      //显示总时间
  63.                          min=90;                        //分钟  (倒计时总时长)
  64.                          sec=0;                         //秒
  65.                  }
  66.          }
  67.                 else
  68.                         if (status==5)
  69.                         {
  70.                                 dzdisp32(dz11,dz12,0);          //显示8个汉字
  71.                                 m++;
  72.                                 if (m>=500)
  73.                                 {
  74.                                         m=0;
  75.                                         status=6;
  76.                                 }
  77.                         }
  78.                 else
  79.                         if (status==6)
  80.                         {
  81.                                 dzdisp32(dz21,dz22,0);
  82.                                 m++;
  83.                                 if (m>=500)
  84.                                 {
  85.                                         m=0;
  86.                                         status=7;
  87.                                 }
  88.                         }        
  89.                 else
  90.                         if (status==7)
  91.                         {
  92.                                 dzdisp32(dz31,dz32,1);
  93.                                 m++;
  94.                                 if (m>=200)
  95.                                 {
  96.                                         m=0;
  97.                                         status=8;
  98.                                 }
  99.                         }
  100.                 else
  101.                         if (status==8)
  102.                         {
  103.                                 dzdisp32(dz41,dz42,2);
  104.                                 m++;
  105.                                 if (m>=200)
  106.                                 {
  107.                                         m=0;
  108.                                         status=9;
  109.                                 }
  110.                         }
  111.                 else
  112.                         if (status==9)
  113.                         {
  114.                                 dzdisp32(dz51,dz52,1);
  115.                                 m++;
  116.                                 if (m>=200)
  117.                                 {
  118.                                         m=0;
  119.                                         status=5;
  120.                                 }
  121.                         }        
  122.                         
  123.                 else
  124.                         if (status==13)               //90分钟倒计时
  125.                         {
  126.                                   djs_F=1;                  //倒计时功能设置
  127.                                   xsinit();                 //显示内容初始化
  128.                                         status=0;
  129.                         }
  130.                 else
  131.                         if (status==14)               //90分钟倒计时开始
  132.                         {
  133.                                  ET0=1;
  134.                                  EA=1;
  135.                                  status=15;
  136.                         }
  137.                 else
  138.                         if (status==15)               //倒计时
  139.                         {
  140.                                  if (sec_F)                 //秒标志
  141.                                  {
  142.                                          sec_F=0;                 //清除秒标志
  143.                                          if (sec==0)
  144.                                          {
  145.                                                  if(min!=0)
  146.                                                  {
  147.                                                   sec=59;
  148.                                                   min--;
  149.                                                  }
  150.                                                  if ((min==0)&&(sec==0))            //分钟和秒钟均走完
  151.                                                  {EA=0;ET0=0;}
  152.                                          }
  153.                                          else
  154.                                     sec--;
  155.                                          djs[0]=min/10;
  156.                                          djs[1]=min%10;
  157.                                          djs[2]=sec/10;
  158.                                          djs[3]=sec%10;
  159. //                                         xsgx1();                  //更新显示缓冲区  1个缓冲区
  160.                                          xsgx2();                    //更新显示缓冲区  2个缓冲区
  161.                                  }
  162.        djsrun();                     //倒计时运行        
  163.      }                                 
  164.          }
  165. }


  166. void time0() interrupt 1
  167. {
  168.         timecount++;
  169.         if (timecount==250)               //500ms
  170.         {
  171.                 timecount=0;
  172.                 shun_F=~shun_F;                 //闪烁标志求反
  173.                 if (!shun_F)
  174.                 {
  175.                         sec_F=1;                      //产生1秒信号
  176.                 }
  177.         }
  178. }
复制代码

所有资料51hei提供下载:
64X128比赛用倒计时器.rar (133.91 KB, 下载次数: 33)

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

使用道具 举报

沙发
ID:161164 发表于 2021-7-18 23:52 | 只看该作者
有问题?
没有问题就是错区了
回复

使用道具 举报

板凳
ID:123289 发表于 2021-7-19 13:34 | 只看该作者
看图就觉得比较异怪:
就不能把【数字】做窄一点,将【:】号插在中间吗?
回复

使用道具 举报

地板
ID:235200 发表于 2021-7-20 22:30 | 只看该作者
yzwzfyz 发表于 2021-7-19 13:34
看图就觉得比较异怪:
就不能把【数字】做窄一点,将【:】号插在中间吗?

时间紧,就没有去调整了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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