找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1335|回复: 8
打印 上一主题 下一主题
收起左侧

仿真里将共阴型数码管改成共阳型,直接这样删了连上去还是很混乱,有什么程序需要改吗

[复制链接]
回帖奖励 30 黑币 回复本帖可获得 30 黑币奖励! 每人限 2 次(中奖概率 50%)
跳转到指定楼层
楼主
我看有人说加了三极管上去,我加
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ON 0
  5. #define OFF 1
  6. sbit NS_G=P2^5; // 南北绿灯
  7. sbit NS_Y=P2^4; // 南北黄灯
  8. sbit NS_R=P2^3; // 南北红灯

  9. sbit EW_G=P2^2; // 东西绿灯
  10. sbit EW_Y=P2^1; // 东西黄灯
  11. sbit EW_R=P2^0; // 东西红灯

  12. sbit LED_D1=P3^7; // 南北方向数码管位控制
  13. sbit LED_C1=P3^6; // 南北方向数码管位控制

  14. sbit LED_B1=P3^1; // 东西方向数码管为控制
  15. sbit LED_A1=P3^0; // 东西方向数码管位控制

  16. sbit key1=P3^2;                                //开关位定义
  17. sbit key2=P3^3;

  18. /********* 倒计时赋初值 *************/
  19. uchar EWF=30,NSF=25,X=30,Y=25,Z=30,SHU=30;
  20. uchar count;
  21. void keyscan1()                //南北紧急制动按键函数
  22. {
  23.         if(!key1)
  24.         {
  25.                 while(!key1);                //松手检测
  26.         }
  27. }
  28. void keyscan2()                //东西紧急制动按键函数
  29. {
  30.         if(!key2)
  31.         {
  32.                 while(!key2);                //松手检测
  33.         }
  34. }
  35. void init(void)
  36.         {
  37.         TMOD=0x01;
  38.         TH0=(65536-40000)/256;
  39.         TL0=(65536-40000)%256;
  40.         EA=1;
  41.         ET0=1;
  42.         TR0=1;       
  43.         }
  44. void timer1(void) interrupt 1
  45.         {
  46.         TMOD=0x01;
  47.         TH0=(65536-40000)/256;
  48.         TL0=(65536-40000)%256;
  49.         EA=1;
  50.         ET0=1;
  51.         TR0=1;
  52.         count++;
  53.         if(count>29)
  54.                         {
  55.                         EWF--;
  56.                         NSF--;
  57.                         X--;
  58.                         Y--;
  59.                         Z--;
  60.                         SHU--;
  61.                         count=0;
  62.                         }

  63.         }

  64. /****************** 延时 **********************/
  65. void delay(uchar z)
  66.                 {
  67.                 uchar x,y;
  68.                 for(x=z;x>0;x--)
  69.                 for(y=110;y>0;y--);
  70.                 }

  71. /******************led 控制 *******************/
  72. unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 共阴极数码管赋值
  73. void display1(uchar num1,uchar num2) //控制东西方向 led 显示
  74. {
  75.         P0=table[num1];
  76.         LED_A1=ON;
  77.         delay(1);
  78.         LED_A1=OFF;

  79.         P0=table[num2];
  80.         LED_B1=ON;
  81.         delay(1);
  82.         LED_B1=OFF;

  83.         if(!key1)//南北紧急制动
  84.         {
  85.            while(1)
  86.                 {
  87.                         P0=0xc0;
  88.                         EW_G=EW_Y=OFF;
  89.                         NS_G=NS_Y=OFF;
  90.                         EW_R=NS_R=ON;                       
  91.                         keyscan1();
  92.                                 EW_R=NS_R=OFF;
  93.                                 EW_Y=NS_Y=OFF;
  94.                                 NS_G=ON;
  95.                                 EW_R=ON;
  96.                         break;
  97.                 }
  98.         }
  99. }
  100. void display2(uchar num3,uchar num4) // 控制南北方向 led 显示
  101. {
  102.         P0=table[num3];
  103.         LED_C1=ON;
  104.         delay(1);
  105.         LED_C1=OFF;

  106.         P0=table[num4];
  107.         LED_D1=ON;
  108.         delay(1);
  109.         LED_D1=OFF;
  110. if(!key2)//东西紧急制动
  111.         {
  112.            while(1)
  113.                 {
  114.                         P0=0xc0;
  115.                         EW_G=EW_Y=OFF;
  116.                         NS_G=NS_Y=OFF;
  117.                         EW_R=NS_R=ON;                       
  118.                         keyscan2();
  119.                                 EW_R=NS_R=OFF;
  120.                                 EW_Y=NS_Y=OFF;
  121.                                 EW_G=ON;
  122.                                 NS_R=ON;
  123.                         break;
  124.                 }
  125.         }
  126. }

  127. void main()
  128. {
  129.         int i;
  130. /************ 初始状态东西南北禁止通行 ************/
  131.         NS_R=ON; //南北方向红灯打开
  132.         EW_R=ON; //东西方向红灯打开
  133.         for(i=0;i<210;i++)
  134.                 {
  135.                 delay(10);
  136.                 }
  137.         NS_R=OFF;// 南北方向红灯关闭
  138.         EW_R=OFF;// 东西方向红灯关闭       
  139.        
  140. while(1)
  141. {
  142.                 /************** 状态 1:东西红灯 (30s), 南北绿灯 (25s)************/
  143.                 /**************** 状态 2:东西红灯 (30s), 南北黄灯 (5s)***************/
  144.                         while(1)
  145.                         {
  146.                                 init(); // 初始化计时器
  147.                
  148.                                 NS_G=ON; // 南北方向的绿灯打开
  149.                                 EW_R=ON; // 东西方向的红灯打开
  150.                                 while(EWF!=0)
  151.                                 {
  152.                                         display1(EWF/10,EWF%10);// 东西方向红灯 (25s)
  153.                                         display2(NSF/10,NSF%10);// 南北方向绿灯 (30s)
  154.                                         while(EWF==5)
  155.                                         {
  156.                                                 while(X!=0)
  157.                                                 {
  158.                                                 display1(EWF/10,EWF%10);// 东西方向红灯 (5s)
  159.                                                 display2(X/10,X%10);// 南北方向黄灯 (5s)
  160.                                                 NS_G=OFF; // 南北方向的绿灯关闭
  161.                                                 NS_Y=ON; // 南北方向的黄灯打开
  162.                                                 }
  163.                                         }
  164.                                  }         
  165.                         EW_R=OFF; // 东西方向的红灯关闭
  166.                         NS_G=OFF; // 南北方向的绿灯关闭
  167.                         NS_Y=OFF; // 南北方向的黄灯打开                
  168.                    EWF=30,NSF=25,X=30,Y=25,Z=30,SHU=30;// 重新赋值
  169. /**************** 状态 3:东西绿灯 (25s), 南北红灯 (30s)**************/
  170. /*************** 状态 4:东西黄灯 (5s) , 南北红灯 (30s)****************/
  171.                         while(1)
  172.                         {
  173.                                 init(); // 初始化计时器
  174.                
  175.                            NS_R=ON;// 南北方向的红灯打开
  176.                                 EW_G=ON;// 东西方向的绿灯打开
  177.                                 while(Z!=0)
  178.                                 {
  179.                                         display2(Z/10,Z%10);// 南北方向红灯 (25s)
  180.                                         display1(Y/10,Y%10);// 东西方向绿灯 (30s)
  181.                                         while(Z==5)
  182.                                         {
  183.                                                 while(SHU!=0)
  184.                                                 {
  185.                                                 display1(Z/10,Z%10);// 东西红灯 (5s)
  186.                                                 display2(SHU/10,SHU%10);// 南北绿灯 (5s)
  187.                                                 EW_G=OFF; // 东西方向的绿灯关闭
  188.                                                 EW_Y=ON; // 东西方向的黄灯打开
  189.                                                 }
  190.                                         }
  191.                                  }
  192.                         NS_R=OFF; // 南北方向的红灯关闭
  193.                         EW_G=OFF; // 东西方向的绿灯关闭
  194.                         EW_Y=OFF; // 东西方向的黄灯关闭
  195.                         EWF=30,NSF=25,X=30,Y=25,Z=30,SHU=30;// 重新赋值
  196.                         break;
  197.                         }
  198.                 }       
  199.          }
  200. }
复制代码

了变成了常亮,应该要怎么做呢

I~C}G4S{O9$`BIK(JK_SI3C.png (85.94 KB, 下载次数: 32)

I~C}G4S{O9$`BIK(JK_SI3C.png

T8JP0IO54H75)}XK)QP_7)H.png (82.5 KB, 下载次数: 40)

T8JP0IO54H75)}XK)QP_7)H.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:609524 发表于 2021-12-13 21:03 | 只看该作者
数组里面的值要改
回复

使用道具 举报

板凳
ID:752974 发表于 2021-12-15 08:42 | 只看该作者
初学者用仿真软件学习单片机是很好的途径,但是在设计电路时一定要按实际使用情况周密考虑电路的组成,不然易产生误导。就楼主的两个仿真电路,在实际使用中肯定是不行,就是段和位的驱动必须考虑好。
回复

使用道具 举报

地板
ID:863590 发表于 2021-12-15 10:41 | 只看该作者
munuc_w 发表于 2021-12-15 08:42
初学者用仿真软件学习单片机是很好的途径,但是在设计电路时一定要按实际使用情况周密考虑电路的组成,不然 ...

好的谢谢你…
回复

使用道具 举报

5#
ID:863590 发表于 2021-12-15 10:41 | 只看该作者
杨天想 发表于 2021-12-13 21:03
数组里面的值要改

嗯……
回复

使用道具 举报

6#
ID:989612 发表于 2021-12-15 13:23 | 只看该作者
把数组里的共阴极的数都改成共阳极的数就可以了,然后仿真里的接电压变成接地就行了吧

IMG_20211215_131847.jpg (3.18 MB, 下载次数: 40)

IMG_20211215_131847.jpg
回复

使用道具 举报

7#
ID:407019 发表于 2021-12-15 15:26 | 只看该作者
看着下边的两个数码管的 abcd网络标号没有添加                                                                                           此外建议添加使用HC138译码器  这样IO口可以节约很多
回复

使用道具 举报

8#
ID:979299 发表于 2021-12-16 12:33 | 只看该作者
04.#define ON 0   
05.#define OFF 1
把这里的0和1互换一下即可
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// CA共阳极数码管赋值
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// CC共阴极数码管赋值
回复

使用道具 举报

9#
ID:992806 发表于 2021-12-16 15:42 | 只看该作者
检查共阴数码管的代码是否改成了共阳数码管的代码,同时电路也需要一些改变。基本上就这些了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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