打印
[STC单片机]

新人求教,我刚开始学单片机

[复制链接]
1651|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a2208123|  楼主 | 2013-8-20 19:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <STC12C5A60S2.h>
#define uchar unsigned char
#define uint unsigned int
sbit start=P0^2;
sbit CY1=P2^3;
uchar num;

   
void main()
{
   TMOD=0x01;
   TH0=(65536-37037)/256;
   TL0=(65536-37037)%256;
   EA=1;
   ET0=1;
   TR0=1;
   while(1);
   }

  
void T0_time()interrupt 1
{
   TH0=(65536-37037)/256;
   TL0=(65536-37037)%256;
   num++;
   if(num==250)
   {
      num=0;
   CY1=~CY1;
   }
   }

这里是我刚写的延时5秒CY1通断的,现在还有个start的按键没用上,是要按下按键start这个程序才开始执行,松开就不执行了。改怎么加啊?
求指导啊。

相关帖子

沙发
林志财| | 2013-8-20 22:12 | 只看该作者
while(!start)
{

}

使用特权

评论回复
板凳
opal11| | 2013-8-20 22:40 | 只看该作者
void main()
{
   TMOD=0x01;
   TH0=(65536-37037)/256;
   TL0=(65536-37037)%256;
   EA=1;
   ET0=1;
   TR0=0;
   while(!start)  TR0=1;
   
}

使用特权

评论回复
地板
liang5319| | 2013-8-22 00:09 | 只看该作者
这个、、、while里边没东西?

使用特权

评论回复
5
林志财| | 2013-8-22 12:28 | 只看该作者
#include <STC12C5A60S2.h>
#define uchar unsigned char
#define uint unsigned int
sbit start=P0^2;
sbit CY1=P2^3;
uchar num;
void init()
{
   TMOD=0x01;
   TH0=(65536-37037)/256;
   TL0=(65536-37037)%256;
   EA=1;
   ET0=1;
}   
void main()
{
   init();
   while(!start)
        {
                TR0=1;
        }
}  
void T0_time()interrupt 1
{
   TH0=(65536-37037)/256;
   TL0=(65536-37037)%256;
   num++;
   if(num==250)
   {
      num=0;
   CY1=~CY1;
   }
}

使用特权

评论回复
6
liwei12400| | 2013-8-22 13:11 | 只看该作者
我是来学习的,3#,5#都是正解

使用特权

评论回复
7
iScience| | 2013-8-22 13:41 | 只看该作者
#3和#5楼的程序都有些不足。比如,没有考虑按键抖动,而且应该有个死循环,好让中断函数返回。还有一个小问题,就是比如start刚开始是1,按下后变为0,while(!start)里的循环体运行,松开后,start变为1,跳出循环,整个程序就结束了,但是计时器仍然在运行,而且,如果第二次再按下start,将不起作用,因为程序已经结束了!

使用特权

评论回复
8
iScience| | 2013-8-22 14:28 | 只看该作者
修改如下,偶也是初学者,望指正!
#include <STC12C5A60S2.h>
#define uchar unsigned char
#define uint unsigned int
sbit start=P0^2;
sbit CY1=P2^3;
uchar num;

void main()
{
        bit keybuf=1;
        bit backup=1;
        unsigned int i;
        TMOD=0x01;
        TH0=(65536-37037)/256;
        TL0=(65536-37037)%256;
        EA=1;
        ET0=1;
        while(1)
        {
                keybuf=start;
                if(keybuf != backup)
                {
                        i=1000;
                        while(i--);
                        if(keybuf == start)
                        {
                                if(backup == 1)
                                {
                                        TR0=1;
                                }
                                else
                                {
                                        TR0=0;
                                }
                                backup=keybuf;
                        }
                }
        }
}

void T0_time() interrupt 1
{
        TH0=(65536-37037)/256;
        TL0=(65536-37037)%256;
        num++;
        if(num==250)
        {
                num=0;
                CY1=~CY1;
        }
}

使用特权

评论回复
9
xiaoliping1945| | 2013-8-24 21:14 | 只看该作者
补充一点,最近常遇到的,非常有用的小小的注意点,作为输入的IO口,请初始化置1,这是51 单片机特性,可查阅相关资料

使用特权

评论回复
10
单片机学习123| | 2013-9-17 11:40 | 只看该作者
学习了,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝