基于51单片机的电子秒表设计

本文介绍了一个基于51单片机的电子秒表设计,能够记录十组数据,具备删除、查阅功能,计时精度达到0.01秒,并通过LCD1602进行数据显示。程序代码包括主程序和LCD驱动,实现了开始、计数、停止、上下查阅和删除数据等操作。虽然未使用24C02,但实际验证已通过。
摘要由CSDN通过智能技术生成

设计要求:

最多可记录十组数据

可删除其中多组数据

可上下查阅所记录的数据

数据通过lcd1602显示

计时精度到0.01s

由于并没有使用24c02,导致程序去数据较大,仿真可能不行。实际验证通过

程序界面如图:


仿真界面如图:


   
  如果编译出错,将keil按如图参数设置:



以下为程序代码:

包括两个文件,主程序里面是:

#include<1602.h>
#include<reg52.h>




#ifndef uchar
#define uchar unsigned char
#endif


#ifndef uint 
#define uint unsigned int
#endif


/*按键定义*/
/*开始键,计数键,停止计数键或者清零键,上下查阅键,删除数据键*/


sbit key_start=P1^0;
sbit key_count=P1^1;
sbit key_stop=P1^2;
sbit key_up=P1^3;
sbit key_down=P1^4;




/*变量定义*/
int count=0;//计数器


uint i,j,state,k=0,countnum,m,delete;


/*设置标志位*/


char flag;
char maxflag;
char clearflag;
char turnflag; //
char upflag;  //为1时可以继续上翻
char minflag=0; //为0时可以继续下翻
char downflag; 


/*定义数组 */
 unsigned char str[] = "time:";
 unsigned char str2[]= "num:";
 unsigned char str3[]="...press start..";
 unsigned char str4[]="....counting....";
 unsigned char str5[]=".. press count..";
 unsigned char str6[]="press up or down";
 unsigned char str7[]="..overcounting..";




 int number[10]=0;
 int num2[5]=0;


void keyscan();
void init();




void main()
{
   
    InitLcd1602();
    init();
/*以下为调试程序段*/
   LcdShowStr(0,0,str3);
  //  LcdShowStr(0,1,str2);
//  LcdWriteCom(0x91);
//  LcdWriteData('0'+1);
//  LcdWriteCom(0x90);
//   LcdWriteData('0'+1);
/*以上为调试程序段*/




    while(1)
{ //LcdShowStr(0,1,str4); //测试
    keyscan();
Lcd1602_Delay1ms(50);
}


}
void init()
{
IT0=0;
EX0=0;
TMOD=0x01;
TH0=(65536-10000)/256; 
TL0=(65536-10000)%256;
EA=0; //开总中断


// key_count=0;
// key_stop=0;
// key_up=0;
// key_down=0;
// key_delete=0;


flag=0; //标志位为0时代表未计时状态,为1时代表为计时状态
i=0;
maxflag=0;//定时标志位,为1时代表定时已满
clearflag=0;//清除标志位
turnflag=0;//为1时可以上下翻页显示
downflag=0;
upflag=1;
}
void keyscan()
{
if((key_start==0)&&(flag==0)) //防抖处理
{
Lcd1602_Delay1ms(10); //防抖处理
if((key_start==0)&&(flag==0))//防抖处理
{
while((!(key_start==0)&&(flag==0)));//防抖处理
InitLcd1602();
EA=1;//检测到开始按键按下后,启动定时器
ET0=1; //计时器0开启
 TR0=1; //计时器打开
flag=1;//设置标志位为计时状态
LcdShowStr(0,0,str4);
LcdShowStr(0,1,str5);
}
}
if((key_count==0)&&(flag==1)&&(maxflag==0))
{
       Lcd1602_Delay1ms(50);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值