代码:

#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int  u16;

/********端口定义*********/
#define DATA P0
sbit seg_sel = P1^4;
sbit bit_sel = P1^5;
sbit start = P3^2;
sbit store = P3^3;
sbit diskey = P3^4;
sbit reset = P3^5;
sbit led = P1^0;
/********变量定义*********/
u16 tem_ms;
u8    n_ten_ms,n_sec,n_min;
u8    run_flag;//当run_flag为1,代表开始计数
u8  temp_buf[5][3];
u8  arr_pt;
u8 code seg_tab[]={
              0xc0,0xf9,0xa4,0xb0,
              0x99,0x92,0x82,0xf8,
              0x80,0x90,0x88,0x83,
              0xc6,0xa1,0x86,0x8e
             };
u8 code bit_tab[]={
              0x10,0x20,0x40,0x80,
              0x01,0x02,0x04,0x08
             };
void delay(unsigned int y)
{
    unsigned int x,z;
    for(x=y; x>0; x--)
        for(z=110; z>0; z--);
}
void display_led(u8 which_bit, u8 which_number)
{
    bit_sel = 1;//Q[7..0]=D[7..0]
    DATA = bit_tab[which_bit];
    bit_sel = 0;//BIT[7..0]=0x80
    seg_sel = 1;//Q[7..0]=D[7..0]
    DATA = seg_tab[which_number];
    seg_sel = 0;
}
void display(u8 which_bit, u8 which_number)
{
    u8 x,y;
    x = which_number/10;//分离十位
    y = which_number%10;//分离个位
    if (which_bit == 1)
    {
        display_led(1, x);
        delay(2);
        display_led(0, y);    
        delay(2);
    }
    if (which_bit == 2)
    {
        display_led(4, x);
        delay(2);
        display_led(3, y);    
        delay(2);
    }
    if (which_bit == 3)
    {
        display_led(7, x);
        delay(2);
        display_led(6, y);    
        delay(2);
    }
}
void reflash (void)
{
    display(1, n_ten_ms);    
    display(2, n_sec);    
    display(3, n_min);    
}
void main (void)
{
    TMOD = 0x01;//设置定时/计数器T0
    TH0 = (65535-10000) / 256;
    TL0 = (65535-10000) % 256;
    EA = 1;//开放总中断
    ET0 = 1;//开放定时器0的溢出中断
    //TR0 = 1;
    while (1)
    {
        if (start == 0)
        {
            delay(5);
            if (start == 0)
            {
                run_flag = ~run_flag;
            } while(!start);
        }

        if (run_flag)
        {
            TR0 = 1; //开始计数
        }    
        else if (!run_flag)
        {
            TR0 = 0;
            if (diskey == 0)
            {
                delay (5);
                if (diskey == 0)
                {
                    arr_pt --;
                    n_ten_ms = temp_buf[arr_pt][0];
                    n_sec = temp_buf[arr_pt][1];
                    n_min = temp_buf[arr_pt][2];                    
                } while (!diskey);
            }
        }

        if (reset == 0)
        {
            delay(5);
            if (reset == 0)
            {
                n_ten_ms = 0;
                n_sec = 0;
                n_min = 0;    
            } while(!reset);
        }
        if (store == 0)
        {
            delay(5);
            if (store == 0)
            {
                if ((arr_pt >=0) && (arr_pt< 5))
                {
                    temp_buf[arr_pt][0] = n_ten_ms;
                    temp_buf[arr_pt][1] = n_sec;
                    temp_buf[arr_pt][2] = n_min;
                    arr_pt++;
                }
            } while(!store);
        }
        reflash();
    }
}
void t0_server(void) interrupt 1
{
    TH0 = (65535-10000) / 256;
    TL0 = (65535-10000) % 256;
    n_ten_ms++;
    if (n_ten_ms >= 100)
    {
        n_ten_ms = 0;
        n_sec++;
        if (n_sec >= 60)
        {
            n_sec = 0;
            n_min++;
            if (n_min >= 60)
                n_min = 0;
        }
    }
}
电路图:

实验效果:

DIY(码表)制作实验的更多相关文章

  1. 极客DIY:制作一个可以面部、自主规划路径及语音识别的无人机

    引言 现在大部分无人机厂商都会为第三方开发者提供无人机API接口,让他们更容易地开发无人机飞行控制应用程序,让无人机想怎么玩就怎么玩.有的API接口可以帮助开发者开发基于Web版的APP.手机APP甚 ...

  2. 【美食技术】家庭自制DIY鸡蛋饼和疙瘩汤早餐视频教程

    鸡蛋饼制作方法 食材准备面粉 150g鸡蛋饼  鸡蛋饼鸡蛋 2个盐 适量水 适量(约300ml)油 20g荵花适量也可根据自己喜好准备一些调味料. 做法 鸡蛋饼是一种家常点心,做法很多,这里提供3种. ...

  3. 成都国嵌-嵌入式linux必修实验手册…

    emouse收集整理,转载请注明: emouse的技术专栏 博客园:http://www.cnblogs.com/emouse/ CSDN:http://blog.csdn.net/haozi_198 ...

  4. 【STM32H7教程】第53章 STM32H7的LTDC应用之汉字小字库和全字库制作

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第53章       STM32H7的LTDC应用之汉字小字库 ...

  5. KVM之Live Migration

    1.安装KVM必要的软件包 #sudo apt-get install qemu-kvm bridge-utilus 2.制作虚拟机映像ubuntu-12.04.qcow2 $qemu-img cre ...

  6. 第十三周博客作业 <西北师范大学| 周安伟>

    第十三周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 本周点评作业数量无 本周点评困难的博客作业无 本周工作情况制作实验七 团队作业3的千帆图和成绩排名 ...

  7. DIY党的福利!鹅厂程序员教你200元以内制作专属分体键盘

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由VellHe发表于云+社区专栏 前言 作为一名程序员,键盘在手,天下我有啊,不整把高大上的键盘怎么提升B格.之前一直想买个机械键盘,听 ...

  8. 世界超强完美DIY 电子奇才五年全手工制作CPU

    世界超强完美DIY 电子奇才五年全手工制作CPU 2015-07-08 极客范 (点击上方公众号,可快速关注我们) 在如今越来越靠程序化.流水线作业来完成生产的制造业中,想找一件手工打造的产品,真是越 ...

  9. TPYBoard v102 DIY照相机(视频和制作流程)

    前段时间的帖子,利用TPYBoard v102做的DIY照相机,周末实物终于做出来了,加了两个按键模块和一个5110,做的有点糙啊----望大家勿怪,哈哈哈.拍出来图片还算清晰,串口摄像头模块用的30 ...

随机推荐

  1. viso图插入Word中大片空白解决办法

    按住CTRL-->将鼠标指向绘图页边缘-->指针变为移动符号(双向箭头)-->按下左键修改绘图页大小.

  2. C++的异常处理之一:throw是个一无是处的东西

    看这篇文章学习C++异常处理的基础知识.看完后,还不过瘾,为什么大家在C++代码中都不用Exception?为什么C++11会引入一些变化? 为什么C++ exception handling需要un ...

  3. 使用Servlet实现下载文件的功能

    在前台有一个下载链接,比如 <a href="DownLoadServlet">下载</a> <br/> 使用Servlet实现下载: impo ...

  4. Eclipse导入 appcompat,design兼容包

    从Android studio推出1.0正式版后,就一直在as上开发项目,但是最近要测试一个项目,是eclipse结构,导入as后,是各种报错信息,决定改成eclipse. 其中项目中用到了ppcom ...

  5. U盘装系统详细教程

    相信有的朋友去电脑城组装电脑的时候,会看见装机人员安装系统不再需要光驱,而插入U盘安装系统,U盘安装系统方便了许多,电脑光驱容易坏,使用寿命短,一般老电脑的光驱都不怎么好使,而U盘就不需要光驱就能安装 ...

  6. Node.js的net模块

    net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法 创建TCP服务器 net.createServer方法 创建客户端去连接服务器 net.connect方法 简 ...

  7. c# 读取嵌入式文件

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflect ...

  8. Python字符串基础一

    下一篇:Python 序列通用操作介绍 写在前面 下学期开始上计算机网络的课程,现在已经在看相关书籍,希望结合python写出一个网络爬虫程序.利用学习C++后的空余时间来看看Python并在这里总结 ...

  9. 【bzoj2245】 SDOI2011—工作安排

    http://www.lydsy.com/JudgeOnline/problem.php?id=2245 (题目链接) 题意 n个产品,每个需要造C[i]件:m个员工,每个员工可以制造一些产品:每个员 ...

  10. 【codevs1033】 蚯蚓的游戏问题

    http://codevs.cn/problem/1033/ (题目链接) 题意 给出一个梯形的数列,每一个数可以向它左下方和右下方的数走.求从第一行走到最后一行的不重叠的K条路径,使得经过的数的和最 ...