DIY(码表)制作实验
代码:
#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(码表)制作实验的更多相关文章
- 极客DIY:制作一个可以面部、自主规划路径及语音识别的无人机
引言 现在大部分无人机厂商都会为第三方开发者提供无人机API接口,让他们更容易地开发无人机飞行控制应用程序,让无人机想怎么玩就怎么玩.有的API接口可以帮助开发者开发基于Web版的APP.手机APP甚 ...
- 【美食技术】家庭自制DIY鸡蛋饼和疙瘩汤早餐视频教程
鸡蛋饼制作方法 食材准备面粉 150g鸡蛋饼 鸡蛋饼鸡蛋 2个盐 适量水 适量(约300ml)油 20g荵花适量也可根据自己喜好准备一些调味料. 做法 鸡蛋饼是一种家常点心,做法很多,这里提供3种. ...
- 成都国嵌-嵌入式linux必修实验手册…
emouse收集整理,转载请注明: emouse的技术专栏 博客园:http://www.cnblogs.com/emouse/ CSDN:http://blog.csdn.net/haozi_198 ...
- 【STM32H7教程】第53章 STM32H7的LTDC应用之汉字小字库和全字库制作
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第53章 STM32H7的LTDC应用之汉字小字库 ...
- KVM之Live Migration
1.安装KVM必要的软件包 #sudo apt-get install qemu-kvm bridge-utilus 2.制作虚拟机映像ubuntu-12.04.qcow2 $qemu-img cre ...
- 第十三周博客作业 <西北师范大学| 周安伟>
第十三周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 本周点评作业数量无 本周点评困难的博客作业无 本周工作情况制作实验七 团队作业3的千帆图和成绩排名 ...
- DIY党的福利!鹅厂程序员教你200元以内制作专属分体键盘
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由VellHe发表于云+社区专栏 前言 作为一名程序员,键盘在手,天下我有啊,不整把高大上的键盘怎么提升B格.之前一直想买个机械键盘,听 ...
- 世界超强完美DIY 电子奇才五年全手工制作CPU
世界超强完美DIY 电子奇才五年全手工制作CPU 2015-07-08 极客范 (点击上方公众号,可快速关注我们) 在如今越来越靠程序化.流水线作业来完成生产的制造业中,想找一件手工打造的产品,真是越 ...
- TPYBoard v102 DIY照相机(视频和制作流程)
前段时间的帖子,利用TPYBoard v102做的DIY照相机,周末实物终于做出来了,加了两个按键模块和一个5110,做的有点糙啊----望大家勿怪,哈哈哈.拍出来图片还算清晰,串口摄像头模块用的30 ...
随机推荐
- [AJAX系列]XMLHttpResponse对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- display:block、display:inline与displayinline:block的概念和区别
总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...
- SharedPreference写入-读取
SharedPreference文件保存格式为xml文件. 一.SharedPreference写入 SharedPreferences sharedPreferences = context.get ...
- Java--剑指offer(8)
36.输入两个链表,找出它们的第一个公共结点. 解题思路:这里主要是把两个链表的节点都放入两个栈中,这样就可以按照出栈的方式来比较节点,因为单链表只要是有相同的节点,那么之后的节点也都是一样的,所以如 ...
- Canny Edge Detector
Canny边缘检测算法有自己的理论和经验性的推导, 没仔细看/没看明白. 它的步骤如下: 对原图的灰度图进行高斯滤波 求一阶导数, 得到每个像素点的梯度强度和方向. 非最大抑制. 对每个edge ca ...
- 树分治 poj 1741
n k n个节点的一棵树 k是距离 求树上有几对点距离<=k; #include<stdio.h> #include<string.h> #include<algo ...
- Linux的vim三种模式及命令
一般模式:在Linux终端中输入"vim 文件名"就进入了一般模式,但不能输入文字.编辑模式:在一般模式下按i就会进入编辑模式,此时就可以写程式,按Esc可回到一般模式. 命令模式 ...
- [学习笔记]tarjan求割边
上午打模拟赛的时候想出了第三题题解,可是我不会求割边只能暴力判割边了QAQ 所以,本文介绍求割边(又称桥). 的定义同求有向图强连通分量. 枚举当前点的所有邻接点: 1.如果某个邻接点未被访问过,则访 ...
- js-JavaScript高级程序设计学习笔记2
第四章 变量.作用域和内存问题 1.ES变量包含两种不同数据类型的值--基本类型值(5种基本数据类型)和引用类型值(保存在内存中的对象,所有引用类型值都是Object的实例) 2.只能给引用类型值动态 ...
- 【poj1984】 Navigation Nightmare
http://poj.org/problem?id=1984 (题目链接) 题意 给出一棵树,这棵树是以平面直角坐标系为基准建立的,也就是每个节点最多只有上下左右4条边.现在动态建树,同时询问两点间的 ...