找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1870|回复: 3
收起左侧

求STC15F104W的一个程序设计思路

[复制链接]
ID:594633 发表于 2020-4-1 16:48 | 显示全部楼层 |阅读模式
哪位大佬能帮搞一个程序测试下硬件,小弟刚接触单片机,程序实在是搞不懂~ 想搞一个程序研究下,谢谢各位~~

单片机:STC15F104W

key1=P3^0;            //S1  按键
key2=P3^1;            //S2  备用按键
led1=P3^2;            //指示灯 绿色
led2=P3^3;            //指示灯 红色  初始化为低电平
relay1=P3^4;         //继电器1     
relay2=P3^5;        //继电器2      

程序要求:
程序初始化后P3.3为低电平,其他默认高电平。

1、P3.0由高变低(S1按下)——P3.4由高变低并保持2秒后再恢复到高并保持;P3.3由低变高并保持;P3.2间隔1秒低高输出(LED1闪烁),30秒后低电平保持(LED1常亮);30秒内重复S1按下无效,超过30秒才能有效。

2、P3.0由高变低(S1 30秒后再按下)——P3.5由高变低并保持2秒后再恢复到高并保持;P3.2由低变高并保持;P3.3间隔1秒低高输出(LED2闪烁),30秒后低电平保持(LED2常亮);30秒内重复S1按下无效,超过30秒才能有效。



-----------------
一个按键控制2个LED和2个继电器。每30秒按键执行1次相应的动作,30秒内重复触发无效。


回复

使用道具 举报

ID:584814 发表于 2020-4-1 18:54 | 显示全部楼层
你的思路已经很清楚了,直接写代码就好。预祝顺利。
回复

使用道具 举报

ID:594633 发表于 2020-4-1 22:26 来自手机 | 显示全部楼层
man1234567 发表于 2020-4-1 18:54
你的思路已经很清楚了,直接写代码就好。预祝顺利。

思路是有,这个代码实在是弄不懂(=_=)
回复

使用道具 举报

ID:594633 发表于 2020-4-17 00:09 | 显示全部楼层
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit key =P3^0;                //开始结束按键
sbit LED1=P3^2;                //开始绿灯
sbit LED2=P3^3;               //停止红灯
sbit relay =P3^4;      //开始继电器
sbit relay1=P3^5;        //结束继电器

uint count;//计时存储器

void DelayMS(uint x)
{
        uchar i;
        while(x--);
        {
                for(i=0;i<120;i++);
        }
}

void init()
{
        
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;

        ET0 =1;
        TR0 =0;
        EA =1;
}

void main()
{
        relay1=1;
        relay=1;
        LED1=1;
        LED2=0;
        init();

        while (1)
        {
            if (key==0)//按键按下
            {
                    
                     TR0 =1;//启动定时器
           
            }
               
        }
}

void timer0()interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;

        count++;

        if (count ==1 && LED2==0)//到达设定时间
                {
                                relay =~relay;
                                DelayMS(50000);
                                relay =~relay;
                                       
                }

                if (count ==1 && LED1==0)
                {
                                relay1 =~relay1;
                                DelayMS(50000);
                                relay1 =~relay1;
                                       
                }
                       
                if (count <=450 && LED1==0)
                {
                        LED1=~LED1;
                        DelayMS(3000);
                            LED1=~LED1;
                        }
                else
                         {
                               LED2=~LED2;
                        DelayMS(3000);
                            LED2=~LED2;
                }

        if (count >=450)
                {
                           LED1=~LED1;
                           LED2=~LED2;
                            count =0;
                            TR0 =0;
                     }
                       
}


---------------------------------------------------------------------------------------------------------
把以上程序下载到STC15F104W里运行不正常,LED不闪烁,始终常亮,搞不懂哪里问题。Proteus里仿真是正常的(这个程序仿真效果是2个指示灯切换显示和原先要求不一样,类似红绿灯切换方式)。
下载程序的时候发现下载不进去,始终再检测。3.0和3.1口只接了开关,没有其他元件,后来发现3.4和3.5口要把限流电阻(控制三极管B极)拆掉才能下载……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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