标题:
基于51单片机的独立按键控制数码管练习
[打印本页]
作者:
Allan_Lee
时间:
2018-6-27 11:02
标题:
基于51单片机的独立按键控制数码管练习
功能:四个独立按键控制数码管上的数字每秒自增1并在暂停后增减1
包含keil的项目文件和C语言代码等文件
单片机源程序如下:
#include <reg51.h>
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
unsigned int num=2017;
#define GPIO_Digitaltube P0
unsigned char DIG_CODE[17]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay1ms(void)
{
unsigned char a,b;
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
void Digital_Tube_Display(num)
{
LSA = 1;
LSB = 1;
LSC = 1;
GPIO_Digitaltube = DIG_CODE[num/1000];
delay1ms();
GPIO_Digitaltube = 0X00;
LSA = 0;
LSB = 1;
LSC = 1;
GPIO_Digitaltube = DIG_CODE[num/100%10];
delay1ms();
GPIO_Digitaltube = 0X00;
LSA = 1;
LSB = 0;
LSC = 1;
GPIO_Digitaltube = DIG_CODE[num/10%10];
delay1ms();
GPIO_Digitaltube = 0X00;
LSA = 0;
LSB = 0;
LSC = 1;
GPIO_Digitaltube = DIG_CODE[num%10];
delay1ms();
GPIO_Digitaltube = 0X00;
}
void keypros()
{
if(k1==0)
{
delay1ms();
if(k1==0)
{
EA=0;
}
while(!k1);
}
if(k2==0)
{
delay1ms();
if(k2==0)
{
EA=1;
}
while(!k2);
}
if(k3==0)
{
if(EA==0)
{
delay1ms();
if(k3==0)
{
num=++num;
}
while(!k3);
}
}
if(k4==0)
{
if(EA==0)
{
delay1ms();
if(k4==0)
{
num=--num;
}
while(!k4);
}
}
}
int main()
{
TMOD=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
EA=1;
TR1=1;
while(1)
{
keypros();
Digital_Tube_Display(num);
}
}
void timer1(void) interrupt 3
{
static unsigned char i = 0;
i++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(i==20)
{
i=0;
num=++num;
}
}
复制代码
所有资料51hei提供下载:
四个独立按键控制数码管上的数字每秒自增1并在暂停后增减一.zip
(25.26 KB, 下载次数: 29)
2018-6-27 11:01 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
无线强大
时间:
2019-4-2 16:01
非常感谢,,帮助很大
作者:
yzhbyyy
时间:
2019-4-19 12:54
非常感谢,,帮助很大
作者:
cyy~qmr
时间:
2019-8-1 16:34
感谢 帮助非常大
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1