我们不仅销售产品,我们还传播知识
商品分类

51单片机时钟秒表课程设计

一、详细功能设计

1、基于51单片机倒计时秒表,最大值为9999秒,计时单位为0.1秒;

2、计时的初始值为组员学号后4位,键盘启动/停止计时;

3、设计多个按键,使用键盘选择不同成员的学号作为初始值。
二、8031最小系统设计

1、最小系统设计原理图如图1.0所示:

51单片机时钟秒表课程设计

2、8031最小系统概述;

   8031最小系统包含晶振电路与复位电路。 晶振选择12MHZ晶振,晶振电容使用30pf电容瓷片电容。复位电路选择上电复位。
三、硬件设计

1、数码管电路

   在本设计中,使用7段共阴极数码管,选择数码管的型号为7SEG-MPX6-CC;

2、数码管片选电路;

   由于本设计需要显示五位数字,同时为了驱动数码管,使用了74HC154芯片。与此同时,使用74HC154芯片还可以扩展数码管显示数字的个数。
三、软件设计

1、程序流程图如图3.0所示:

51单片机时钟秒表课程设计

图3.0 程序流程图

2、程序流程说明

   数码管显示和扫描键盘子函数放在0.1秒的定时器中断里,而主函数的while(1)函数向数码管显示数据变量送数据。数码管显示函数接受键盘状态,根据状态执行开始计时、暂停、选择学号等功能。
四、调试说明

1、仿真调试如图4.0所示:

51单片机时钟秒表课程设计

图4.0 proteus 仿真效果

2、按下以组员的名字命名的按键时,可以选择相应同学的学号的后四位为倒计时的初始值,如不设置初始值为0336,若按下“张洪荣”按键,初始值为0337;按下“开始”按键时开始倒计时;按下“暂停”按键时,计时停止;
附录:源代码下载:

1,程序源码;

#include <string.h>

#include <stdio.h>

#include <reg51.h>

int num =03;         //我们学号的班别 03

int stu_num0 =36;        //学号后两位

int stu_num1 =37;

int stu_num2 =42;

int stu_num3 =11;

int stu_num4 =22

int num_count = 36;         //将学号吼两位选择的值赋给 num_count,初始值为36

sbit start = P1^0;        //开始按键

sbit stop  = P1^1;        //停止按键

sbit key0 = P1^2;        //选择同学

sbit key1 = P1^3;        //选择同学

sbit key2 = P1^4;         //选择同

sbit key3 = P1^5;        //选择同学

sbit key4 = P1^6;        //选择同学

sbit key5 = P1^7;                 

unsigned int T1msc;

unsigned char Ledc;

unsigned char Leds[]={8,6,0×13,5,1,2,3,4};                   

bit isStart;

int temp=9;  //0.1秒存储变量 初始值 9

code char LEDTAB[]=

{

  0x3f,0x06,0x5b,0x4f,0x66,

  0x6d,0x7d,0x07,0x7f,0x6f,

  0x00,

};

void Delayms(int ms)

{

  while(ms)

  {

    unsigned char i;

    ms–;

    for (i=0; i<240; i++);

  }

}

void display()

{

  char v,c;

  P3=0x11;

  v=Leds[Ledc];

  c=LEDTAB[v & 0x0f];

  if (v&0x10)   c|=0x80;           

  P2=c;

  P3=Ledc;

  Ledc++;

  if (Ledc>=8) Ledc=0;

}

void readkey()                  //读按键

{

       if(start==0)         isStart = 1;        //真为开始

           if(stop==0)         isStart = 0;        //假为停止

           if(key0 == 0)   num_count = stu_num0; //选择曾路荣

           if(key1 == 0)   num_count = stu_num1;//选择张洪荣

           if(key2 == 0)   num_count = stu_num2;

           if(key3 == 0)   num_count = stu_num3;

           if(key4 == 0)   num_count = stu_num4;

           if(key5 == 0)   num_count = stu_num5;

}

void t0int() interrupt 1 //1ms定时器中断服务函数

{

  TH0=(-1000)>>8;

  TL0=-1000;

  display();

  readkey();

  T1msc++;

  if (isStart)          //开始倒计时

  {

     if ((T1msc%100)==0) //满 0.1秒

         {

                   temp–;

                 if(temp==-1)

                 {

                   num_count–;

                   temp = 10;         //0.1秒恢复9

                 }

         }          

         if(num_count == -1)   //

         {

           num_count  = 99;

           num–;

           if(num == -1) num = 99;

         }

   }

  if (T1msc>=1000)

  {

      T1msc=0;

  }

}

void NumToLeds()

{

          Leds[1]=num/10%10;

          Leds[2]=num%10;

          Leds[3]=num_count/10%10;

          Leds[4]=num_count%10+0x10;

          Leds[5]=temp;         //0.1秒显示

}

void main()

{

          Delayms(10);

          TMOD=0x01;

          TR0=1;

          ET0=1;

          EA=1;

          while(1)

          {

             NumToLeds();        //送数据

          }

}

转载自:http://www.51hei.com/mcu/1694.html

发表回复

登录后才能评论
微信群
微信群
联系我们

联系我们

微信:13823392571

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息

微信客服
微信客服
分享本页
返回顶部