久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5520|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的掃碼槍顯示程序 超市收銀系統(tǒng)設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
該設(shè)計(jì)是基于51單片機(jī)的超市收銀系統(tǒng),主要就是將掃碼槍掃出的碼通過51單片機(jī)顯示到顯示屏中。這里我能夠成功的實(shí)現(xiàn)將掃碼槍掃個(gè)碼在屏幕中顯示出來,但是這里是基于超市收銀的,我將它屏蔽了,在主程序中是一個(gè)for循環(huán)。如果有需要的可以嘗試一下。該程序我已經(jīng)通過測試沒有問題。同時(shí)它還能夠使用eeprom將總價(jià)儲(chǔ)存,上電后按一下按鍵就能夠恢復(fù)。
該板子上有兩個(gè)按鍵,一個(gè)是單片機(jī)復(fù)位按鍵,另一個(gè)是控制按鍵。掃碼槍先掃碼,然后按一下得出總價(jià)錢,再按一下清零,重新輸入。掃碼槍和單片機(jī)之間要用Ttl轉(zhuǎn)Rs 232轉(zhuǎn)換轉(zhuǎn)換。其他的注意事項(xiàng)我總結(jié)了一下在下邊:
1.掃碼槍用九針串口
2.用ttl轉(zhuǎn)串口的轉(zhuǎn)換器
3.二維碼共有13位,串口接收會(huì)有14位
  第14位是停止位,所以編程顯示時(shí)要
  留14位,顯示13位;
4.一般掃碼槍波特率是9600,無校驗(yàn)位
   有一個(gè)停止位;
5.串口發(fā)送,單片機(jī)接收的是ascii碼,
  串口發(fā)單片機(jī)接收     實(shí)際數(shù)值
       0x30                0
       0x31                1
       0x32                2
       0x33                3
        ...               ...
       0x39                9

要用條件語句來轉(zhuǎn)化一下

制作出來的實(shí)物圖如下:


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include"n5110.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. //uchar dj=0,zj=0,i=0;                             //商品單價(jià)和總價(jià)數(shù)
  7. uint zj=0,dzj,i=0;                     //總價(jià)          dzj掉電后的數(shù)據(jù)
  8. sbit PIN_RXD = P3^0;                          //串口
  9. sbit PIN_TXD = P3^1;                          //串口
  10. sbit k1=P2^3;
  11. bit RxdEnd = 0;                                          //串口
  12. bit RxdOrTxd = 0;                                  //串口
  13. bit TxdEnd = 0;                                          //串口

  14. unsigned char RxdBuf = 0;                  //串口
  15. unsigned char TxdBuf = 0;                  //串口
  16. //***********iic**********************************
  17. extern void InitLcd1602();
  18. extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  19. extern void I2CStart();
  20. extern void I2CStop();
  21. extern unsigned char I2CReadACK();
  22. extern unsigned char I2CReadNAK();
  23. extern bit I2CWrite(unsigned char dat);
  24. extern void E2Read(unsigned char *buf, unsigned char addr, unsigned char len);
  25. extern void E2Write(unsigned char *buf, unsigned char addr, unsigned char len);


  26. //************************************************





  27. void delay(uchar x);
  28. void shuzi(uchar x,uchar y,uchar e ) ;
  29. //void lcdwritechar(uchar x,uchar y,uchar c);
  30. void ConfigUART(unsigned int baud);                        ////串口
  31. void StartRXD();                                                                        //串口
  32. //void StartTXD(unsigned char dat);                                        //串口
  33. void jiaqian(uint unmber);
  34. void jiaqian(uint unmber);

  35. void At24c02Write(unsigned char ,unsigned char );
  36. unsigned char At24c02Read(unsigned char );
  37. void Delay1ms();
  38. //void Timer0Configuration();
  39. uchar huan[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
  40. uchar wenben[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
  41. unsigned char code font6_16[][12]={
  42. 0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,         //0
  43. 0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00,          //1
  44. 0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00,         //2
  45. 0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,         //3
  46. 0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00,         //4
  47. 0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00,         //5
  48. 0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00,         //6
  49. 0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,         //7
  50. 0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,         //8
  51. 0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00,         //9
  52. 0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,        //:       
  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,        //.
  54. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,        // 空                                                                                                          
  55. };                                                                                                                                                                                                                 
  56. void main()
  57. {
  58.      unsigned char ii=0,ki=0,zi=1;          //gzj=總價(jià)的ge位,...         ,gzj,szj,bzj,qzj
  59.         unsigned char buf[4];                                                                 
  60.         unsigned char cbuf[4];
  61.         bit flag=0,flag1=1;
  62.         lcdinit();       
  63.                 jibenxianshi();                         //顯示基本格局
  64.                 shuzi(24,0,10 );                 //:
  65.                
  66.              shuzi(36,2,0 );                //0           單價(jià)哪一行
  67.                  shuzi(43,2,0 );                //0
  68.                  shuzi(49,2,11 );                //.
  69.                  shuzi(55,2,0 );                 //0
  70.                  shuzi(24,2,10 );                 //:

  71.                  shuzi(36,4,0 );                //0           總價(jià)哪一行
  72.                  shuzi(42,4,0 );                //0
  73.                  shuzi(48,4,0 );                //0
  74.                  shuzi(54,4,11);                //.
  75.                  shuzi(60,4,0 );                 //0
  76.                  shuzi(24,4,10 );                 //:           總價(jià)前的冒號(hào)

  77.                 EA = 1;                                                                //串口
  78.             ConfigUART(9600);                                                //串口
  79.                 k1=1;
  80.     while(1)
  81.         {                           

  82. //********************************************************
  83. if(huan[0]==6&&huan[1]==9&&huan[2]==4&&huan[3]==2&&huan[4]==7)        //商品一  69427
  84. {
  85.                   shuzi(36,2,1 );                //1          
  86.                   shuzi(43,2,2 );                //2
  87.                   shuzi(49,2,11 );                //.
  88.                   shuzi(55,2,0 );                 //3
  89.                     shuzi(65,0,1);         //商品1  
  90.                     zj=zj+120;
  91.                  
  92.                 buf[3]=zj/1000;                 //千
  93.             buf[2]=zj/100%10;         //百
  94.             buf[1]=zj/10%10;         //十
  95.         buf[0]=zj%10;                 //個(gè)
  96.            E2Write(buf,0x90,4);        //E2Write(buf, 0x90, sizeof(buf));
  97.                         delay(50);
  98. //                  jiaqian(zj);
  99.                     huan[0]=0;
  100.                         huan[1]=0;
  101.                         huan[2]=0;
  102.                         huan[3]=0;
  103.                



  104. }


  105. if(huan[0]==6&&huan[1]==9&&huan[2]==5&&huan[3]==4&&huan[4]==4)         //商品2    69544
  106. {
  107.                   shuzi(36,2,0 );                //0          
  108.                   shuzi(43,2,4 );                //4
  109.                   shuzi(49,2,11 );                //.
  110.                   shuzi(55,2,0 );                 //0
  111.                   shuzi(65,0,2);                //商品2         
  112.           
  113.                   zj=zj+40;
  114.                 buf[3]=zj/1000;                 //千
  115.             buf[2]=zj/100%10;         //百
  116.             buf[1]=zj/10%10;         //十
  117.         buf[0]=zj%10;                 //個(gè)
  118.            E2Write(buf, 0x90,4);         //          E2Write(buf, 0x90, sizeof(buf));
  119.                   
  120.                         delay(50);
  121. //          jiaqian(zj);             
  122.                     huan[0]=0;
  123.                         huan[1]=0;
  124.                         huan[2]=0;
  125.                         huan[3]=0;
  126.                
  127. }


  128.   if(huan[0]==6&&huan[1]==9&&huan[2]==7&&huan[3]==1&&huan[4]==1)  //商品3   69711
  129. {            
  130.                   shuzi(36,2,0 );                //0          
  131.                   shuzi(43,2,8 );                //8
  132.                   shuzi(49,2,11 );                //.
  133.                   shuzi(55,2,0);                 //3
  134.                   shuzi(65,0,3);                //商品3
  135.    
  136.                   zj=zj+80;

  137.                 buf[3]=zj/1000;                 //千
  138.             buf[2]=zj/100%10;         //百
  139.             buf[1]=zj/10%10;         //十
  140.         buf[0]=zj%10;                 //個(gè)
  141.            E2Write(buf, 0x90, 4);        //          E2Write(buf, 0x90, sizeof(buf));
  142.                         delay(50);
  143. //           jiaqian(zj);                                                                         
  144.                     huan[0]=0;
  145.                         huan[1]=0;
  146.                         huan[2]=0;
  147.                         huan[3]=0;
  148.                

  149. }

  150. //*******************************************************


  151.   if(huan[0]==0&&huan[1]==0&&huan[2]==0&&huan[3]==0&&huan[4]==0)
  152. {
  153.                 shuzi(65,0,12);                 //商品

  154.                   shuzi(36,2,0 );                //0          
  155.                   shuzi(43,2,0 );                //0
  156.                   shuzi(49,2,11 );                //.
  157.                   shuzi(55,2,0 );                 //0


  158. }                         
  159. ////*****************成功在顯示屏上顯示二維碼對(duì)應(yīng)的數(shù)字**************************************
  160. //                           for(ii=0;ii<13;ii++)
  161. //                         {
  162. //                        shuzi(ki,4,huan[ii]);
  163. //                                 ki=ki+6;
  164. //                                 if(ki>=77)
  165. //                                 ki=0;
  166. //                         }
  167. //                         delay(200);
  168. ////********************************************
  169. //                    
  170.          if(k1==0&&flag1==1)        //
  171.                 {
  172.       delay(150);            
  173.         if(k1==0&&flag1==1)//
  174.                  {
  175.                
  176.                
  177.            E2Read(buf, 0x90,4);           //  E2Read(cbuf, 0x90, sizeof(buf));
  178.                  delay(100);
  179.               dzj=buf[3]*1000+buf[2]*100+buf[1]*10+buf[0];
  180.                   zj=dzj;
  181.                   jiaqian(zj);
  182.                                                                                               
  183.                    flag1=0;          
  184.                     shuzi(78,0,1);
  185.                
  186.            }
  187.           
  188.            }
  189. //
  190. //
  191.            if(k1==0&&flag1==0)
  192.                 {
  193.         delay(150);
  194.                         if(k1==0&&flag1==0)
  195.                  {                  
  196.                                                   
  197.                     huan[0]=0;
  198.                         huan[1]=0;
  199.                         huan[2]=0;
  200.                         huan[3]=0;
  201.                         huan[4]=0;  
  202.                         jiaqian(0);
  203.                            zj=0;
  204.                           buf[3]=0;                 //千
  205.                     buf[2]=0;         //百
  206.                     buf[1]=0;         //十
  207.                 buf[0]=0;                 //個(gè)
  208.            E2Write( cbuf, 0x90, 4);///         E2Write( buf, 0x90, sizeof(buf));       
  209.                         delay(150);       
  210.                            flag1=1;   
  211.                         shuzi(78,0,2);
  212.            }          
  213.            }
  214.          




  215.         }
  216. }  
  217.    
  218. void delay(uchar x)                                  
  219. {
  220.   uint i,j;
  221.   for(j=x;j>0;j--)
  222.   for(i=110;i>0;i--);
  223. }

  224. /***********************************************************
  225. /*        5110相關(guān)程序
  226. /***********************************************************/
  227. void shuzi(uchar x,uchar y,uchar e )    //12*16
  228. {
  229.            uchar j,k;
  230.      lcdsetxy(x,y);               
  231.    for(j=0;j<6;j++)
  232.    {
  233.      lcdwritebyte(font6_16[e][j],1);
  234.          
  235.    }
  236.    lcdsetxy(x,y+1);
  237.       for(k=6;k<12;k++)
  238.    {
  239.      lcdwritebyte(font6_16[e][k],1);
  240.         }

  241. }

  242. void jiaqian(uint unmber)
  243. {
  244.    uchar ge,shi,bai,xs;                  //xs=小數(shù)

  245. //   xshu=
  246.    xs= unmber%10;
  247.    ge=unmber/10%10;
  248.    shi=unmber/100%10;
  249.    bai=unmber/1000;

  250.          shuzi(36,4,bai);                //0           總價(jià)哪一行
  251.          shuzi(42,4,shi);                //0
  252.          shuzi(48,4,ge);                //0
  253.          shuzi(54,4,11);                //.
  254.          shuzi(60,4,xs);                 //0


  255. }

  256. /********************************************************************
  257. /*串口相關(guān)程序
  258. /********************************************************************/
  259. void ConfigUART(unsigned int baud)
  260. {
  261.     SCON  = 0x50;  //配置串口為模式1
  262.     TMOD &= 0x0F;  //清零T1的控制位
  263.     TMOD |= 0x20;  //配置T1為模式2
  264.     TH1 = 256 - (11059200/12/32)/baud;  //計(jì)算T1重載值
  265.     TL1 = TH1;     //初值等于重載值
  266.     ET1 = 0;       //禁止T1中斷
  267.     ES  = 1;       //使能串口中斷
  268.     TR1 = 1;       //啟動(dòng)T1
  269. }


  270. void InterruptUART() interrupt 4
  271. {

  272.         if(RI)
  273.         {
  274.                 RI = 0;

  275.         if(SBUF==0x30)
  276.            huan[i]=0;
  277.         else
  278.         if(SBUF==0x31)
  279.            huan[i]=1;
  280.         else
  281.         if(SBUF==0x32)
  282.         {
  283.           huan[i]=2;
  284.         }
  285.                 else
  286.         if(SBUF==0x33)
  287.         {
  288.           huan[i]=3;
  289.         }
  290.             else
  291.         if(SBUF==0x34)
  292.         {
  293.           huan[i]=4;
  294.         }
  295.                 else
  296.         if(SBUF==0x35)
  297.         {
  298.           huan[i]=5;
  299.         }
  300.                 else
  301.         if(SBUF==0x36)
  302.         {
  303.           huan[i]=6;
  304.         }
  305.                 else
  306.         if(SBUF==0x37)
  307.         {
  308.           huan[i]=7;
  309.         }
  310.                 else
  311.         if(SBUF==0x38)
  312.         {
  313.           huan[i]=8;
  314.         }
  315.                 else
  316.         if(SBUF==0x39)
  317.         {
  318.           huan[i]=9;
  319.         }
  320.         i++;               
  321.         if(i>=14)
  322.         i=0;
  323.         }

  324.        


  325.    






  326. }                                                                  
  327. /***************************************************************
  328. /*         eeprom 相關(guān)程序
  329. /*****************************************************************/
  330. /*******************************************************************************
  331. * 函數(shù)名         : void At24c02Write(unsigned char addr,unsigned char dat)
  332. * 函數(shù)功能                   : 往24c02的一個(gè)地址寫入一個(gè)數(shù)據(jù)
  333. * 輸入           : 無
  334. * 輸出                  : 無
  335. *******************************************************************************/

  336. //void E2Read(unsigned char *buf, unsigned char addr, unsigned char len)
  337. //{
  338. //        do{
  339. //                I2CStart();
  340. //                if(I2CWrite(0x50 << 1))
  341. //                {
  342. //                        break;
  343. //                }
  344. //                I2CStop();
  345. //          }while(1);
  346. //        I2CWrite(addr);
  347. //        I2CStart();
  348. //        I2CWrite((0x50 << 1) | 0x01);
  349. //        while(len > 1)
  350. //        {
  351. //                *buf++ = I2CReadACK();
  352. //                len--;
  353. ……………………

  354. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
shiyan1.zip (79.79 KB, 下載次數(shù): 57)
掃碼槍.PDF (79.18 KB, 下載次數(shù): 55)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:958643 發(fā)表于 2021-8-3 16:22 | 只看該作者
正在研究單片機(jī)和掃描槍通訊,下載學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区二区三区一线天视频 | 亚洲精品一区二区三区中文字幕 | 国产一级片免费在线观看 | 男女深夜网站 | 日韩国产在线观看 | 91日b| 国产高清视频一区 | 国产精品日韩欧美一区二区三区 | 99国产精品久久久久久久 | 欧美专区在线 | 一区二区三区四区免费在线观看 | 永久免费av | 欧美成人精品一区二区男人看 | 欧美日韩一区二区在线播放 | 噜啊噜在线 | 亚洲一区二区三区四区五区中文 | 日韩中文在线视频 | 国产精品国产三级国产aⅴ无密码 | 亚洲国产高清在线观看 | 99综合| 国产不卡一区 | 天堂一区在线观看 | 91免费观看 | 欧美中文字幕 | 一级中国毛片 | 精品在线一区二区 | www.色午夜.com | 一区二区精品 | 超碰人人艹 | 欧美 日韩 国产 成人 在线 91 | 欧美一区二区三区久久精品视 | 97偷拍视频 | 美日韩中文字幕 | 日韩在线精品强乱中文字幕 | 国产成人免费视频网站视频社区 | 国产一级成人 | 91在线| 精品国产一区二区三区四区在线 | www亚洲精品 | 亚洲国产成人精品女人久久久 | 欧美色性 |