简单的四键控制51c语言秒表程序
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void xian();
void diao();
sbit LS138A=P2^2; //定义 138管脚
sbit LS138B=P2^3;
sbit LS138C=P2^4;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
uint Wela[8],shu1,a,flag;
uchar code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //段码控制
void delay(uint i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void main()
{
P3=0Xff;
TMOD=0x11; //设置定时器0为工作方式1
TH0=(65536-10000)/256; //初始化
TL0=(65536-10000)%256;
while(1)
{
uchar j;
IE=0X82; // IE可以寻址 先开了中断
TR0=1; //启动定时器
if(k2==0)
{
delay(5); //按下去 并且去抖
if(k2==0)
flag=1;
while(!k2);
delay(5); //松手检测 去抖
while(!k2);
}
else
if(k3==0)
{
delay(5);
if(k3==0)
flag=2;
while(!k3); //松手检测 去抖
delay(5);
while(!k3);
}
else
if(flag==1)
TR0=0;
else
if(flag==2)
{
TR0=1;
if(k1==0)
TR0=0;
else
TR0=1;
}
else
if(k1==0)
TR0=0;
else
TR0=1;
if(k4==0)
shu1=0;
Wela[0]=Disp_Tab[shu1000/1000];
Wela[1]=Disp_Tab[shu100/100];
Wela[2]=Disp_Tab[shu10/10]|0x80; //十位带小数点;
Wela[3]=Disp_Tab[shu1];
for(j=0;j<8;j++)
{
P0 = Wela[j];
switch(j)
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
}
delay(150);
}
}
}
void time0() interrupt 1 //通过定时器不断向while里面送入新shu1的 数值
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
shu1++;
}
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void xian();
void diao();
sbit LS138A=P2^2; //定义 138管脚
sbit LS138B=P2^3;
sbit LS138C=P2^4;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
uint Wela[8],shu1,a,flag;
uchar code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //段码控制
void delay(uint i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void main()
{
P3=0Xff;
TMOD=0x11; //设置定时器0为工作方式1
TH0=(65536-10000)/256; //初始化
TL0=(65536-10000)%256;
while(1)
{
uchar j;
IE=0X82; // IE可以寻址 先开了中断
TR0=1; //启动定时器
if(k2==0)
{
delay(5); //按下去 并且去抖
if(k2==0)
flag=1;
while(!k2);
delay(5); //松手检测 去抖
while(!k2);
}
else
if(k3==0)
{
delay(5);
if(k3==0)
flag=2;
while(!k3); //松手检测 去抖
delay(5);
while(!k3);
}
else
if(flag==1)
TR0=0;
else
if(flag==2)
{
TR0=1;
if(k1==0)
TR0=0;
else
TR0=1;
}
else
if(k1==0)
TR0=0;
else
TR0=1;
if(k4==0)
shu1=0;
Wela[0]=Disp_Tab[shu1000/1000];
Wela[1]=Disp_Tab[shu100/100];
Wela[2]=Disp_Tab[shu10/10]|0x80; //十位带小数点;
Wela[3]=Disp_Tab[shu1];
for(j=0;j<8;j++)
{
P0 = Wela[j];
switch(j)
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
}
delay(150);
}
}
}
void time0() interrupt 1 //通过定时器不断向while里面送入新shu1的 数值
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
shu1++;
}
呵呵。我是新手
谢谢lz,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
好东西!谢谢!nice
