51瞎搞系列---独立键盘+数码管

瞎写着玩玩。。。

/*******************************************************************************
* 实 验 名		 : 数码管+独立键盘实验
* 使用的IO	     : 数码管使用P0 独立键盘开关K1使用P3.1
* 实验效果       : 按开关K1使数码管从左侧由数字1亮至右侧8
* 注    意		 :
*******************************************************************************/
#include <reg52.h>
#include <intrins.h>
#define GPIO_LED P2
#define GPIO_DIG P0
#define uint unsigned int
#define uchar unsigned char
sbit K1=P3^1;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值
void DIG_DISPLAY(uchar n,uchar num);
void Delay10ms();
void GO();
uint m=0,n=0,num=1;
void main()
{
	while(1)
	{
		GO();
	}
}
void Delay10ms()
{
    uchar i=38,j=130;
    while(i--)
        while(j--);
}
void DIG_DISPLAY(uchar n,uchar num)
{
	switch(n)
	{
		case 0:LSA=0;LSB=0;LSC=0;break;
		case 1:LSA=1;LSB=0;LSC=0;break;
		case 2:LSA=0;LSB=1;LSC=0;break;
		case 3:LSA=1;LSB=1;LSC=0;break;
		case 4:LSA=0;LSB=0;LSC=1;break;
		case 5:LSA=1;LSB=0;LSC=1;break;
		case 6:LSA=0;LSB=1;LSC=1;break;
		case 7:LSA=1;LSB=1;LSC=1;break;
	}
		GPIO_DIG=DIG_CODE[num];
}
void GO()
{
		DIG_DISPLAY(m,num);
		if(K1==0)
		{
			Delay10ms();
			if(K1==0)
			{
				++m;++num;
				if(m==8)m=0;
				if(num==9)num=1;
				while((n<50)&&(K1==0))
				{
					Delay10ms();
					++n;
				}
				n=0;
			}
		}
}
时间: 2024-10-11 18:20:05

51瞎搞系列---独立键盘+数码管的相关文章

51单片机第二弹---独立键盘

今天学独立键盘模块.. 原理图如下: 可以看到单片机上有4个按键,分别命名为K1,K2,K3,K4..对应的IO分别为 P1,P0,P2,P3 对应图如下.. 工作原理: 以K1为例,按下K1后,p3^1 接地(为0),反之松开手时为1. 首先检测P3^1是否为0,如果为0则要延时消抖(按下时会有一定的抖动)然后再执行命令,最后要检测是否松手,还是利用延时,没有松手就一直延时,当然也可以设置成长按一会就停止延时. 程序实现功能: 用独立键盘控制LED灯的移动. 源码: #include <reg

寒假瞎搞系列(1)

今天的任务 1.数据表的建立: --用户表:用户名    String 用户id    int 用户密码    String --记录表:日期(包含年月日时间).  date 备注(用来填写需要注意的信息)    String 类型(这个暂时可以不用考虑)        int 数额            int 2.登录界面的设计 --登录用户名的校验 --自动登录的实现 --记住密码的实现 3.预计时间 --6个小时 4.时间表 日期 开始时间 结束时间 总时间 累计 备注 2.19 13:

矩阵键盘 数码管

开始时数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0~F,6个数码管同时静态显示. 数码管和矩阵键盘 首先关闭所有的数码管的段选不让数码管显示任何数字,然后位选中所有的数码管,接下来只需要选中所有的数码管,以后的操作的只需要送段选数据就行了,接着进入while()大循环不停的扫描键盘是否有被按下 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wel

十天学会单片机Day2键盘检测(独立键盘、矩阵键盘)

1.键盘的分类 编码键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘 非编码键盘:靠软件编程来识别的称为非编码键盘.独立键盘.矩阵键盘 2.按键消抖              如图,理想波形与实现波形之间是有区别的.实际波形在按下和释放的瞬间都有抖动现象,抖动事件的长短与按键的机械特性有关,一般为5~10ms.通常我们手动按下键然后立即释放,这个动作中稳定闭合时间超过20ms.因此检测键盘是否按下时,需加上去抖动操作. 一般有两种消抖方式: 硬件消

woj 1575 - Signal generators 单调队列优化dp + 瞎搞

戳这里:1575 题意:直线上排列着N个信号发射器,每个信号发射器被激活后将会使得影响范围内的所有发射器都被激活.询问激活任意一个发射器后被激活的发射器数最大是多少. 官方题解:可能会存在环的情况,考虑按坐标排序后i < j < k,j激活了k,然后k再激活i.但是这样可以转化为直接激活k的方案.所以无影响. 于是可以用dp求解.dp[i] = max( dp[j] + 1 ), position[j] + R[i] >= position[i],用单调队列优化时间复杂度为O(n). 向

学渣乱搞系列之Tarjan模板合集

学渣乱搞系列之Tarjan模板合集 by 狂徒归来 一.求强连通子图 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #incl

HDU5532 Almost Sorted Array(最长上升子序列 or 瞎搞个做差的数组)

题目链接:点我 题意:给定一个序列,询问是否能删除一个数让它成为非递减或者非递增的序列. 比如说 删除后的序列是1 3 3 5 或者5 3 3 1 或者1 3 5 或者5 3 1 都可以.只要满足删掉某个数,构成非递减或者非递增,就输出YES,如果不能就输出NO 正解(LIS求最长上升子序列): 正着来一遍,反着来一遍 注意要用upper_bound即可: 代码: #include<bits/stdc++.h> using namespace std; int Maxlen(int a[],i

学渣乱搞系列之dp斜率优化

学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很大部分参考了大神Accept的文章,不过此神貌似早已绝迹江湖,这篇文章写得好,也写得很差,前半部分叙述得很好,可是关键,关键部分说得很乱,有些许错误,很多大神都进行了评论指出,但是大神Accept貌似没有修改的意思,故重新总结下,以便自己以后查阅和复习啊. 下面看一个例题Print Article.

【瞎折腾系列】mysql存储过程初接触

开始[瞎折腾系列],这个系列纯属瞎折腾,可能没有什么实际意义. mysql存储过程生成表: 新建一张user表,包含id, username , password , usertable字段. 然后创建存储过程: create PROCEDURE create_table() BEGIN DECLARE n int DEFAULT 0; DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET