打印
[PIC®/AVR®/dsPIC®产品]

使用PIC16F630写一个简单程序

[复制链接]
1533|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
行走与奔跑|  楼主 | 2016-8-14 20:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//-----------------------------------------------------------------
//  名称: LED模拟交通灯
//-----------------------------------------------------------------
//  说明: 东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后亮红灯,
//        红灯亮后,南北向由红灯变为绿灯,2秒后南北向黄灯闪烁,
//        闪烁5次后亮红灯,东西向绿灯亮,如此往复.
//        本例将切换时间设得较短,以便快速观察运行效果.
//
//-----------------------------------------------------------------
#include <pic.h>
__CONFIG(0x079);
#define uchar unsigned char
#define uint  unsigned int
#define     RED_EW_ON()  RC0 = 0               //东西向指示灯开
#define  YELLOW_EW_ON()  RC1 = 0
#define   GREEN_EW_ON()  RC2 = 0

#define     RED_EW_OFF() RC0 = 1               //东西向指示灯关
#define  YELLOW_EW_OFF() RC1 = 1
#define   GREEN_EW_OFF() RC2 = 1

#define     RED_SN_ON()  RC3 = 0               //南北向指示灯开
#define  YELLOW_SN_ON()  RC4 = 0
#define   GREEN_SN_ON()  RC5 = 0

#define     RED_SN_OFF() RC3 = 1               //南北向指示灯关
#define  YELLOW_SN_OFF() RC4 = 1
#define   GREEN_SN_OFF() RC5 = 1

#define   YELLOW_EW_BLINK() RC1 = ~RC1         //东西向黄灯闪烁
#define   YELLOW_SN_BLINK() RC4 = ~RC4         //南北向黄灯闪烁

//-----------------------------------------------------------------
// 延时函数
//-----------------------------------------------------------------
void DELAY(uint x)
{
        uint a,b;
        for(a=x;a>0;a--)
                for(b=110;b>0;b--);
}

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------

void main()
{
        TRISC=0X00;
        PORTC=0XFF;
        uchar Flash_Count = 0, I =2;                //闪烁次数,操作类型变量
        uchar a;
        while(1)
        switch (I)
        {
                case 1:  //东西向绿灯与南北向红灯亮
                        PORTC=0X33;
                        DELAY(400);
                        I=2;
                        break;
                case 2:  //东西向黄灯开始闪烁,绿灯关闭
                        for(a=0;a<7;a++)       
                        {
                                PORTC=0X35;
                                DELAY(300);
                                PORTC=0X37;
                                DELAY(300);
                        }
                        I=1;
                        break;
        //        case 3: //东西向红灯与南北向绿灯亮
        //                RED_EW_ON();
        //                YELLOW_EW_OFF();
        //                GREEN_EW_OFF();
        //                RED_SN_OFF();
        //                YELLOW_SN_OFF();
        //                GREEN_SN_ON();
        //                DELAY(40);
        //                I=4;
        //                break;
        //        case 4:  //南北向黄灯开始闪烁
        //                DELAY(20);
        //                YELLOW_SN_BLINK();
        //                GREEN_SN_OFF();
        //                if(++Flash_Count!=10)return;
        //                Flash_Count=0;
        //                I=1;
        //                break;
                default:   //缺省值,关闭所有LED
                PORTC=0XFF;
        }
}
在case 2这部分有问题吗?
沙发
dogglove| | 2016-8-14 22:36 | 只看该作者
怎么感觉while(1) 少个大括号呢

使用特权

评论回复
板凳
NE5532| | 2016-8-15 17:14 | 只看该作者
跑下看不就知道啦。

使用特权

评论回复
地板
兰天白云| | 2016-8-16 14:12 | 只看该作者
为什么不用你宏定义呢?定义了那么多不用?

如果黄灯闪一下是可以的

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝