📄 可预置计数器.c
字号:
/*
标题:计数器程式 08-11-29
版本:1.0
Target:89c52
程序描述:
共阳七段显示器。*/
/* ***************************************************** */
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define nop _nop_()
#define disdata P0
sbit a=P3^2;//计数输入
sbit START=P3^7;//启动按钮
sbit SET=P3^6;//设定按钮
sbit UP=P3^0;//加按钮
sbit DOWN=P3^1;//减按钮
sbit OUT=P3^4;//输出
bit FLAG0=0;//设置指标
uint pv=0;//计数暂存
uint sv=0;//设定值暂存
uint tmp;//显示暂存
uint e;//加速
uchar d;//闪烁
uchar f;//延时
uchar code dis_7[11]=
{
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x00
};
/* "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" */
void delay (unsigned int value) /*延时副程式*/
{
while (value!=0) value--; /*10US 延时*/
}
void delay1(uint k) //延时
{
uint i,j;
for(i=0;i<k;i++)
for(j=0;j<1000;j++);
}
void js();//计数副程式
void display ();//显示副程式
void scan();//键盘扫描副程式
main()
{
EA=1;
ET1=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
TMOD=0x10;
TH1=(5536-5000)/256;
TL1=(6536-5000)%256;
TR1=1;
P3=0xff;
while(1)
{
display ();
scan();
if(FLAG0==0&&OUT==1&&START==0)
{
pv=0;
OUT=0;
}
if(pv>=sv)
{
OUT=1;
}
}
}
/*********************************************/
void display ()
{
//uint tmp;
if(FLAG0==0)
tmp=pv;
else
{
tmp=sv;
}
P2=0xff;
disdata=dis_7[tmp%10];
P2=0x06;
delay (100);
if (tmp/100==0&&tmp%100/10==0)
disdata=0x7f;
else disdata=dis_7[tmp%100/10];
P2=0x05;
delay (100);
if (tmp/100==0)
disdata=0x7f;
else disdata=dis_7[tmp/100];
P2=0x03;
delay (100);
P2=0xff;
if(FLAG0==1)
{
if(d>40&&UP&&DOWN)
{
d=0;
delay1(8);
}
}
}
/*********************************************/
void scan()
{
if(SET==0&&FLAG0==0&&OUT==1)
{
delay (10000);
while(SET==0);
FLAG0=1;
delay (10000);
}
if(FLAG0==1&&UP==0)
{
if(e>500&&f>1)
{
f=0;
sv++;
if(sv>999)
sv=0;
}
else
if(f>30)
{
f=0;
sv++;
if(sv>999)
sv=0;
}
}
if(FLAG0==1&&DOWN==0)
{
if(e>500&&f>1)
{
f=0;
sv--;
if(sv>999)
sv=999;
}
else
if(f>30)
{
f=0;
sv--;
if(sv>999)
sv=999;
}
}
if(SET==0&&FLAG0==1)
{
delay (10000);
while(SET==0);
FLAG0=0;
delay (10000);
}
}
/***********************************************/
void time1() interrupt 3 using 1
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
if(FLAG0==1)
{
if(d<220)
d++;
}
if(FLAG0==1&&(UP|DOWN))
if(f<220)
f++;
if(e<1000)
e++;
if(UP==1&&DOWN==1)
e=0;
}
/*********************************************/
void ext0() interrupt 0
{
pv++;
if(pv>999)
pv=0;
}
/**********************************************/
void ext1() interrupt 2
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -