电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 4796|回复: 13

谁有空 帮我弄弄 已经5天了(单片机)

[复制链接]
发表于 2014-1-1 12:32:07 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
本帖最后由 桥式整流 于 2014-1-2 10:34 编辑

本人在做一个秒表系统  其中有一个要求不会写
在按键2按下时暂停5秒  数码管在暂停的5秒之内一直显示暂停时的那个数,5秒之后继续计时,但得加上5秒。也就是在这里开始改,我改了好久没有成功
/*0~99秒计时器,当一秒钟到来时,就让秒计数单元加1,当秒计数达到99时,就自动返回到0,重新秒计数。
方法1:定时器中断方式*/
#include <reg51.h>
void key();
void key1();
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
                            0x82,0xf8,0x80,0x90,0x7f};   //共阳接法数码管0~9对应代码
unsigned char n,a;
unsigned char m ,t;
sbit d1=P0^7;
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^3;
void delay(unsigned int c);
void main()
          {TMOD=0x01;        //定时器0工作在工作方式1下
        TH0=(65536-10000)/256;        //设置50ms定时时计数器的初值,TH0=(65536-50000)/256
        TL0=(65536-10000)%256;        //                            TL0=(65536-50000)/256
        EA=1;                //CPU开总中断
        ET0=1;                //T0开中断
       
        TR0=0;                //不启动T0
          m=0;
          n=0;
        t=0;
        a=0;
  while(1)                        //本段程序功能为显示
  {
   P0=dispcode[n/10];    //段选,显示十位数字
   P2=0X40;//位选
   delay(5);                        //动态扫描
   P0=0xff;
   

   P0=dispcode[n%10];        //段选,显示个位数字
   P2=0x80;                        //位选
   delay(5);                        //动态扫描
   P0=0xff;



   P0=dispcode[t/10];    //段选,显示十位数字
   P2=0X10;//位选
   delay(5);                        //动态扫描
   P0=0xff;
   

   P0=dispcode[t%10];        //段选,显示个位数字
   P2=0x20;                        //位选
   d1=0;
   delay(5);                        //动态扫描
   P0=0xff;
    key();
   key1();
  }
}

void t0() interrupt 1 using 2
{
  TH0=0Xd8;                //重装50ms初值,TH0=(65536-50000)/256
  TL0=0Xf0;                //              TL0=(65536-50000)/256
  m++;
  if(m==1)        //是否1S到了的判断。1S=50ms*20
    {
      m=0;
      n++;                //数码管显示的内容加1
      if(n==100)    //是否显示到20的判断
        {
          n=0;     //当数码管显示到20后,返回显示0
                  t++;
                  if(t==100)
                  {
                  n=99;
                  t=99;
                  }
                  
        }            
    }
       
}
void key()
{
if(K1==0)
{
  delay(5);
  if(K1==0)
  {
   while(!K1);
   TR0=1;
  
   }

  }
}

void key1()
{
if(K2==0)
{
  delay(5);
  if(K2==0)
  {
   while(!K2);
   TR0=0;
   
   for(a=0;a<200;a++) //暂停5秒
   
   
   
   t=t+5;
      
   TR0=1;
                  
  }
}
}



void delay(unsigned int c)
{
unsigned int x,y;
for(x=c;x>0;x--)
   for(y=110;y>0;y--);
}
QQ截图20140101123259.png
QQ截图2.png

0-99.rar

40.87 KB, 下载次数: 2, 下载积分: 金币 -1

发表于 2014-1-1 13:07:22 | 显示全部楼层
单片机我也想学,但是学的不认真,勉强可以看懂一部分程序吧。觉得层次感不够分明会不会是子程序调用的问题呢
发表于 2014-1-1 13:10:10 | 显示全部楼层
我也头大了,在学校时还可以看,现在看一下都晕。
发表于 2014-1-1 14:08:36 来自手机 | 显示全部楼层
本人熟悉51单片机,MSP430,STM32。这位仁兄做着玩吗?交点学费给我,我帮你弄,包你满意,哈哈!
发表于 2014-1-1 14:09:34 来自手机 | 显示全部楼层
忘记了,我电话13310776149,QQ370717721
发表于 2014-1-1 21:20:34 来自手机 | 显示全部楼层
有什么实用价值吗?如果有我可以帮你。如何你想只是学习的话,就下载程序慢慢调试会学到更多...
发表于 2014-1-1 21:23:43 来自手机 | 显示全部楼层
有什么实用价值吗?有的话我可以帮你。
 楼主| 发表于 2014-1-2 09:12:06 | 显示全部楼层
htubuad 发表于 2014-1-1 21:23
有什么实用价值吗?有的话我可以帮你。

这是任务  ,必须完成 的 ,不完成就拿不了证书了
发表于 2014-1-2 10:00:48 | 显示全部楼层
思路:设一定时器让秒表不断更新时间变量,显示不断读取时间变量,再设一标志位控制显示读取时间变量,5秒后显示变量重新不断更新时间变量。还是不行就把仿真文件上传上来吧!
发表于 2014-1-2 10:01:18 | 显示全部楼层
思路:设一定时器让秒表不断更新时间变量,显示不断读取时间变量,再设一标志位控制显示读取时间变量,5秒后显示变量重新不断更新时间变量。还是不行就把仿真文件上传上来吧!
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2025-1-30 23:07 , Processed in 0.068116 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表