2018.7.20学习日志

                                                                                         学习日志

今日学习任务

基于单片机的电子秒表设计(开始,暂停,继续,清空)

今日任务完成情况

(详细说明本日任务是否按

计划完成,开发的代码量)

按照计划和要求,完成当天的学习任务。

对代码进行进一步的修改和完善。

今日开发中出现的问题汇总

思考如何在基本代码的基础上进行举一反三以及进一步的拓展,使其能够实现更多的功能。

1、一开始的代码只能进行暂停和复位,无法手动进行开始。

2、初步修改之后,用两个按键进行控制,一个按键进行启动和暂停两项功能,另一个按键进行复位。但是控制开始和暂停的那个按键容易出现抖动现象,不等随心的控制开始和暂停。

3、进一步修改之后,可以想停就停了,但是需要一直保持按键处于按下去的状态才行。

4、为了进一步减少抖动的情况,将两个按键修改为三个按键,情况有所改善。

5、加上延时函数进行进一步消抖。

今日未解决问题

暂无。

今日开发收获

通过今天的学习,我对单片机的一些基础知识有了进一步的了解和认识。将理论知识应用于实际操作,通过实践来让自己的知识更加活起来。

其他

生活赋予我们一种巨大的和无限高贵的礼品,这就是青春:充满着力量,充满着期待志愿,充满着求知和斗争的志向,充满着希望信心和青春。

 

附:

  
//1、只能暂停和复位,无法开始
/*
#include<reg51.h>


sbit key1=P3^0;    //开始、暂停计时
sbit key2=P3^1;    //复位清零

int flag=0,display_flag=0,miao,num;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};      //不带小数点的共阴极数码管段码0-9

//延迟函数
void Delay_ms( )
{
int x=100,i;
while(x--)
{
for(i=0;i<2;i++);
}
}

void display(m,n)  //显示函数
{
if(display_flag%4==0)
{
P2=0xfe;
P1=table[m/10];
}
else if(display_flag%4==1)
{
P2=0xfd;
P1=table[m%10];
}
else if(display_flag%4==2)
{
P2=0xfb;
P1=table[n/10];
}
else if(display_flag%4==3)
{
P2=0xf7;
P1=table[n%10];
}
}


int main()
{
int miao=0,num=0;
//定时器初始化
TMOD=0X01;    // 用定时计数器0工作方式1
TH0=(65535-5000)/256;     //高8 位
TL0=(65535-5000)%256;     //低八位
EA=1;  // 打开总开关
ET0=1;      //打开定时计数器0中断
TR0=1;// 先不要启动定时器


while(1)            //进入死循环
{
if(!key1)           //开始计时,检查启动/暂停按键是否按下
{
Delay_ms( );        //延时消抖
if(!key1)            //消抖之后再次进行检测
{
TR0=!TR0;            //定时器的控制位取反
while(!key1);        //等待按键释放
}
}

if(!key2)             //复位清零,检查复位键是否按下
{
Delay_ms();             //延时消抖
if(!key2)             //消抖之后再次进行检测
{
miao=0,num=0;
while(!key2);          //等待按键释放
}
}         
if(flag==2)
{
 num++;
 if(num==100)
 {
 miao++;
 num=0;
 if(miao==100)
 {
 miao=0;
 }
 }
 flag=0;

}
 display(miao,num);
}
return 0;
}

void timer_0()   interrupt 1
{
//
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
flag++;
display_flag++;
}     */

//2、停与不停看心情
/*#include<reg51.h>


sbit key1=P3^0;    //开始、暂停计时
sbit key2=P3^1;    //复位清零

int flag=0,display_flag=0;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};      //不带小数点的共阴极数码管段码0-9

//延迟函数
void Delay_ms( )
{
int x=100,i;
while(x--)
{
for(i=0;i<5;i++);
}
}

void display(m,n)  //显示函数
{
if(display_flag%4==0)
{
P2=0xfe;
P1=table[m/10];
}
else if(display_flag%4==1)
{
P2=0xfd;
P1=table[m%10];
}
else if(display_flag%4==2)
{
P2=0xfb;
P1=table[n/10];
}
else if(display_flag%4==3)
{
P2=0xf7;
P1=table[n%10];
}
}


int main()
{
int miao=0,num=0;
//定时器初始化
TMOD=0X01;    // 用定时计数器0工作方式1
TH0=(65535-5000)/256;     //高8 位
TL0=(65535-5000)%256;     //低八位
EA=1;  // 打开总开关
ET0=1;      //打开定时计数器0中断
Delay_ms( );


while(1)            //进入死循环
{

if(flag==2)
{
 num++;
 if(num==100)
 {
 miao++;
 num=0;
 if(miao==100)
 {
 miao=0;
 }
 }
 flag=0;

}
if(key1==0)           //开始计时,检查启动/暂停按键是否按下
{
if(key1==0)    
{
TR0=1;
display(miao,num);
}
if(key1!=0)
{
TR0=TR0!;             //定时器的控制位取反
display(miao,num);
}
}


if(!key2)             //复位清零,检查复位键是否按下
{
miao=0,num=0;
TR0=0;
}     
display(miao,num);
}
return 0;
}

void timer_0()   interrupt 1
{
//
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
flag++;
display_flag++;
}     */     

//3、想停就停
/*#include<reg51.h>


sbit key1=P3^0;    //开始、暂停计时
sbit key2=P3^1;    //复位清零

int flag=0,display_flag=0;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};      //不带小数点的共阴极数码管段码0-9

//延迟函数
void Delay_ms( )
{
int x=100,i;
while(x--)
{
for(i=0;i<5;i++);
}
}

void display(m,n)  //显示函数
{
if(display_flag%4==0)
{
P2=0xfe;
P1=table[m/10];
}
else if(display_flag%4==1)
{
P2=0xfd;
P1=table[m%10];
}
else if(display_flag%4==2)
{
P2=0xfb;
P1=table[n/10];
}
else if(display_flag%4==3)
{
P2=0xf7;
P1=table[n%10];
}
}


int main()
{
int miao=0,num=0;
//定时器初始化
TMOD=0X01;    // 用定时计数器0工作方式1
TH0=(65535-5000)/256;     //高8 位
TL0=(65535-5000)%256;     //低八位
EA=1;  // 打开总开关
ET0=1;      //打开定时计数器0中断
Delay_ms( );


while(1)            //进入死循环
{

if(flag==2)
{
 num++;
 if(num==100)
 {
 miao++;
 num=0;
 if(miao==100)
 {
 miao=0;
 }
 }
 flag=0;

}
if(key1==0)           //开始计时,检查启动/暂停按键是否按下
{
if(key1==0)    
{
TR0=1;
display(miao,num);
}
if(key1!=0)
{
TR0=!TR0;             //定时器的控制位取反
display(miao,num);
}
}


if(!key2)             //复位清零,检查复位键是否按下
{
miao=0,num=0;
TR0=0;
}     
}
return 0;
}

void timer_0()   interrupt 1
{
//
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
flag++;
display_flag++;
}                    */
//4、三个按键想停就停

/*#include<reg51.h>


sbit key1=P3^0;    //开始
sbit key2=P3^1;    //暂停计时
sbit key3=P3^2; //复位清零

int flag=0,display_flag=0;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};      //不带小数点的共阴极数码管段码0-9

//延迟函数
void Delay_ms( )
{
int x=100,i;
while(x--)
{
for(i=0;i<5;i++);
}
}

void display(m,n)  //显示函数
{
if(display_flag%4==0)
{
P2=0xfe;
P1=table[m/10];
}
else if(display_flag%4==1)
{
P2=0xfd;
P1=table[m%10];
}
else if(display_flag%4==2)
{
P2=0xfb;
P1=table[n/10];
}
else if(display_flag%4==3)
{
P2=0xf7;
P1=table[n%10];
}
}


int main()
{
int miao=0,num=0;
//定时器初始化
TMOD=0X01;    // 用定时计数器0工作方式1
TH0=(65535-5000)/256;     //高8 位
TL0=(65535-5000)%256;     //低八位
EA=1;  // 打开总开关
ET0=1;      //打开定时计数器0中断
Delay_ms( );


while(1)            //进入死循环
{

if(flag==2)
{
 num++;
 if(num==100)
 {
 miao++;
 num=0;
 if(miao==100)
 {
 miao=0;
 }
 }
 flag=0;

}
if(key1==0)           //开始计时,检查启动/暂停按键是否按下
{
TR0=1;
display(miao,num);
}
if(key2==0)
{
TR0=0;             //定时器的控制位取反
display_flag++;
display(miao,num);
}


if(key3==0)             //复位清零,检查复位键是否按下
{
miao=0,num=0;
TR0=0;
}     
display(miao,num);
}
return 0;
}

void timer_0()   interrupt 1
{
//
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
flag++;
display_flag++;
}          */
        
//5、加了延时的程序
#include<reg51.h>


sbit key1=P3^0;    //开始
sbit key2=P3^1;    //暂停计时
sbit key3=P3^2; //复位清零

int flag=0,display_flag=0;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};      //不带小数点的共阴极数码管段码0-9

//延迟函数
void Delay_ms( )
{
int x=18,i;
while(x--)
{
for(i=0;i<2;i++);
}
}

void display(m,n)  //显示函数
{
if(display_flag%4==0)
{
P2=0xfe;
P1=table[m/10];
}
else if(display_flag%4==1)
{
P2=0xfd;
P1=table[m%10];
}
else if(display_flag%4==2)
{
P2=0xfb;
P1=table[n/10];
}
else if(display_flag%4==3)
{
P2=0xf7;
P1=table[n%10];
}
}


int main()
{
int miao=0,num=0;
//定时器初始化
TMOD=0X01;    // 用定时计数器0工作方式1
TH0=(65535-5000)/256;     //高8 位
TL0=(65535-5000)%256;     //低八位
EA=1;  // 打开总开关
ET0=1;      //打开定时计数器0中断

while(1)            //进入死循环
{

if(flag==2)
{
 num++;
 if(num==100)
 {
 miao++;
 num=0;
 if(miao==100)
 {
 miao=0;
 }
 }
 flag=0;

}
if(key1==0)             //开始计时,检查开始按键是否按下
{
Delay_ms( );         //加入延时函数进行消抖
if(key1==0)             //再次进行检测确认按键是否按下
{
TR0=1;                 //打开定时器
display(miao,num);     //显示计数    
}

}


if(key2==0)             //暂停计时,检查暂停按键是否按下
{
Delay_ms( );         //加入延时函数进行消抖
if(key2==0)             //再次进行检测确认按键是否按下
{
    
TR0=0;                  //关闭定时器使其暂停
display(miao,num);
display_flag++;
}
}


if(key3==0)             //复位清零,检查复位键是否按下
{
Delay_ms( );         //加入延时函数进行消抖
if(key3==0)             //再次进行检测确认按键是否按下
{
miao=0,num=0;
TR0=0;                 //关闭定时器
}
}     
display(miao,num);
}
return 0;
}

void timer_0()   interrupt 1   //中断
{
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
flag++;
display_flag++;
}           

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值