找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机红外传送带设计

[复制链接]
跳转到指定楼层
楼主
ID:326613 发表于 2018-5-10 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
技术要求:
(1)用独立按键控制传送带的启动或停止;
(2)用光电传感器检测通过其的产品数量;
(3)用LED显示传送带通过产品的数量;
(4)用矩阵键盘预置终值,当计数达到终值时,传送带停止;

传动采用步进电机模拟,资料很多,本程序未附该部分源码。

单片机源程序如下:

  1.     /*16进制数码管显示对应按键键值,单一数码管显示,无需扫描*/

  2. #include < reg52.h >

  3. sbit IR_INPUT = P3^2;                        //P3.3引脚设定
  4. //sbit led = P0^0;
  5. sbit ADDR0 = P1^0;
  6. sbit ADDR1 = P1^1;
  7. sbit ADDR2 = P1^2;
  8. sbit ADDR3 = P1^3;
  9. sbit ENLED = P1^4;
  10. sbit KEY_IN_1 = P2^4;
  11. sbit KEY_IN_2 = P2^5;
  12. sbit KEY_IN_3 = P2^6;
  13. sbit KEY_IN_4 = P2^7;
  14. sbit KEY_OUT_1 = P2^3;   
  15. sbit KEY_OUT_2 = P2^2;   
  16. sbit KEY_OUT_3 = P2^1;   
  17. sbit KEY_OUT_4 = P2^0;   

  18. unsigned char code LedChar[] = {
  19.         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  20.         0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
  21. };
  22. unsigned char KeySta[4][4] = {
  23.         {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
  24. };

  25. unsigned char OptCnt = 0;           //产品数量

  26. void intinit(){

  27.         EA= 1;
  28.         EX0 = 1;           //使能INT0中断
  29.         IT0 = 1;       //设置INT0为正边沿触发
  30.         PX0 = 1;         //外部中断0优先

  31. }                  
  32. void main(){

  33.         unsigned char i,j;
  34.         unsigned char backup[4][4] = {
  35.                 {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
  36.         };
  37.         EA = 1;                 
  38.         ENLED = 0;
  39.         ADDR3 = 1;
  40.         ADDR2 = 1;
  41.         ADDR1 =1 ;
  42.         ADDR0 = 1;
  43.         TMOD = 0x01;
  44.         TH0 = 0xFC;
  45.         TL0 = 0x67;
  46.         intinit();
  47.         ET0 = 1;
  48.         TR0 = 1;

  49.         P0 = LedChar[0];

  50.        
  51.         while (1){
  52.                         for(i=0;i<4;i++){
  53.                                 for(j=0;j<4;j++){
  54.                                         if(backup[i][j] != KeySta[i][j]){
  55.                                                 if(backup[i][j] != 0){
  56.                                                         P0 = (LedChar[i*4+j-OptCnt]);
  57.                                                 }
  58.                                         }
  59.                                 }
  60.                        
  61.                         }       
  62.                
  63.                 }       

  64. }



  65. void IterruptTimer0() interrupt 1{
  66.         unsigned char i;
  67.         static unsigned char keyout = 0;
  68.         static unsigned char keybuf[4][4] = {
  69.                 {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF},
  70.                 {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF}
  71.         };

  72.         TH0 = 0xFC;
  73.         TL0 = 0x67;

  74.         keybuf[keyout][0] = (keybuf[keyout][0] << 1) | KEY_IN_1;
  75.         keybuf[keyout][1] = (keybuf[keyout][1] << 1) | KEY_IN_2;
  76.         keybuf[keyout][2] = (keybuf[keyout][2] << 1) | KEY_IN_3;
  77.         keybuf[keyout][3] = (keybuf[keyout][3] << 1) | KEY_IN_4;

  78.         for (i=0;i<4;i++){
  79.                 if ((keybuf[keyout][i] & 0x0F) == 0x00){
  80.                         KeySta[keyout][i] = 0;
  81.                 }
  82.                 else if ((keybuf[keyout][i] & 0x0F) == 0x0F){
  83.                         KeySta[keyout][i] = 1;
  84.                 }
  85.         }
  86.         keyout++;
  87.         keyout = keyout & 0x03;
  88.         switch(keyout){
  89.                 case 0:KEY_OUT_4 = 1;KEY_OUT_1 = 0;break;       
  90.                 case 1:KEY_OUT_1 = 1;KEY_OUT_2 = 0;break;       
  91.                 case 2:KEY_OUT_2 = 1;KEY_OUT_3 = 0;break;       
  92.                 case 3:KEY_OUT_3 = 1;KEY_OUT_4 = 0;break;       
  93.                 default: break;
  94.         }
  95. }

  96. void chufa()  interrupt 0{        /*需设置中断优先级,与数码管动态扫描区分*/
  97.         IE0 = 0;                                            
  98.         OptCnt++;       
  99.         led=~led;
  100.                                                                           
  101. }                                                                                                                                                                                                                 
复制代码

所有资料51hei提供下载:
51传送带设计.zip (30.53 KB, 下载次数: 66)


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

使用道具 举报

沙发
ID:782002 发表于 2020-6-20 21:19 | 只看该作者
有protues文件吗
回复

使用道具 举报

板凳
ID:782002 发表于 2020-6-20 21:19 | 只看该作者
有protues文件吗
回复

使用道具 举报

地板
ID:785685 发表于 2020-6-21 14:54 | 只看该作者
能不能帮做一个封箱机简单控制程序?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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