欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機的掃碼槍顯示程序 超市收銀系統設計
[打印本頁]
作者:
dddddddeeeee
時間:
2020-3-5 20:15
標題:
基于51單片機的掃碼槍顯示程序 超市收銀系統設計
該設計是基于51單片機的超市收銀系統,主要就是將掃碼槍掃出的碼通過51單片機顯示到顯示屏中。這里我能夠成功的實現將掃碼槍掃個碼在屏幕中顯示出來,但是這里是基于超市收銀的,我將它屏蔽了,在主程序中是一個for循環。如果有需要的可以嘗試一下。該程序我已經通過測試沒有問題。同時它還能夠使用eeprom將總價儲存,上電后按一下按鍵就能夠恢復。
該板子上有兩個按鍵,一個是單片機復位按鍵,另一個是控制按鍵。掃碼槍先掃碼,然后按一下得出總價錢,再按一下清零,重新輸入。掃碼槍和單片機之間要用Ttl轉Rs 232轉換轉換。其他的注意事項我總結了一下在下邊:
1.掃碼槍用九針串口
2.用ttl轉串口的轉換器
3.二維碼共有13位,串口接收會有14位
第14位是停止位,所以編程顯示時要
留14位,顯示13位;
4.一般掃碼槍波特率是9600,無校驗位
有一個停止位;
5.串口發送,單片機接收的是ascii碼,
串口發單片機接收 實際數值
0x30 0
0x31 1
0x32 2
0x33 3
... ...
0x39 9
要用條件語句來轉化一下
制作出來的實物圖如下:
img_0856.png
(5.92 MB, 下載次數: 55)
下載附件
這是電路板
2020-3-5 20:07 上傳
單片機源程序如下:
#include<reg51.h>
#include<intrins.h>
#include"n5110.h"
#define uchar unsigned char
#define uint unsigned int
//uchar dj=0,zj=0,i=0; //商品單價和總價數
uint zj=0,dzj,i=0; //總價 dzj掉電后的數據
sbit PIN_RXD = P3^0; //串口
sbit PIN_TXD = P3^1; //串口
sbit k1=P2^3;
bit RxdEnd = 0; //串口
bit RxdOrTxd = 0; //串口
bit TxdEnd = 0; //串口
unsigned char RxdBuf = 0; //串口
unsigned char TxdBuf = 0; //串口
//***********iic**********************************
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
extern void I2CStart();
extern void I2CStop();
extern unsigned char I2CReadACK();
extern unsigned char I2CReadNAK();
extern bit I2CWrite(unsigned char dat);
extern void E2Read(unsigned char *buf, unsigned char addr, unsigned char len);
extern void E2Write(unsigned char *buf, unsigned char addr, unsigned char len);
//************************************************
void delay(uchar x);
void shuzi(uchar x,uchar y,uchar e ) ;
//void lcdwritechar(uchar x,uchar y,uchar c);
void ConfigUART(unsigned int baud); ////串口
void StartRXD(); //串口
//void StartTXD(unsigned char dat); //串口
void jiaqian(uint unmber);
void jiaqian(uint unmber);
void At24c02Write(unsigned char ,unsigned char );
unsigned char At24c02Read(unsigned char );
void Delay1ms();
//void Timer0Configuration();
uchar huan[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar wenben[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char code font6_16[][12]={
0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //0
0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00, //1
0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00, //2
0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //3
0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00, //4
0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //5
0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //6
0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00, //7
0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //8
0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00, //9
0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00, //:
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00, //.
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 空
};
void main()
{
unsigned char ii=0,ki=0,zi=1; //gzj=總價的ge位,... ,gzj,szj,bzj,qzj
unsigned char buf[4];
unsigned char cbuf[4];
bit flag=0,flag1=1;
lcdinit();
jibenxianshi(); //顯示基本格局
shuzi(24,0,10 ); //:
shuzi(36,2,0 ); //0 單價哪一行
shuzi(43,2,0 ); //0
shuzi(49,2,11 ); //.
shuzi(55,2,0 ); //0
shuzi(24,2,10 ); //:
shuzi(36,4,0 ); //0 總價哪一行
shuzi(42,4,0 ); //0
shuzi(48,4,0 ); //0
shuzi(54,4,11); //.
shuzi(60,4,0 ); //0
shuzi(24,4,10 ); //: 總價前的冒號
EA = 1; //串口
ConfigUART(9600); //串口
k1=1;
while(1)
{
//********************************************************
if(huan[0]==6&&huan[1]==9&&huan[2]==4&&huan[3]==2&&huan[4]==7) //商品一 69427
{
shuzi(36,2,1 ); //1
shuzi(43,2,2 ); //2
shuzi(49,2,11 ); //.
shuzi(55,2,0 ); //3
shuzi(65,0,1); //商品1
zj=zj+120;
buf[3]=zj/1000; //千
buf[2]=zj/100%10; //百
buf[1]=zj/10%10; //十
buf[0]=zj%10; //個
E2Write(buf,0x90,4); //E2Write(buf, 0x90, sizeof(buf));
delay(50);
// jiaqian(zj);
huan[0]=0;
huan[1]=0;
huan[2]=0;
huan[3]=0;
}
if(huan[0]==6&&huan[1]==9&&huan[2]==5&&huan[3]==4&&huan[4]==4) //商品2 69544
{
shuzi(36,2,0 ); //0
shuzi(43,2,4 ); //4
shuzi(49,2,11 ); //.
shuzi(55,2,0 ); //0
shuzi(65,0,2); //商品2
zj=zj+40;
buf[3]=zj/1000; //千
buf[2]=zj/100%10; //百
buf[1]=zj/10%10; //十
buf[0]=zj%10; //個
E2Write(buf, 0x90,4); // E2Write(buf, 0x90, sizeof(buf));
delay(50);
// jiaqian(zj);
huan[0]=0;
huan[1]=0;
huan[2]=0;
huan[3]=0;
}
if(huan[0]==6&&huan[1]==9&&huan[2]==7&&huan[3]==1&&huan[4]==1) //商品3 69711
{
shuzi(36,2,0 ); //0
shuzi(43,2,8 ); //8
shuzi(49,2,11 ); //.
shuzi(55,2,0); //3
shuzi(65,0,3); //商品3
zj=zj+80;
buf[3]=zj/1000; //千
buf[2]=zj/100%10; //百
buf[1]=zj/10%10; //十
buf[0]=zj%10; //個
E2Write(buf, 0x90, 4); // E2Write(buf, 0x90, sizeof(buf));
delay(50);
// jiaqian(zj);
huan[0]=0;
huan[1]=0;
huan[2]=0;
huan[3]=0;
}
//*******************************************************
if(huan[0]==0&&huan[1]==0&&huan[2]==0&&huan[3]==0&&huan[4]==0)
{
shuzi(65,0,12); //商品
shuzi(36,2,0 ); //0
shuzi(43,2,0 ); //0
shuzi(49,2,11 ); //.
shuzi(55,2,0 ); //0
}
////*****************成功在顯示屏上顯示二維碼對應的數字**************************************
// for(ii=0;ii<13;ii++)
// {
// shuzi(ki,4,huan[ii]);
// ki=ki+6;
// if(ki>=77)
// ki=0;
// }
// delay(200);
////********************************************
//
if(k1==0&&flag1==1) //
{
delay(150);
if(k1==0&&flag1==1)//
{
E2Read(buf, 0x90,4); // E2Read(cbuf, 0x90, sizeof(buf));
delay(100);
dzj=buf[3]*1000+buf[2]*100+buf[1]*10+buf[0];
zj=dzj;
jiaqian(zj);
flag1=0;
shuzi(78,0,1);
}
}
//
//
if(k1==0&&flag1==0)
{
delay(150);
if(k1==0&&flag1==0)
{
huan[0]=0;
huan[1]=0;
huan[2]=0;
huan[3]=0;
huan[4]=0;
jiaqian(0);
zj=0;
buf[3]=0; //千
buf[2]=0; //百
buf[1]=0; //十
buf[0]=0; //個
E2Write( cbuf, 0x90, 4);/// E2Write( buf, 0x90, sizeof(buf));
delay(150);
flag1=1;
shuzi(78,0,2);
}
}
}
}
void delay(uchar x)
{
uint i,j;
for(j=x;j>0;j--)
for(i=110;i>0;i--);
}
/***********************************************************
/* 5110相關程序
/***********************************************************/
void shuzi(uchar x,uchar y,uchar e ) //12*16
{
uchar j,k;
lcdsetxy(x,y);
for(j=0;j<6;j++)
{
lcdwritebyte(font6_16[e][j],1);
}
lcdsetxy(x,y+1);
for(k=6;k<12;k++)
{
lcdwritebyte(font6_16[e][k],1);
}
}
void jiaqian(uint unmber)
{
uchar ge,shi,bai,xs; //xs=小數
// xshu=
xs= unmber%10;
ge=unmber/10%10;
shi=unmber/100%10;
bai=unmber/1000;
shuzi(36,4,bai); //0 總價哪一行
shuzi(42,4,shi); //0
shuzi(48,4,ge); //0
shuzi(54,4,11); //.
shuzi(60,4,xs); //0
}
/********************************************************************
/*串口相關程序
/********************************************************************/
void ConfigUART(unsigned int baud)
{
SCON = 0x50; //配置串口為模式1
TMOD &= 0x0F; //清零T1的控制位
TMOD |= 0x20; //配置T1為模式2
TH1 = 256 - (11059200/12/32)/baud; //計算T1重載值
TL1 = TH1; //初值等于重載值
ET1 = 0; //禁止T1中斷
ES = 1; //使能串口中斷
TR1 = 1; //啟動T1
}
void InterruptUART() interrupt 4
{
if(RI)
{
RI = 0;
if(SBUF==0x30)
huan[i]=0;
else
if(SBUF==0x31)
huan[i]=1;
else
if(SBUF==0x32)
{
huan[i]=2;
}
else
if(SBUF==0x33)
{
huan[i]=3;
}
else
if(SBUF==0x34)
{
huan[i]=4;
}
else
if(SBUF==0x35)
{
huan[i]=5;
}
else
if(SBUF==0x36)
{
huan[i]=6;
}
else
if(SBUF==0x37)
{
huan[i]=7;
}
else
if(SBUF==0x38)
{
huan[i]=8;
}
else
if(SBUF==0x39)
{
huan[i]=9;
}
i++;
if(i>=14)
i=0;
}
}
/***************************************************************
/* eeprom 相關程序
/*****************************************************************/
/*******************************************************************************
* 函數名 : void At24c02Write(unsigned char addr,unsigned char dat)
* 函數功能 : 往24c02的一個地址寫入一個數據
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
//void E2Read(unsigned char *buf, unsigned char addr, unsigned char len)
//{
// do{
// I2CStart();
// if(I2CWrite(0x50 << 1))
// {
// break;
// }
// I2CStop();
// }while(1);
// I2CWrite(addr);
// I2CStart();
// I2CWrite((0x50 << 1) | 0x01);
// while(len > 1)
// {
// *buf++ = I2CReadACK();
// len--;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
shiyan1.zip
(79.79 KB, 下載次數: 57)
2020-3-5 20:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
掃碼槍.PDF
(79.18 KB, 下載次數: 55)
2020-3-5 20:09 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
550186049
時間:
2021-8-3 16:22
正在研究單片機和掃描槍通訊,下載學習!
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1