找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机设计传送带产品计数器不好使

[复制链接]
跳转到指定楼层
#
这个是我在CSDN上找到的一个产品计数器,但是我按照上面弄却不好使,有人能帮我解决一些吗
这个是那个网站
基于“51系列单片机”的传送带产品计数器设计(包含Proteus仿真模拟、keil编程,以及实物设计过程)_单片机设计传送带产品计数器-CSDN博客

屏幕截图 2024-06-23 201740.png (209.47 KB, 下载次数: 13)

产品计数器

产品计数器

产品计数器.zip

109.91 KB, 下载次数: 10

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

14#
ID:1127862 发表于 2024-7-2 14:14 | 只看该作者
方程式d 发表于 2024-6-28 20:33
兄弟们,好像是那个网站上的代码不对,今天那个博主给我发仿真了,他的是好使得,但是他没发.c源文件。他说 ...

为啥按了键盘上的按键没变化

回复

使用道具 举报

13#
ID:161164 发表于 2024-7-2 11:56 | 只看该作者
key_scan()里有松手检测
有些按键按死了,所以影响显示了

回复

使用道具 举报

12#
ID:161164 发表于 2024-7-2 11:38 | 只看该作者
166165489 发表于 2024-7-2 11:09
为什么我也还是那个键盘用不了呀

请看我的贴子
解决某些版本Proteus阵列键盘失效的奇葩方法
回复

使用道具 举报

11#
ID:1127862 发表于 2024-7-2 11:09 | 只看该作者
方程式d 发表于 2024-6-28 20:33
兄弟们,好像是那个网站上的代码不对,今天那个博主给我发仿真了,他的是好使得,但是他没发.c源文件。他说 ...

为什么我也还是那个键盘用不了呀

回复

使用道具 举报

10#
ID:1126506 发表于 2024-6-28 20:33 | 只看该作者
兄弟们,好像是那个网站上的代码不对,今天那个博主给我发仿真了,他的是好使得,但是他没发.c源文件。他说源文件到不到了, 我把CSDN上的代码建立一个工程在仿真加上新的.hex文件还是出现那个问题,但是使用他发的hex文件就好使了。感谢兄弟们,下面是那个博主给我发的,有感兴趣得兄弟可以看看,感谢。能将正确得源代码弄出来就更好了,因为我想加入蜂鸣器,自动计数,这个是点击计数,有点累

仿真模拟.zip

70.09 KB, 下载次数: 3

产品计数器

回复

使用道具 举报

9#
ID:1126506 发表于 2024-6-24 20:23 | 只看该作者
不好意思,因为这个单片机上学期学的,现在有点忘得干净了导致弄得东西很乱,等着我有时间再整理一下。
回复

使用道具 举报

8#
ID:161164 发表于 2024-6-24 17:20 | 只看该作者
f.uvproj打不开
dfsd.uvproj缺了a.c
proteus可以打开
运行仿真看到的是数码管随机显示单一个0
估计是没消影
回复

使用道具 举报

7#
ID:267719 发表于 2024-6-24 16:36 | 只看该作者
里面找到个文件名为f的文件,没有扩展名。可能是源码。现在贴出来。

  1. #include<reg51.h>
  2. #define PKEY P1
  3. #define PDIG P2

  4. sbit LSA = P3 ^ 0;
  5. sbit LSB = P3 ^ 1;
  6. sbit LSC = P3 ^ 3;
  7. sbit IN0 = P3 ^ 4;
  8. sbit IN1 = P3 ^ 5;
  9. sbit E = P3 ^ 6;

  10. unsigned char code smgnum[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//?????0~9??
  11. unsigned char code smgmum[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//?????0~9??
  12. unsigned int gd;
  13. unsigned int num=99;
  14. unsigned int keyswitch, tuiwei, wei = 0, x, y;
  15. unsigned int box[8]={0};
  16. unsigned int i;

  17. void delay(unsigned int x)                //延迟函数
  18. {
  19.     unsigned int i, j;
  20.     for (i = 0; i < x; i++)
  21.         for (j = 0; j < 120; j++) ;
  22. }

  23. void kaishi()                             //电机正转
  24. {
  25.     IN0 = 1;
  26.     IN1 = 0;
  27.     delay(5);
  28. }

  29. void daofang()                            //电机倒转
  30. {
  31.     IN1 = 1;
  32.     IN0 = 0;
  33.     delay(5);
  34. }

  35. void int0_init(void)                      //开启外部中断
  36. {
  37.         EX0=1;
  38.         IT0=1;
  39.         EA=1;
  40. }

  41. void key_scan()                           //矩阵键盘检测函数
  42. {
  43.     unsigned char temp0 = 0, temp1 = 0, temp = 0;
  44.     unsigned int a = 0;
  45.     PKEY = 0xf0;
  46.     if (PKEY != 0xf0)
  47.     {
  48.         delay(20);
  49.         if (PKEY != 0xf0)
  50.         {
  51.             temp0 = PKEY;
  52.             PKEY = 0x0f;
  53.             if (PKEY != 0x0f)
  54.             {
  55.                 temp1 = PKEY;
  56.             }
  57.             temp = temp0 + temp1;
  58.             if (temp == 0xee) { num = 1; }
  59.             else if (temp == 0xed) { num = 2; }
  60.             else if (temp == 0xeb) { num = 3; }
  61.             else if (temp == 0xe7) { num = 12; }
  62.             else if (temp == 0xde) { num = 4; }
  63.             else if (temp == 0xdd) { num = 5; }
  64.             else if (temp == 0xdb) { num = 6; }
  65.             else if (temp == 0xd7) { num = 13; }
  66.             else if (temp == 0xbe) { num = 7; }
  67.             else if (temp == 0xbd) { num = 8; }
  68.             else if (temp == 0xbb) { num = 9; }
  69.             else if (temp == 0xb7) { num = 14; }
  70.             else if (temp == 0x7e) { num = 10; }
  71.             else if (temp == 0x7d) { num = 0; }
  72.             else if (temp == 0x7b) { num = 11; }
  73.             else if (temp == 0x77) { num = 15; }
  74.             if (num == 0 || num == 1 || num == 2 || num == 3 || num == 4 || num == 5 || num == 6 || num == 7 || num == 8 || num == 9)
  75.                 keyswitch = 1;
  76.             if (num == 10)
  77.                 tuiwei = 1;
  78.             while ((a < 50) && (PKEY != 0x0f))
  79.             {
  80.                 delay(10);
  81.                 a++;
  82.             }
  83.         }
  84.     }
  85. }
  86.   
  87. void smg()                           //数码管显示函数
  88. {
  89.     LSA = 1; LSB = 1; LSC = 1;
  90.     PDIG = smgnum[box[0]];
  91.     delay(1); PDIG = 0x00;

  92.     LSA = 0; LSB = 1; LSC = 1;
  93.     PDIG = smgnum[box[1]];
  94.     delay(1); PDIG = 0x00;

  95.     LSA = 1; LSB = 0; LSC = 1;
  96.     PDIG = smgnum[box[2]];
  97.     delay(1); PDIG = 0x00;

  98.     LSA = 0; LSB = 0; LSC = 1;
  99.     PDIG = smgnum[box[3]];
  100.     delay(1); PDIG = 0x00;

  101.     LSA = 1; LSB = 1; LSC = 0;
  102.     PDIG = smgnum[box[4]];
  103.     delay(1); PDIG = 0x00;

  104.     LSA = 0; LSB = 1; LSC = 0;
  105.     PDIG = smgnum[box[5]];
  106.     delay(1); PDIG = 0x00;

  107.     LSA = 1; LSB = 0; LSC = 0;
  108.     PDIG = smgnum[box[6]];
  109.     delay(1); PDIG = 0x00;

  110.     LSA = 0; LSB = 0; LSC = 0;
  111.     PDIG = smgnum[box[7]];
  112.     delay(1); PDIG = 0x00;
  113. }

  114. void main()                                    //主函数
  115. {
  116.                 int0_init();
  117.     while (1)
  118.     {
  119.         smg();
  120.         key_scan();
  121.         if (num == 12)                         //按键控制直流电机正转
  122.         {
  123.             x = 1;
  124.             y = 0;
  125.         }
  126.         if (x == 1)
  127.         {
  128.             kaishi();
  129.             if ((box[7] == 0) && (box[6] == 0) && (box[5] == 0) && (box[4] == 0))
  130.             {
  131.                 kaishi();
  132.             }
  133.             else
  134.             {
  135.                 if ((box[3] == box[7]) && (box[2] == box[6]) && (box[1] == box[5]) && (box[0] == box[4]))
  136.                 {
  137.                     num = 13;
  138.                 }
  139.             }
  140.         }
  141.         if (num == 14)                    //按键控制直流电机倒转
  142.         {
  143.             y = 1;
  144.             x = 0;
  145.         }
  146.         if (y == 1)
  147.             daofang();
  148.             if ((box[7] == 0) && (box[6] == 0) && (box[5] == 0) && (box[4] == 0))
  149.             {
  150.                 daofang();
  151.             }
  152.             else
  153.             {
  154.                 if ((box[3] == box[7]) && (box[2] == box[6]) && (box[1] == box[5]) && (box[0] == box[4]))
  155.                 {
  156.                     num = 13;
  157.                 }
  158.             }
  159.         }
  160.         if (num == 13)                             //按键控制直流电机停止
  161.         {
  162.             E = 1;
  163.             IN0 = 1;
  164.             IN1 = 1;
  165.             x = 0;
  166.             y = 0;
  167.             num = 99;
  168.         }
  169.         if ((keyswitch == 1) && (wei < 4))        //预设数值输入
  170.         {
  171.             for (i = 7; i > 4; i--)
  172.             { box[i] = box[i - 1]; }
  173.             box[4] = num;
  174.             keyswitch = 0;
  175.             wei++;
  176.         }
  177.         if (num == 11)                           //预设数值清零
  178.         {
  179.             for (i = 4; i < 8; i++)
  180.             {
  181.                 box[i] = 0;
  182.             }
  183.             wei = 0;
  184.         }
  185.         if (num == 15)                          //计数数值清零
  186.         {
  187.             gd = 0;
  188.             num = 99;
  189.         }
  190.         if (tuiwei == 1)                        //预设数值退位
  191.         {
  192.             box[4] = box[5];
  193.             box[5] = box[6];
  194.             box[6] = box[7];
  195.             box[7] = 0;
  196.             if (wei > 0)
  197.                 wei--;
  198.             tuiwei = 0;
  199.         }
  200.         box[0] = gd  % 10;
  201.         box[1] = gd / 10 % 10;
  202.         box[2] = gd / 100 % 10;
  203.         box[3] = gd / 1000 % 10;
  204.     }
  205. }

  206. void int0() interrupt 0                  //中断函数
  207. {
  208.         gd++;
  209.         delay(200);
  210. }
复制代码
回复

使用道具 举报

6#
ID:1109793 发表于 2024-6-24 13:52 | 只看该作者
方程式d 发表于 2024-6-24 13:26
这个具体是咋回事呀

下载的文件用KEIL打不开,用proteus8也打不开,版本太低了,抱歉
回复

使用道具 举报

5#
ID:1126506 发表于 2024-6-24 13:26 | 只看该作者
xiaobendan001 发表于 2024-6-24 10:50
仿真,真的不太会啊

这个具体是咋回事呀
回复

使用道具 举报

地板
ID:1109793 发表于 2024-6-24 10:50 | 只看该作者
仿真,真的不太会啊
回复

使用道具 举报

板凳
ID:1126506 发表于 2024-6-24 08:27 | 只看该作者
我开始仿真,数码管显示的数字都是0 ,每次都是显示一位,显示从左到右。不知道怎么演示这个程序,按各种开关都没有反应,因为CSDN上没有演示过程,我不知道他这个到底是如何操作的,您能帮我看看吗,哥
回复

使用道具 举报

沙发
ID:1109793 发表于 2024-6-24 07:29 | 只看该作者
对啊,不好使的具体现象是什么?
回复

使用道具 举报

楼主
ID:161164 发表于 2024-6-23 22:20 | 只看该作者
什么叫不好使?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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