找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机商品条形码识别器设计(文档+电路+程序)

[复制链接]
跳转到指定楼层
楼主
本次设计便携式商品条形码识别器,由四大模块组成。激光扫描,单片机,12864液晶显示器,电源模块。其工作的大致原理为,激光扫描到条形码并进行存储。同时蜂鸣器开始鸣响,然后扫描器将数据信息通过串口通信传输给单片机,单片机收到信息后会与事先设定好的程序进行对比,并将对比后的信息传输给12864液晶显示器。显示器也会根据事先设计好的程序进行相应的显示格式,并完成工作。





单片机源程序如下:
  1. #include  
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uint table1=0;
  10. unsigned char num,flag,a,i,j;
  11. uchar k;
  12. //uchar code table[]="I get ";
  13. uchar table_a[13]={"0123456789012"};
  14. uchar table_b[11]={"0123456789"};
  15. uchar code pin1[] = {"产品名称:"};
  16. uchar code pin2[] = {"产品价格:"};
  17. uchar code pin3[] = {"              元"};
  18. uchar code dis0[] = {"0123456789."};
  19. uchar code dis1[] = {"碧禹饮用水  "};
  20. uchar code dis2[] = {"心相印卫生纸"};
  21. uchar code dis3[] = {"小露珠抽纸  "};
  22. uchar code dis4[] = {"东立A4纸    "};
  23. uchar code dis5[] = {"美汁源可乐  "};
  24. uchar code dis6[] = {"便携条形码识别器"};
  25. uchar code s1[11] = {"36402200042"};          //碧禹应用水
  26. uchar code s2[11] = {"22868289158"};          //心心相印纸
  27. uchar code s3[11] = {"34704601062"};          //小露珠抽纸
  28. uchar code s4[11] = {"23608677129"};          //东立A4纸
  29. uchar code s5[11] = {"56416200166"};          //美汁源
  30. uchar code s6[11] = {"56416200166"};          //美汁源
  31. void change();
  32. void duibi();
  33. char cmp(uchar *str,uchar *str1);
  34. void init()
  35. {
  36.         TMOD=0x20;
  37.         TH1=0xfd;
  38.         TL1=0xfd;
  39.         TR1=1;
  40.         REN=1;
  41.         SM0=0;
  42.         SM1=1;        
  43.         EA=1;
  44.         ES=1;        
  45. }
  46. void main()
  47. {
  48.         init();
  49.         Delay400Ms(); //启动等待,等LCD讲入工作状态
  50.     LCDInit();    //LCM初始化
  51.     Delay5Ms();   //延时片刻(可不要)
  52.         DisplayListChar(0,0,dis6);        //显示字库中的中文数字   
  53.         DisplayListChar(0,2,pin1);        //显示字库中的中文数字
  54.         DisplayListChar(0,4,pin3);        //显示字库中的中文数字
  55.         DisplayListChar(0,4,pin2);        //显示字库中的中文数字
  56.         while(1)
  57.         {
  58. //                change()
  59.                 duibi();
  60.                 switch(num)
  61.                 {
  62.                         case 0:DisplayListChar(0,3,dis1);lcd_pos(3,5);WriteDataLCD(dis0[0]);WriteDataLCD(dis0[3]);break;
  63.                         case 1:DisplayListChar(0,3,dis2);lcd_pos(3,5);WriteDataLCD(dis0[0]);WriteDataLCD(dis0[1]);break;
  64.                         case 2:DisplayListChar(0,3,dis3);lcd_pos(3,5);WriteDataLCD(dis0[0]);WriteDataLCD(dis0[3]);break;
  65.                         case 3:DisplayListChar(0,3,dis4);lcd_pos(3,5);WriteDataLCD(dis0[2]);WriteDataLCD(dis0[0]);break;
  66.                         case 4:DisplayListChar(0,3,dis5);lcd_pos(3,5);WriteDataLCD(dis0[0]);WriteDataLCD(dis0[4]);break;        
  67.                 }
  68. /*                lcd_pos(0,0);             //设置显示位置为第二行的第1个字符            
  69.             for(i=0;i<11;i++)
  70.                   {
  71.                                    k=table_b[i]-0x30;
  72. //                                 k=s1[i]-0x30;
  73.                              WriteDataLCD(dis0[k]); //
  74.                                  Delay5Ms();                                 
  75.                   }                        */
  76.         }
  77. }
  78. void ser() interrupt 4
  79. {
  80.         RI=0;
  81.         table_a[table1]=SBUF;
  82.         if(table_a[0]==0x36)
  83.                 table1++;
  84. if(table1>12)  table1=0;
  85. }
  86. void duibi()
  87. {
  88.         for(i=0;i<13;i++)
  89.           {
  90.                    table_b[i]=table_a[i+2];                                 
  91.           }
  92.         if(cmp(table_b,s1)==1) num=0;
  93.         if(cmp(table_b,s2)==1) num=1;
  94.         if(cmp(table_b,s3)==1) num=2;
  95.         if(cmp(table_b,s4)==1) num=3;
  96.         if(cmp(table_b,s5)==1) num=4;
  97. }
  98. char cmp(uchar *str,uchar *str1)
  99. {
  100.          int d,c=0;
  101.          for(d=0;d<11;d++)
  102.          {
  103.                  if(str[d]!=str1[d])
  104.                         {c=0;break;}
  105.                 else c=1;                        
  106.          }
  107.          return c;
  108. }
复制代码

全部资料51hei下载地址:
文档 电路 程序.zip (977.27 KB, 下载次数: 95)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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