数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 878|回复: 21

[other] 请教如何将以下源程序中单片机P1.2~P1.7端口输出低电平有效改为输出高电...

[复制链接]
发表于 2024-10-8 13:52:35 | 显示全部楼层 |阅读模式
请教如何将以下源程序单片机P1.2~P1.7端口输出低电平有效改为输出高电平有效(将输出电平状态反转)?

源程序应该修改哪一部分呢?谢谢undefinedundefined



以下是源程序:
以下是源程序:

#include <reg52.h>                //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义       变量范围0~255

#define uint  unsigned int        //无符号整型 宏定义        变量范围0~65535



sbit key4 = P3^7;               //按键IO口定义(状态设置)


uchar menu_1;                           //设置不同参数的变量


char dx_s = 0,nb_s = 0;       //东西  南北 倒计时变量


sbit dx_red    = P1^2;               //东西红灯IO口定义(pin14~p1.2)

sbit dx_green  = P1^4;               //东西绿灯IO口定义(pin16~p1.4)

sbit dx_yellow = P1^3;               //东西黄灯IO口定义(pin15~p1.3)


sbit nb_red    = P1^5;               //南北红灯IO口定义(pin17~p1.5)

sbit nb_green  = P1^7;               //南北绿灯IO口定义(pin19~p1.7)

sbit nb_yellow = P1^6;               //南北黄灯IO口定义(pin18~p1.6)      


bit flag_1s = 0;         //1秒的变量

bit flag_500ms;                 //500毫秒的变量

bit flag_dx_nb = 0;   //东西南北模式

uchar dx_time = 20,nb_time = 35;   //东西、南北的时间

uchar flag_jdgz ;     //交通管制


/********************************************************************
* 名称 : delay_1ms()

* 功能 : 延时1ms函数

* 输入 : q

* 输出 : 无

***********************************************************************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
               for(j=0;j<120;j++);
}

uchar i;
/***********************************************************************/
void display()
{
        for(i=0;i<4;i++)
        {              
               P0 = 0xff;                 //消隐

                          //位选

//段选         

               delay_1ms(3);                 //延时

        }
}

/*********************定时器0、定时器1初始化******************/

void time0_init()         
{
        EA  =1;                  //开总中断

        TMOD = 0X01;         //定时器0工作方式1

        ET0 = 1;                 //开定时器0中断

        TR0 = 1;                 //允许定时器0定时

        TH0 = 0x3c;
        TL0 = 0xb0;    //50ms
}

/*********************交通灯处理函数*********************************/

void jiaotongdeng_dis()
{
        if(flag_1s == 1)          //1秒执行一次里面的程序  

        {
               flag_1s = 0;
               if(flag_dx_nb == 0)           //南北绿灯时间

               {
                       dx_s --;                  //东西倒计时时间减1

                       nb_s --;                  //南北倒计时时间减1

                       if(dx_s == 5)
                               nb_s = 5;
               }
               if(flag_dx_nb == 1)           //东西绿灯时间

               {
                       dx_s --;                  //南北倒计时时间减1

                       nb_s --;                  //东西倒计时时间减1

                       if(nb_s == 5)
                               dx_s = 5;
               }
               if(dx_s <= 0)                 //倒计时时间为0切换东西 南北绿灯时间

               {
                       flag_dx_nb = ~flag_dx_nb;
                       if(flag_dx_nb == 1)        //东西时间

                       {
                               dx_s =dx_time;         
                               nb_s = dx_time +5;
                       }
                       else                                //南北时间

                       {
                               dx_s = nb_time +5;      
                               nb_s =nb_time;         
                       }
               }
        }

/***********************南北时间*********************************/

        if(flag_dx_nb ==0)  
        {
               if(dx_s > 5)
               {
                       dx_red    = 0;    //东西红灯亮

                       dx_green  =       1;           //东西红灯灭

                       dx_yellow = 1;          //东西黄灯灭

                       nb_red    = 1;    //南北红灯灭

                       nb_green  =       0;           //南北绿灯亮

                       nb_yellow = 1;          //南北黄灯灭


               }else if(dx_s <= 5)                //当小于5秒时  黄灯要闪了

               {
                       dx_red    = 0;    //东西红灯灭

                       dx_green  =       1;           //东西红灯灭

                       dx_yellow = 1;          //东西黄灯灭

                       nb_red    = 1;    //南北红灯灭

                       nb_green  =       1;           //南北绿灯灭

                       if(flag_500ms == 0)          //黄灯闪烁

                       {
                               nb_yellow =0;        //亮      

                       }
                       else
                       {
                               nb_yellow =1;        //灭      

                       }
               }
        }
/***********************东西时间*********************************/

        if(flag_dx_nb ==1)  
        {
               if(nb_s > 5)
               {
                       dx_red    = 1;  //东西红灯灭

                       dx_green  =       0;        //东西红灯亮

                       dx_yellow = 1;        //东西黄灯灭

                       nb_red    = 0;  //南北红灯亮

                       nb_green  =       1;        //南北绿灯灭

                       nb_yellow = 1;        //南北黄灯灭

               }else if(nb_s <= 5)                //当小于5秒时  黄灯要闪了

               {
                       dx_red    = 1;    //东西红灯灭

                       dx_green  =       1;          //东西红灯灭

                       nb_red    = 0;    //南北红灯亮

                       nb_green  =       1;          //南北绿灯灭

                       nb_yellow = 1;         //南北黄灯灭

                       if(flag_500ms == 0)        //黄灯闪烁

                       {
                               dx_yellow = 0;//东西黄灯亮      

                       }
                       else
                       {
                               dx_yellow = 1;//东西黄灯灭      

                       }

               }
        }                     
}

/********************独立按键程序*****************/

uchar key_can;        //按键值


void key()        //独立按键程序

{
        static ucharkey_new;       //key_new  这个变量的功能是做按键松手检测的

        key_can = 0;               //按键值还原成0

        if( key4 == 0)                      //有按键按下

        {
               delay_1ms(1);                    //按键延时消抖动

               if(key_new == 1)
               {                                       
                       key_new = 0;               //key_new = 0   说明按键已按下


                       if(key4 == 0)               //确认是按键按下

                               key_can = 4;        //得到按键值

               }                     
        }
        else
               key_new = 1;         //key_new = 1   说明按键已经松开了      

}

/********************设置函数*****************/

void key_with()
{
        if(key_can == 4)      //交通管制按键

        {
               flag_jdgz ++;
               if(flag_jdgz > 4)
                       flag_jdgz = 0;      
               if(flag_jdgz == 1)         //  全部亮红灯

               {
                       dx_red    = 0;  //东西红灯亮

                       dx_green  =       1;        //东西绿灯灭

                       dx_yellow = 1;        //东西黄灯灭

                       nb_red    = 0;  //南北红灯亮

                       nb_green  =       1;        //南北绿灯灭

                       nb_yellow = 1;        //南北黄灯灭                     

               }
               if(flag_jdgz == 2)         //  东西红灯  南北绿灯

               {
                       dx_red    = 0;  //东西红灯亮

                       dx_green  =       1;        //东西绿灯灭

                       dx_yellow = 1;        //东西黄灯灭

                       nb_red    = 1;  //南北红灯灭

                       nb_green  =       0;        //南北绿灯亮

                       nb_yellow = 1;        //南北黄灯灭                     

               }
               if(flag_jdgz == 3)         //  南北红灯  东西绿灯

               {
                       dx_red    = 1;  //东西红灯灭

                       dx_green  =       0;        //东西绿灯亮

                       dx_yellow = 1;        //东西黄灯灭

                       nb_red    = 0;  //南北红灯亮

                       nb_green  =       1;        //南北绿灯灭

                       nb_yellow = 1;        //南北黄灯灭                     

               }
               if(flag_jdgz == 4)         //  南北黄灯闪  东西黄灯闪

               {
                       dx_red    = 1;  //东西红灯灭

                       dx_green  =       1;        //东西绿灯灭

                       nb_red    = 1;  //南北红灯灭

                       nb_green  =       1;        //南北绿灯灭

               }

        }
}

/********************************************************************
* 名称 : main()

* 功能 : 实现灯的闪烁

* 输入 : 无

* 输出 : 无

***********************************************************************/
void main()
{
        time0_init();                 //定时器初始化程序

        dx_s = nb_time +5;          //南北时间

        nb_s = nb_time ;         //东西时间

        while(1)
        {
               key();                          //按键函数

               if(key_can > 0)           //有按键按下

                       key_with();          //按键处理函数

               if((menu_1 == 0) && (flag_jdgz == 0))
                       jiaotongdeng_dis();          //交通灯处理函数


               if(flag_jdgz == 4)        //夜间模式

                       if(flag_500ms == 1)               //  南北黄灯闪  东西黄灯闪

                       {
                               flag_500ms = 0;
                               nb_yellow =~nb_yellow;           //  东西黄灯闪

                               dx_yellow =~dx_yellow;           //  东西黄灯闪

                       }      
               display();         //数码管显示函数

        }
}  

/*********************定时器0中断服务程序************************/

void time0_int() interrupt 1  
{                                                
       static  uchar value;                        //定时50ms中断一次

        TH0 = 0x3c;
        TL0 = 0xb0;    //50ms
        value ++;
        if(value % 10 == 0)
               flag_500ms = ~flag_500ms;           //定时产生一个500毫秒的变量

        if(value >= 20)
        {
               value = 0;
               flag_1s = 1;         //定时产生一个1秒的变量

        }
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
发表于 2024-10-8 14:14:27 | 显示全部楼层
本帖最后由 mmxx2015 于 2024-10-8 14:17 编辑

把“=1”改成“=0”、“=0”改成“=1”就行了,不过,AT89C2051高电平输出能力很弱,灯很暗,需要加缓冲区,比如74LS244。
回复 支持 反对

使用道具 举报

发表于 2024-10-8 14:49:08 | 显示全部楼层
0改成1,但是51是准双向输出电流估计不够,灯会比较暗。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-8 14:52:18 | 显示全部楼层
mmxx2015 发表于 2024-10-8 14:14
把“=1”改成“=0”、“=0”改成“=1”就行了,不过,AT89C2051高电平输出能力很弱,灯很暗,需要加缓冲区 ...

谢谢您,我后级用的是ULN2003A作为驱动,因为ULN2003A是达林顿结构,虽然单片机输出能力差一点,但驱动ULN2003A没有丝毫问题。
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2024-10-8 14:55:31 | 显示全部楼层
mmxx2015 发表于 2024-10-8 14:14
把“=1”改成“=0”、“=0”改成“=1”就行了,不过,AT89C2051高电平输出能力很弱,灯很暗,需要加缓冲区 ...

具体需要修改源程序中的哪一部分呢?麻烦说明一下,谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-8 15:11:42 | 显示全部楼层
soma 发表于 2024-10-8 14:49
0改成1,但是51是准双向输出电流估计不够,灯会比较暗。

谢谢您,我后级用的是ULN2003A作为驱动,因为ULN2003A是达林顿结构,虽然单片机输出能力差一点,但驱动ULN2003A没有丝毫问题。
回复 支持 反对

使用道具 举报

发表于 2024-10-8 15:56:17 | 显示全部楼层
  1. sbit dx_red    = P1^2;               //东西红灯IO口定义(pin14~p1.2)
  2. sbit dx_green  = P1^4;               //东西绿灯IO口定义(pin16~p1.4)
  3. sbit dx_yellow = P1^3;               //东西黄灯IO口定义(pin15~p1.3)

  4. sbit nb_red    = P1^5;               //南北红灯IO口定义(pin17~p1.5)
  5. sbit nb_green  = P1^7;               //南北绿灯IO口定义(pin19~p1.7)
  6. sbit nb_yellow = P1^6;               //南北黄灯IO口定义(pin18~p1.6)      
复制代码

就是这几个灯的IO口定义的赋值,之前是0开1关,现在是0关1开。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-8 16:14:03 | 显示全部楼层
soma 发表于 2024-10-8 15:56
就是这几个灯的IO口定义的赋值,之前是0开1关,现在是0关1开。

谢谢你,我改一下试一试
回复 支持 反对

使用道具 举报

发表于 2024-10-8 17:03:57 | 显示全部楼层
改成这样:
  1. #include <reg52.h>                 //调用单片机头文件
  2. #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  3. #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535


  4. sbit key4 = P3^7;                //按键IO口定义(状态设置)

  5. uchar menu_1;                            //设置不同参数的变量

  6. char dx_s = 0,nb_s = 0;        //东西  南北 倒计时变量

  7. sbit dx_red    = P1^2;                //东西红灯IO口定义(pin14~p1.2)
  8. sbit dx_green  = P1^4;                //东西绿灯IO口定义(pin16~p1.4)
  9. sbit dx_yellow = P1^3;                //东西黄灯IO口定义(pin15~p1.3)

  10. sbit nb_red    = P1^5;                //南北红灯IO口定义(pin17~p1.5)
  11. sbit nb_green  = P1^7;                //南北绿灯IO口定义(pin19~p1.7)
  12. sbit nb_yellow = P1^6;                //南北黄灯IO口定义(pin18~p1.6)      

  13. bit flag_1s = 0;          //1秒的变量
  14. bit flag_500ms;                  //500毫秒的变量
  15. bit flag_dx_nb = 0;   //东西南北模式
  16. uchar dx_time = 20,nb_time = 35;   //东西、南北的时间
  17. uchar flag_jdgz ;     //交通管制


  18. //********************************************************************
  19. //        I/O操作宏定义
  20. //********************************************************************
  21. #define        ON        1                //亮电平
  22. #define        OFF        0                //灭电平

  23. #define        dx_red_on()                dx_red = ON;                //东西红灯亮
  24. #define        dx_green_on()                dx_green = ON;                //东西绿灯亮
  25. #define        dx_yellow_on()                dx_yellow = ON;                //东西黄灯亮

  26. #define        dx_red_off()                dx_red = OFF;                //东西红灯灭
  27. #define        dx_green_off()                dx_green = OFF;                //东西绿灯灭
  28. #define        dx_yellow_off()                dx_yellow = OFF;        //东西黄灯灭


  29. #define        nb_red_on()                nb_red = ON;                //南北红灯亮
  30. #define        nb_green_on()                nb_green = ON;                //南北绿灯亮
  31. #define        nb_yellow_on()                nb_yellow = ON;                //南北黄灯亮

  32. #define        nb_red_off()                nb_red = OFF;                //南北红灯灭
  33. #define        nb_green_off()                nb_green = OFF;                //南北绿灯灭
  34. #define        nb_yellow_off()                nb_yellow = OFF;        //南北黄灯灭
  35. //********************************************************************




  36. /********************************************************************
  37. * 名称 : delay_1ms()
  38. * 功能 : 延时1ms函数
  39. * 输入 : q
  40. * 输出 : 无
  41. ***********************************************************************/
  42. void delay_1ms(uint q)
  43. {
  44.         uint i,j;
  45.         for(i=0;i<q;i++)
  46.                 for(j=0;j<120;j++);
  47. }

  48. uchar i;
  49. /***********************************************************************/
  50. void display()
  51. {
  52.         for(i=0;i<4;i++)
  53.         {               
  54.                 P0 = 0xff;                  //消隐
  55.                            //位选
  56. //段选         
  57.                 delay_1ms(3);                  //延时
  58.         }
  59. }

  60. /*********************定时器0、定时器1初始化******************/
  61. void time0_init()         
  62. {
  63.         EA  = 1;                   //开总中断
  64.         TMOD = 0X01;          //定时器0工作方式1
  65.         ET0 = 1;                  //开定时器0中断
  66.         TR0 = 1;                  //允许定时器0定时
  67.         TH0 = 0x3c;
  68.         TL0 = 0xb0;     //50ms
  69. }

  70. /*********************交通灯处理函数*********************************/
  71. void jiaotongdeng_dis()
  72. {
  73.         if(flag_1s == 1)           //1秒执行一次里面的程序  
  74.         {
  75.                 flag_1s = 0;
  76.                 if(flag_dx_nb == 0)           //南北绿灯时间
  77.                 {
  78.                         dx_s --;                   //东西倒计时时间减1
  79.                         nb_s --;                   //南北倒计时时间减1
  80.                         if(dx_s == 5)
  81.                                 nb_s = 5;
  82.                 }
  83.                 if(flag_dx_nb == 1)           //东西绿灯时间
  84.                 {
  85.                         dx_s --;                   //南北倒计时时间减1
  86.                         nb_s --;                   //东西倒计时时间减1
  87.                         if(nb_s == 5)
  88.                                 dx_s = 5;
  89.                 }
  90.                 if(dx_s <= 0)                  //倒计时时间为0切换东西 南北绿灯时间
  91.                 {
  92.                         flag_dx_nb = ~flag_dx_nb;
  93.                         if(flag_dx_nb == 1)         //东西时间
  94.                         {
  95.                                 dx_s = dx_time;         
  96.                                 nb_s = dx_time + 5;
  97.                         }
  98.                         else                                  //南北时间
  99.                         {
  100.                                 dx_s = nb_time + 5;      
  101.                                 nb_s = nb_time;         
  102.                         }
  103.                 }
  104.         }

  105. /***********************南北时间*********************************/
  106.         if(flag_dx_nb == 0)  
  107.         {
  108.                 if(dx_s > 5)
  109.                 {
  110.                         dx_red_on();     //东西红灯亮
  111.                         dx_green_off();           //东西红灯灭
  112.                         dx_yellow_off();           //东西黄灯灭
  113.                         nb_red_off();     //南北红灯灭
  114.                         nb_green_on();           //南北绿灯亮
  115.                         nb_yellow_off();           //南北黄灯灭

  116.                 }else if(dx_s <= 5)                 //当小于5秒时  黄灯要闪了
  117.                 {
  118.                         dx_red_on();     //东西红灯灭
  119.                         dx_green_off();           //东西红灯灭
  120.                         dx_yellow_off();           //东西黄灯灭
  121.                         nb_red_off();     //南北红灯灭
  122.                         nb_green_off();           //南北绿灯灭
  123.                         if(flag_500ms == 0)           //黄灯闪烁
  124.                         {
  125.                                 nb_yellow_on();        //亮      
  126.                         }
  127.                         else
  128.                         {
  129.                                 nb_yellow_off();        //灭      
  130.                         }
  131.                 }
  132.         }
  133. /***********************东西时间*********************************/
  134.         if(flag_dx_nb == 1)  
  135.         {
  136.                 if(nb_s > 5)
  137.                 {
  138.                         dx_red_off();  //东西红灯灭
  139.                         dx_green_on();        //东西红灯亮
  140.                         dx_yellow_off();        //东西黄灯灭
  141.                         nb_red_on();  //南北红灯亮
  142.                         nb_green_off();        //南北绿灯灭
  143.                         nb_yellow_off();        //南北黄灯灭
  144.                 }else if(nb_s <= 5)                 //当小于5秒时  黄灯要闪了
  145.                 {
  146.                         dx_red_off();    //东西红灯灭
  147.                         dx_green_off();          //东西红灯灭
  148.                         nb_red_on();    //南北红灯亮
  149.                         nb_green_off();          //南北绿灯灭
  150.                         nb_yellow_off();          //南北黄灯灭
  151.                         if(flag_500ms == 0)         //黄灯闪烁
  152.                         {
  153.                                 dx_yellow_on();//东西黄灯亮      
  154.                         }
  155.                         else
  156.                         {
  157.                                 dx_yellow_off();//东西黄灯灭      
  158.                         }

  159.                 }
  160.         }                       
  161. }

  162. /********************独立按键程序*****************/
  163. uchar key_can;         //按键值

  164. void key()         //独立按键程序
  165. {
  166.         static uchar key_new;       //key_new  这个变量的功能是做按键松手检测的
  167.         key_can = 0;                //按键值还原成0
  168.         if( key4 == 0)                        //有按键按下
  169.         {
  170.                 delay_1ms(1);                     //按键延时消抖动
  171.                 if(key_new == 1)
  172.                 {                                         
  173.                         key_new = 0;                //key_new = 0   说明按键已按下

  174.                         if(key4 == 0)                //确认是按键按下
  175.                                 key_can = 4;         //得到按键值
  176.                 }                       
  177.         }
  178.         else
  179.                 key_new = 1;         //key_new = 1   说明按键已经松开了      
  180. }

  181. /********************设置函数*****************/
  182. void key_with()
  183. {
  184.         if(key_can == 4)       //交通管制按键
  185.         {
  186.                 flag_jdgz ++;
  187.                 if(flag_jdgz > 4)
  188.                         flag_jdgz = 0;      
  189.                 if(flag_jdgz == 1)         //  全部亮红灯
  190.                 {
  191.                         dx_red_on();  //东西红灯亮
  192.                         dx_green_off();        //东西绿灯灭
  193.                         dx_yellow_off();        //东西黄灯灭
  194.                         nb_red_on();  //南北红灯亮
  195.                         nb_green_off();        //南北绿灯灭
  196.                         nb_yellow_off();        //南北黄灯灭                       
  197.                 }
  198.                 if(flag_jdgz == 2)         //  东西红灯  南北绿灯
  199.                 {
  200.                         dx_red_on();  //东西红灯亮
  201.                         dx_green_off();        //东西绿灯灭
  202.                         dx_yellow_off();        //东西黄灯灭
  203.                         nb_red_off();  //南北红灯灭
  204.                         nb_green_on();        //南北绿灯亮
  205.                         nb_yellow_off();        //南北黄灯灭                       
  206.                 }
  207.                 if(flag_jdgz == 3)         //  南北红灯  东西绿灯
  208.                 {
  209.                         dx_red_off();  //东西红灯灭
  210.                         dx_green_on();        //东西绿灯亮
  211.                         dx_yellow_off();        //东西黄灯灭
  212.                         nb_red_on();  //南北红灯亮
  213.                         nb_green_off();        //南北绿灯灭
  214.                         nb_yellow_off();        //南北黄灯灭                       
  215.                 }
  216.                 if(flag_jdgz == 4)         //  南北黄灯闪  东西黄灯闪
  217.                 {
  218.                         dx_red_off();  //东西红灯灭
  219.                         dx_green_off();        //东西绿灯灭
  220.                         nb_red_off();  //南北红灯灭
  221.                         nb_green_off();        //南北绿灯灭
  222.                 }

  223.         }
  224. }

  225. /********************************************************************
  226. * 名称 : main()
  227. * 功能 : 实现灯的闪烁
  228. * 输入 : 无
  229. * 输出 : 无
  230. ***********************************************************************/
  231. void main()
  232. {
  233.         time0_init();                  //定时器初始化程序
  234.         dx_s = nb_time + 5;          //南北时间
  235.         nb_s = nb_time ;          //东西时间
  236.         while(1)
  237.         {
  238.                 key();                           //按键函数
  239.                 if(key_can > 0)           //有按键按下
  240.                         key_with();           //按键处理函数
  241.                 if((menu_1 == 0) && (flag_jdgz == 0))
  242.                         jiaotongdeng_dis();           //交通灯处理函数

  243.                 if(flag_jdgz == 4)        //夜间模式
  244.                         if(flag_500ms == 1)                //  南北黄灯闪  东西黄灯闪
  245.                         {
  246.                                 flag_500ms = 0;
  247.                                 nb_yellow = ~nb_yellow;           //  东西黄灯闪
  248.                                 dx_yellow = ~dx_yellow;           //  东西黄灯闪
  249.                         }      
  250.                 display();         //数码管显示函数
  251.         }
  252. }  

  253. /*********************定时器0中断服务程序************************/
  254. void time0_int() interrupt 1  
  255. {                                                  
  256.         static  uchar value;                         //定时50ms中断一次
  257.         TH0 = 0x3c;
  258.         TL0 = 0xb0;     //50ms
  259.         value ++;
  260.         if(value % 10 == 0)
  261.                 flag_500ms = ~flag_500ms;           //定时产生一个500毫秒的变量
  262.         if(value >= 20)
  263.         {
  264.                 value = 0;
  265.                 flag_1s = 1;         //定时产生一个1秒的变量
  266.         }
  267. }
复制代码
如果要还原原来程序的功能,修改这两个宏定义就行了:
  1. #define ON 1 //亮电平
  2. #define OFF 0 //灭电平
复制代码



回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-8 19:04:02 | 显示全部楼层
mmxx2015 发表于 2024-10-8 17:03
改成这样:
如果要还原原来程序的功能,修改这两个宏定义就行了:

太感谢了
回复 支持 反对

使用道具 举报

发表于 2024-10-9 17:57:18 | 显示全部楼层
这个,,,不会是课程设计吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-10 09:20:39 | 显示全部楼层
南天音乐 发表于 2024-10-9 17:57
这个,,,不会是课程设计吧?

不是,自己学习呢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-10 09:27:13 | 显示全部楼层
南天音乐 发表于 2024-10-9 17:57
这个,,,不会是课程设计吧?

都快六十岁了,还搞什么课题设计呢,业余爱好而已。
我们学校大门口的红绿灯让车给撞坏了,我想自己做一块控制板,所以才求助的,谢谢大家的热心回复
回复 支持 反对

使用道具 举报

发表于 2024-10-10 10:00:01 | 显示全部楼层
输出加个反相器7404也可以的
回复 支持 反对

使用道具 举报

发表于 2024-10-10 12:33:04 | 显示全部楼层
bg4rff 发表于 2024-10-10 10:00
输出加个反相器7404也可以的

确实可以,一片就够。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-10 19:33:26 | 显示全部楼层
mmxx2015 发表于 2024-10-10 12:33
确实可以,一片就够。

原来那个程序写入AT89C2051可以正常运行,现在通过反向的这个程序超出了AT89C2051的2KB存储空间不能完全写入,后用AT89C52烧录实验,程序可以运行,红绿灯状态显示和切换也正常,不过就是初次上电后东西南北灯都没反应,30秒后显示正常,东西南北红绿灯运行也正常,不知是何原因。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-10 19:35:50 | 显示全部楼层
bg4rff 发表于 2024-10-10 10:00
输出加个反相器7404也可以的

就是为了洁简电路才想修改程序的
回复 支持 反对

使用道具 举报

发表于 2024-10-10 20:39:09 | 显示全部楼层
zwxzj 发表于 2024-10-10 19:33
原来那个程序写入AT89C2051可以正常运行,现在通过反向的这个程序超出了AT89C2051的2KB存储空间不能完全 ...

不可能吧?我测试的结果是改前改后占用的RAM和ROM都一样的,ROM只占用624字节(不同编译器版本可能稍有差异但不会差太多)。
改前:


改后:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-11 14:31:40 | 显示全部楼层
mmxx2015 发表于 2024-10-10 20:39
不可能吧?我测试的结果是改前改后占用的RAM和ROM都一样的,ROM只占用624字节(不同编译器版本可能稍有差 ...

谢谢您
我用的是Keil uVision4,我今天下班回去再看一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-11 14:59:33 | 显示全部楼层
mmxx2015 发表于 2024-10-10 20:39
不可能吧?我测试的结果是改前改后占用的RAM和ROM都一样的,ROM只占用624字节(不同编译器版本可能稍有差 ...

刚才重新编译了一下,一切正常

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-17 09:34 , Processed in 0.156000 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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