zoukankan      html  css  js  c++  java
  • 电子表设计

    • 仿真电路图
    • 秒表实现

    • #include <reg51.h>
      #include <intrins.h>
      int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
      int sec=54;
      int dis[]={5,4};
      void display();
      void renew();
      void delay(int i)
      {
      int k,j;
      for(k=0;k<i;k++)
      for(j=0;j<100;j++);
      }
      void display()
      {
      int j;
      int i,k=500;
      while(k--)
      {
      j=0x7f;
      for(i=0;i<2;i++)//内循环;位扫描;
      {
      P2=j;//01111111
      P0=seg[dis[i]];
      delay(1);//总线延长;
      j=_cror_(j,1);
      }
      }
      }
      void renew()
      {
      sec++;
      if(sec==60)
      sec=0;
      dis[0]=sec/10;
      dis[1]=sec%10;
      }
      void main() 
      {
      while(1)
      {
      display();
      renew();
      }}
      

        

    • 使用定时器实现时钟
    • /***************************************************************
      项目名称:项目2 简易电子表
      任务名称:任务3秒表
      任务描述:单片机控制8个数码管,显示日期.
      班级日期:物联网1602班,2019-04-11.
      中断系统:计算机执行程序时,遇到突发事件,自动打断当前程序,
      转而自动执行中断服务程序(标识interrupt n),执行完服务程序后,
      再自动返回被打断的程序继续执行。应激性
      中断源:能引发中断的源头。51单片机有5个中断源:0-外部中断0(P3.2)
      1-定时器T0(计数器P3.4)  2-外部中断1(P3.3) 3-定时器T1(计数器P3.5) 
      4-串行通信(P3.0和P3.1),外部中断用来管理设备,一般以故障信号作为中断信号
      定时器中断专门用于定时和提醒。
      定时器工作原理:51单片机有2个16位定时/计数器。 
         对内部机器周期(规则变化信号)计数可以确定时间--定时器
         对外部引脚信号计数不能确定时间--计数器
      用法:先初始化,启动后按照设定的信号自动加1计数,
            数到溢出(65536)时自动申请中断,提醒。
      初始化:1.通过TMOD设置工作方式,
              2.通过TH、TL填装计数初值(根据定时时间计算计数初值),
              3.打开中断允许。ET和EA(enable),4.启动定时器。TR
      定时器中断服务程序:1.确定时间是否达到,2.执行中断事件处理程序,
                            3.如果需要连续中断,必须重新填装初值。
      ****************************************************************/
      #include <reg51.h>
      #include <intrins.h>
      int min=0;
      int hour=0;
      int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//
      int sec=0;//计数变量
      int dis[8];//显示数组
      int num=0;//累计中断次数
      void display();
      /**************************************************************/
      void delay(int i)
      {
       int j,k;
       for(k=0;k<i;k++)
        for(j=0;j<500;j++);
      }
      /**************************************************************/
      void display()
      {
       int j;
       int i;
       j=0x7f;
       for(i=0;i<8;i++) //内循环:位扫描
       {
        P2=j;//01111111
        P0=seg[dis[i]];
        delay(1);//总线延时
        j=_cror_(j,1);
       }  
      }
      /**************************************************************/
      void t_0()interrupt 1//50毫秒进入一次
      {
       num++;
       if(num==20)//累计20次中断,1秒到了
       {
        num=0;
        sec++;
        if(sec==60)
      {
      sec=0;
      min++;
      if(min==60)
          {
      min=0;
      hour++;
          if(hour==24)
          {
              hour=0;
          }
          }
          
      }
      dis[0]=hour/10;
      dis[1]=hour%10;
      dis[2]=10;
      dis[3]=min/10;
      dis[4]=min%10;
      dis[5]=10;
      dis[6]=sec/10;
      dis[7]=sec%10;
       }
       TH0=(65536-50000*11059/12000)/256;//定时50毫秒=50000微秒 19456/256
       TL0=(65536-50000*11059/12000)%256;
      }//自动返回被打断的程序
      /**************************************************************/
      void main()
      {
        TMOD=0x01;//选择T0用作16位定时器
        TH0=(65536-50000*11059/12000)/256;//定时50毫秒=50000微秒 19456/256
        TL0=(65536-50000*11059/12000)%256;//50毫秒中断1次,累计20次中断刷新1次显示值
        ET0=1;
        EA=1;//定时器t0中断允许
        TR0=1;//启动定时器t0:
              //启动后按照设定的信号自动加1计数,数到溢出(65536)时自动申请中断
        while(1)
        {
         display();//无限循环,中断系统可以打断循环,执行中断服务程序,在中断里刷新显示值   
        }            //自动找中断服务程序,找带interrupt 1标识的函数
      }

  • 相关阅读:
    linux--menuconfig
    linux--rcs
    linux--VSS/RSS/PSS/USS
    vi编辑器中发现文件中每行都有一个^M字符
    linux umount命令
    Linux mount命令
    Linux rmmod命令
    Linux lsmod命令
    Linux insmod命令
    linux--cpio文件
  • 原文地址:https://www.cnblogs.com/ssxblog/p/10957238.html
Copyright © 2011-2022 走看看