大神进来帮小弟看看吧!!

2019-07-16 00:26发布

本帖最后由 1194856051 于 2013-5-25 15:48 编辑

课题设计,按启动键,交通灯开始工作,东西绿灯亮,南北红灯亮。30s后,东西南北黄灯亮2s,然后东西红灯亮,南北绿灯亮。东西南北黄灯亮2s,然后东西绿灯亮,南北红灯亮。如此循环,按停止键交通灯停止。
#include <reg51.h>
#define uchar unsigned char
sbit dx_g=P1^0;//东西绿
sbit dx_y=P1^1;//东西黄
sbit dx_r=P1^2;//东西红
sbit nb_g=P1^3;//南北绿
sbit nb_y=P1^4;//南北黄
sbit nb_r=P1^5;//南北红

unsigned int num=0;
unsigned int x=600;
void delay10ms()  //按键10ms去抖
{
        uchar a,b;
        for(a=50;a>0;a--)
                for(b=100;b>0;b--);
}
uchar keyscan()         //选择开始P0.0或停止p0.1
{
        P0=0xff;
        if((P0&0x0f)!=0x0f)
        {
                     delay10ms();
                if((P0&0x0f)!=0x0f)
                return(P0&0x0f);
               
    }
        else return(0);
}
void a_int() interrupt 1 using 1  //定时器中断函数
{
        num++;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
}
void stop()          // 停止子函数
{
        dx_g=1;dx_y=1;dx_r=1;
        nb_g=1;nb_y=1;nb_r=1;        
}
void start()  //开始子函数
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;ET0=1;TR0=1;
        while(1)
        {
        dx_g=0;dx_y=1;dx_r=1;
        nb_g=1;nb_y=1;nb_r=0;
                while(num!=x);
                        num=0;
        dx_g=1;dx_y=0;dx_r=1;
        nb_g=1;nb_y=0;nb_r=1;
                while(num!=40);
                        num=0;
        dx_g=1;dx_y=1;dx_r=0;
        nb_g=0;nb_y=1;nb_r=1;
                while(num!=x);
                        num=0;
        dx_g=1;dx_y=0;dx_r=1;
        nb_g=1;nb_y=0;nb_r=1;
                while(num!=40);
                        num=0;               
        }               
}
main ()
{
        uchar key;
        while(1)
        {
                key=keyscan();
                switch(key)
        {
                        case 0x0e : start();break;
                        case 0x0d : stop() ;break;
                        default : break;
                }
        }
} 原理图.zip (4.98 KB, 下载次数: 8)




俺的程序,帮看看停止不了。我用P0.0作为开始。P0.1作为停止。p1.0~1.5为6个灯,求大神帮我编一个吧!










友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
1194856051
1楼-- · 2019-07-16 00:48
估计也没人进来看
迟殇
2楼-- · 2019-07-16 02:23
这是用什么写的,前面用VHDL 做过这个实验
想你没理由
3楼-- · 2019-07-16 05:34
你是当p1.0输出低电平0的时候为开始吧
想你没理由
4楼-- · 2019-07-16 08:37
 精彩回答 2  元偷偷看……
1194856051
5楼-- · 2019-07-16 12:00
想你没理由 发表于 2013-5-24 14:28
你是当p1.0输出低电平0的时候为开始吧

P0.0作为开始。P1.0~1.5为东西和南北的六个灯
1194856051
6楼-- · 2019-07-16 14:21
想你没理由 发表于 2013-5-24 14:43
开始的反馈值应该是fe,结束的反馈值是fd

我用P0.0作为开始。P0.1作为停止。其他不用

一周热门 更多>