历史上的今天
今天是:2024年09月26日(星期四)
2021年09月26日 | 基于51单片机秒表设计,独立按键实现启动、复位、暂停功能
2021-09-26 来源:eefocus
功能说明:

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit K1=P3^1; //开始
sbit K2=P3^0; //停止
sbit K3=P3^2; //使用中断 清零
//数码表
u8 code smgduan[17]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,
0x6f,0x77,0x7c,
0x39,0x5e,0x79,
0x71};
u8 ssec,sec,min; //毫秒,秒,分
u8 DisplayData[8];
void delay(u16 i)
{
while(i--);
}
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0Xd8; //给定时器赋初值,定时10ms
TL0=0Xf0;
ET0=1;//打开定时器0中断允许
//注:稍后用K2控制总中断,实现暂停功能
EA=1;//打开总中断
TR0=1;//打开定时器
}
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=1;LSB=1;LSC=1; break;//显示第7位
case(1):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(2):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(3):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(4):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(5):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(6):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(7):
LSA=0;LSB=0;LSC=0; break;//显示第0位
}
P0=DisplayData[i];//发送段码
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}
//处理时间,拆分数位
void datapros()
{
DisplayData[0]=smgduan[min/10];
DisplayData[1]=smgduan[min%10];
DisplayData[2]=0x40;
DisplayData[3]=smgduan[sec/10];
DisplayData[4]=smgduan[sec%10];
DisplayData[5]=0x40;
DisplayData[6]=smgduan[ssec/10];
DisplayData[7]=smgduan[ssec%10];
}
//设置外部中断1 (K3)
void Int0Init()
{
IT1=1;
EX1=1;
EA=1;
}
//中断服务函数(按键)
void Int0() interrupt 0
{
//消抖
delay(1000);
if(K3==0)
{
//清零
min=0;
sec=0;
ssec=0;
}
}
//开始计时函数
void start()
{
datapros();
DigDisplay();
}
//主函数
void main()
{
Timer0Init(); //设置外部中断
Int0Init();
while(1)
{
if(K1==0)
{
delay(1000);//消抖
while(1)
{
if(K2==0)
{
EA=0; //总中断关闭
}
start(); //开始计时
//退出
if(K3==0)
{
break;
}
}
}
//跳出循环
if(K3==0)
{
break;
}
}
}
void Timer0() interrupt 1
{
TH0=0Xd8; //给定时器赋初值,定时10ms
TL0=0Xf0;
ssec++;
if(ssec>=100) //1s
{
ssec=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
}
}
}
}
上一篇:51单片机 PWM调速基本原理
史海拾趣
|
转自:www.embed-training.com/ 触摸屏篇: Samsung-2.6.28 Patch: S3C6410 Android 触摸屏校准可以在应用层用tslib来触准,生成校准文件,也可以将校准数据直接写到内核触摸屏驱动里面。 下面我将XXXX6410 2.6.28的android的触摸屏patch ...… 查看全部问答> |
|
[51疑惑中]--w77e58给SBUF赋值TXD没反应,WHY? 自编测试代码如下: #include \"w77e58.h\" xdata unsigned char TxPnt; xdata unsigned char ComTxbyte[]={0x00,0x00,0xff,0xff}; xdata unsigned char aa; void Com1_INT(void) interrupt 4 { & ...… 查看全部问答> |
|
岗位描述: 1、嵌入式软件设计与开发。 2、根据项目需要进行软件技术支持。 3、嵌入式项目软件开发过程控制 任职要求: 1、熟悉linux开发环境,熟悉C/C++语言 2、具有 Linux、WinCE、VxWorks、ucos或其他至少一种嵌入式操作系统的开发、调 ...… 查看全部问答> |
|
直接存取I/O埠與記憶體(Direct access I/O and Memory) 網路上有一個工具程式名為WINIO,透過它我們可以輕易的存取記憶體與I/O埠,但是它使用了一些已經過時或未公開的函數,因為不知微軟何時會將這些函數移除,所以使用這些函數會有一定的危險性,雖然到目前32位元的Windows 7版本中還可使用。 在此, ...… 查看全部问答> |
|
电源为AC220V±5%;用有保护接地线的三眼插座,插座数与投影屏数有关,一般控制器一个,三个投影屏用一路插座; 投影系统和大屏控制器及控制PC等要求同相供电; 电源电压要稳定,可靠,特别防止断电后立即加电。因此 ...… 查看全部问答> |
|
人眼对于光的颜色及亮度的分辨率非常高,特别是对于颜色的差别和变化非常敏感。对于不同颜色波长的光人眼的敏感度是不同的。例如,对于波长是585nm光,当颜色变化大于1nm时,人眼就可以感觉到;而对于波长为650nm的红光,当颜色变化在3nm的时候,人 ...… 查看全部问答> |




