数码管 键盘 十进制计数

数字显示00~59按钮1每次按下显示器值加一,按钮2每次按下显示器值减一,按钮3功能零,按钮4启动或停止计时器0

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit key1=P3^4;

sbit key2=P3^5;

sbit key3=P3^6;

sbit key4=P3^7;

sbit dula=P2^6;

sbit wela=P2^7;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71

};

void delayms(uint);

uchar numt0,num;

void display(uchar numdis)

{

uchar shi,ge;

shi=numdis/10;

ge=numdis%10;

dula=1;

P0=table[shi];

dula=0;

P0=0xff;

wela=1;

P0=0xfe;

wela=0;

delayms(5);

dula=1;

P0=table[ge];

dula=0;

P0=0xff;

wela=1;

P0=0xfd;

wela=0;

delayms(5);

}

void delayms(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void init()

{

TMOD=0x01;

TH0=(65535-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ET0=1;

}

void keyscan()

{

if(key1==0)

{

delayms(10);

if(key1==0)

{

num++;

if(num==60)

num=0;

while(!key1);

}

}

if(key2==0)

{

delayms(10);

if(key2==0)

{

if(num==0)

num=60;

num--;

while(!key2);

}

}

if(key3==0)

{

delayms(10);

if(key3==0)

{

num=0;

while(!key3);

}

}

if(key4==0)

{

delayms(10);

if(key4==0)

{

while(!key4);

TR0=~TR0;

}

}

}

void main()

{

init();

while(1)

{

keyscan();

display(num);

}

}

void T0_timer() interrupt 1

{

TH0=(65536-45872)/256;

//重装初值

TL0=(65536-45872)%256;

numt0++;

if(numt0==20)

{

numt0=0;

num++;

if(num==60)

num=0;

}

}

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-10-06 13:54:15

数码管 键盘 十进制计数的相关文章

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

瞎写着玩玩... /******************************************************************************* * 实 验 名 : 数码管+独立键盘实验 * 使用的IO : 数码管使用P0 独立键盘开关K1使用P3.1 * 实验效果 : 按开关K1使数码管从左侧由数字1亮至右侧8 * 注 意 : *******************************************************************

矩阵键盘 数码管

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

单片机入门-矩阵键盘控制数码管显示

任务简述:通过按下4X4矩阵键盘实现数码管对应显示数字 实现方式:通过行列分接法,可以节省使用单片机的I/O口,扫描矩阵键盘是否有按下,判断P2端口得到的值. protues 硬件系统 单片机晶振复位电路: 锁存器.上拉电阻: 4x4矩阵键盘: 代码实现: void key44scan(void)//键盘扫描函数 { uint t; P2=0xfe; t=P2; t=t&0xf0; if(t!=0xf0) { delay(); t=P2; switch(t) { case 0xee:keynum

单片机 &amp; 4&#215;4矩阵键盘 &amp; 4位串行595数码管显示

1 #include ? <reg52.h> 2 #define uchar unsigned char 3 #define uint unsigned int 4 //Led数码管数 5 sbit DIO = P2^0;//串行数据输入 6 sbit LRCLK = P2^1;//时钟脉冲信号——上升沿有效 7 sbit LSCLK = P2^2;//打入信号————上升沿有效 8 unsigned char code LED_0F[] = 9 {// 0 1 2 34 5 6 78 9 A

51单片机的数码管和矩阵键盘

使用4*4的矩阵键盘和一个数码管 在4*4的矩阵键盘上编码0-F的字符,和一个数码管显示每个键盘上输入的字符. //4*4键盘检测程序,按下键后相应的代码显示在数码管上 #include<reg51.h> typedef unsigned char UINT8; UINT8 i=100; UINT8 j,k,temp,key; void delay(unsigned char i) { for(j=i;j>0;j--) for(k=125;k>0;k--); } UINT8 cod

单片机4*4按键数码管显示0-9

#include<reg51.h> #define KEY P1 //键盘 #define SEG P0 //数码管 sbit COM=P2^0; // 数码管com sbit OC = P2^1;//573锁存器 char code TAB[]={//0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x84,0x84,0xbf,0x7f};//共阳极 0x3f,0x06,0x5b,0x4f,0x66,

C++实现键盘记录器v1.0

首先,我是也是借鉴别人的源码来学习的.因为如果还是按照从头开始看VC++来做的话肯定是来不及的,那我就直接去分析看懂别的人的代码,从中学习并且自己再重新实现一遍,再做些改进. 先来介绍一下所用到的API: 1.fstream这是一个C++处理文件的一个类,里面有很多关于文件处理的函数.定义这个对象就能够使用其中很多的成员方法. 2.GetAsyncKeyState: 函数GetAsyncKeyState确定在调用它时某个按键处于弹起还是按下的,以及此按键是否在上一次调用GetAsyncKeySt

单片机: 简易计算器的实现(键盘)

利用矩阵键盘实现一个简易的计算器. 为了简化问题,我们假设只支持小于100的非负整数之间的加.减.乘的运算,并且支持连续运算(结果的数值可以再进行运算). 本程序中C为加号,D为减号,E为乘号,F为等于号. 代码中有详细的注释. /* 注:本程序 C 为+, D 为- E为* F 为=号,支持非负整数连续运算. 输入的数值小于100,运算结果不超过1000. by Tach ------------------------------------------------*/ #include<r

51单片机第四弹---矩阵键盘

原理图: 原理: 和独立键盘相似 /******************************************************************************* * 实 验 名 : 矩阵键盘实验 * 使用的IO : 数码管使用P0 矩阵键盘使用P3 * 实验效果 : 显示独立键盘的按键值 * 注 意 : *******************************************************************************/