psb单片机(pos机单片机程序)

POS收款系统

psb单片机(pos机单片机程序)

iviolent 你好:

目前市场上的适用于服装管理设备有2种:

1.PC类收款设备:

PC类收款设备我所指的是 电脑和POS机,这两种设备都需要 后台软件支持,也就是说,你买了设备还需要再购买软件,总体价格在4000~几万不等(主要是看你选择什么东西来定价格!)。其中涉及到的设备,你可以参照我下面给出的连接或是看我以前回答的问题,其中有设备的详细说明和品牌介绍。

2.单片机类收款设备:

单片机类收款设备熟称收款机,其能设计主要以单片机技术为依托,收款机的价格在1000~2000。而这种机器单独使用就可实现管理,不需要再购买其他软件,也可完全脱离PC机使用,因为销售过程中 销售记录是储存在收款机里,你可以通过收款机来打印 当天的销售报表,也可使用收款机 将 收款销售储存在PC里。

收款机与POS机都可实现 服装店的管理功能,但设备也有一定的区别,可根据实际情况选择机型。

PC类收款设备与单片机类收款设备的区别:

PC类收款设备简称为POS机,单片机类收款设备简称为收款机

1.POS机比收款机管理灵活,能针对进 销 存进行完整的管理。

2.收款机储存信息有容量的限制,一般储存1000~8000个商品信息不等。POS机无完全意义上的限制(使用硬盘存储)

3.收款机价格比POS机价格低。

跪求 单片机 用C语言写一个程序 用LCD显示welcome 急急急急十万火急 在线等

#include reg51.h //51寄存器文件

#include intrins.h

typedef unsigned char BYTE; //用BYTE代替unsigned char

typedef unsigned int WORD;//WORD代替unsigned int

typedef bit BOOL ;//用BOOL代替bit

sbit rs = P2^6; //复位端

sbit rw = P2^5; //写数据端

sbit ep = P2^7; //使能端

BYTE code dis1[] = {“welcome!,I’m Tom”};

//LCD侧忙函数

BOOL lcd_bz()

{

BOOL result;

rs = 0;

rw = 1;

ep = 1;

nop();

nop();

nop();

nop();

result = (BOOL)(P0 0x80); //检测P0最高位是否为1

ep = 0;

return result;//返回侧忙结果

}

// 写入指令数据到LCD

lcd_wcmd(BYTE cmd)

{

while(lcd_bz());

rs = 0;

rw = 0;

ep = 0;

nop();

nop();

P0 = cmd; //将8位指令通过P0口传给1602

nop();

nop();//用于产生一个脉冲宽度

nop();

nop();

ep = 1;

nop();

nop();

nop();

nop();

ep = 0;

}

//设定显示位置

lcd_pos(BYTE pos)

{

lcd_wcmd(pos | 0x80);

}

//写入字符显示数据到LCD

lcd_wdat(BYTE dat)

{

while(lcd_bz());

rs = 1;

rw = 0;

ep = 0;

P0 = dat;//将8位数据通过P0口传给1602

nop();

nop();

nop(); //用于产生一个脉冲宽度

nop();

ep = 1;

nop();

nop();

nop();

nop();

ep = 0;

}

//LCD初始化设定

lcd_init()

{

lcd_wcmd(0x38); ////16*2显示,5*7点阵,8位数据

lcd_wcmd(0x0c); //显示开,关光标

lcd_wcmd(0x06); //移动光标

lcd_wcmd(0x01); //清除LCD的显示内容

}

main()

{

BYTE i;

lcd_init(); //初始化LCD

lcd_pos(4); //设置显示位置为第一行的第5个字符

i = 0;

while(dis1[i] != ‘\0’)

{ //显示字符”welcome!”

lcd_wdat(dis1[i]);

i++;

}

while(1);

}

单片机数字时钟程序及电路图

#include reg51.h

#include intrins.h

#define uint unsigned int

#define uchar unsigned char

sbit LCD_RS=P2^0;

sbit LCD_RW=P2^1;

sbit LCD_EN=P2^2;

sbit SPK=P3^0;

sbit key1=P1^0;

sbit key2=P1^1;

sbit key3=P1^2;

sbit key4=P1^3;

uchar Display_Buffer[16]=” “;

uchar Count,hour=12,min=12,sec=12;

bit flag,H_or_M;

uchar display[]=“This is colck”;

void _delay_ms(uint x)

{

uchar i;

while(x–)

{

for(i=0;i120;i++);

}

}

/**********************************************************************

*函数名称:LCD_Write_Command

*输 入:uchar cmd

*输 出:无

*功 能:向LCD1602写指令

*******************************************************************/

void LCD_Write_Command(uchar cmd)

{

LCD_RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令

LCD_RW=0;

LCD_EN=0;//EN置低电平

P0=cmd;//将数据送入P2口,即写入指令或地址

LCD_EN=1;//EN置高电平

_delay_ms(1);//稍延时,给硬件反应时间

LCD_EN=0;//当EN由高电平跳变成低电平时,液晶模块开始执行命令

}

/*******************************************************************

*函数名称:LCD_Write_Data

*输 入:uchar dat

*输 出:无

*功 能:向LCD1602写数据

*******************************************************************/

void LCD_Write_Data(uchar dat)

{

LCD_RS=1;//RS为高电平,RW为低电平时,可以写入数据

LCD_RW=0;

LCD_EN=0;//EN置低电平

P0=dat;//将数据送入P0口,即将数据写入液晶模块

LCD_EN=1;//EN置高电平

_delay_ms(1);//稍延时,给硬件反应时间

LCD_EN=0;//当EN由高电平跳变成低电平时,液晶模块开始执行命令

}

/*******************************************************************

*函数名称:Init_LCD

*输 入:无

*输 出:无

*功 能:初始化LCD1602

*******************************************************************/

void Init_LCD(void)

{

LCD_Write_Command(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口

_delay_ms(1);

LCD_Write_Command(0x06);//显示模式设置:光标右移,字符不移

_delay_ms(1);

LCD_Write_Command(0x0c);//显示模式设置:显示开,无光标,光标不闪烁

_delay_ms(1);

LCD_Write_Command(0x01);//清屏幕指令,将以前的显示内容清除

_delay_ms(1);

}

/*******************************************************************

*函数名称:LCD_POS

*输 入:uchar pos

*输 出:无

*功 能:字符显示位置

*******************************************************************/

void LCD_POS(uchar pos)

{

LCD_Write_Command(0x80|pos);//显示位置的确定方法规定为”80H+地址码x”

}

/*******************************************************************

*函数名称:Show_String

*输 入:uchar *str

*输 出:无

*功 能:LCD1602显示字符串处理函数

**********************************************************************/

void Show_String(uchar *str)

{

while(*str!=‘\0’)//只要没有写到结束标志,就继续写

LCD_Write_Data(*str++);//将字符常量写入LCD,并指向下一个字符

}

void song(void)

{

uchar i,j,k;

for(i=0;i200;i++)

{

SPK=~SPK;

for(k=0;k50;k++);

for(j=0;j50;j++);

}

}

/////lcd1602液晶显示//////

void Display_Time(uchar Hour,uchar Min,uchar Sec)

{

Display_Buffer[0]=Hour/10+‘0’;//小时十位

Display_Buffer[1]=Hour%10+‘0’;//小时个位

Display_Buffer[2]=‘:’;//显示:号

Display_Buffer[3]=Min/10+‘0’;//显示分钟十位

Display_Buffer[4]=Min%10+‘0’;//显示分钟个位

Display_Buffer[5]=‘:’;//显示:号

Display_Buffer[6]=Sec/10+‘0’;//显示秒十位

Display_Buffer[7]=Sec%10+‘0’;//显示秒个位

LCD_POS(0x40);//显示在液晶第1行第0列

Show_String(Display_Buffer);

}

/////按键处理//////

void Set_time(void)

{

flag=0;

if(key1==0||key2==0||key3==0)//若key1,key2,key3其中有键按下,则为真

{

TR0=0;//定时器0停止

flag=1;//按键标志位为真

}

while(flag)//判断那一个按键按下

{

if(key1==0)//判断key1是否按下

{

while(!key1);//等待释放

H_or_M=!H_or_M;//选择是修改时还是分钟

}

else if(key2==0)//判断key2是否被按下

{

while(!key2);//等待释放

if(H_or_M)//若H_OR_M为真,则修改小时

{

if(++hour==24)//若小时=24,则小时=0

hour=0;//小时加1

}

else//否则修改分钟

{

if(++min==60)//若分钟等于60,则分钟等于0

min=0;//分钟加1

}

}

else if(key3==0)//判断key3是否被按下

{

while(!key3);//等待释放

if(H_or_M)//若H_OR_M为真,则修改小时

{

if(–hour==0xff) //小时减1,若小时等于-1,则小时等于23

hour=23;

}

else//否则修改分钟

{

if(–min==0xff)//分钟减1,若分钟等于-1,则分钟等于59

min=59;

}

}

else if(key4==0)//判断key4是否被按下

{

while(!key4);//等待释放

flag=0;//按键标志清零

TR0=1;//定时器0启动

}

Display_Time(hour,min,sec);//传H,M,S值显示到液晶

}

}

void timer0_init(void)//定时器0初始化

{

TMOD=0x01;//定时器0,方式1

ET0=1;//

EA=1;//总中断允许

TR0=1;//启动定时器0

TH0=(65535-50000)/256;//装高8位初值

TL0=(65535-50000)%256;//装低8位初值

}

void main(void)//主函数

{

//P0=0xff;

P1=0xff;//端口初始化

P3=0xff;

Init_LCD();//液晶初始化

timer0_init();//定时器0初始化

LCD_POS(0);//显示在液晶第1行第0列

Show_String(display);

while(1)//无限循环

{

Display_Time(hour,min,sec);//液晶显示时间

//_delay_ms(500);//延时

Set_time();//时间调整

}

}

void timer0() interrupt 1//定时器0中断

{

TH0=(65535-50000)/256;//重装定时器0高8位

TL0=(65535-50000)%256;//重装定时器0低8位

Count++;//计数加1

if(Count==20)//如果COUNT等于20

{

Count=0;//计数清零

sec++;//秒加1

if(sec==60)//判断秒是否等于60

{

sec=0;//秒清零

min++;//分钟加1

if(min==60)//判断分钟是否等于60

{

min=0;//若等于60,则清零分钟

hour++;//小时加1

if(hour==24)//判断小时是否等于24

{

hour=0;//若小时等于24,则清零小时,分钟,秒

min=0;

sec=0;

}

song();

}

}

}

}

pos怎么写程序

很多朋友都还不是很清楚pos机怎么写程序,pos机怎么使用流程,今天小编就和大家来详细的说说这个,大家可以阅读一下,希望文章能给你带来参考价值。

poslabel怎么设置连续打印?

连续打印设置方法如下:

1.点击桌面左下角的:开始,在出现的菜单栏找到并进入:控制面板

2.来到控制面板界面,选择:硬件和声音下面的:查看设备和打印机

3.在设备和打印机界面,左键选中您要使用的打印机,选中后,顶部菜单栏下方会出现一条新的菜单栏,选中:打印服务器属性

4.在打印服务器属性界面上,勾选上:创建新表单,并在其下方填写好新表的尺寸信息(所填信息要与您使用的打印纸张相一致)

5.继续在此界面上部分为表单命名,确认后,点击:保存表单

6.回到:设备和打印机界面,右键打印机图标,选择:打印机属性

7.来到属性界面,在顶部菜单栏选择:设备设置

8.在设备设置界面点开:按送纸器格式指派,其下方有三种送纸器,别是“导轨”、“手动进纸”、“进纸器”,

将“导轨”通过其后方的下拉框选择:第五步设置的表单名,“手动进纸”和“进纸器”设置为:不可用,确认后,点击下方的确认

9.回到:设备和打印机界面,右键打印机图标,选择:打印首选项

10.来到打印首选项界面,在顶部菜单栏选择:纸张/质量

11.打印机控制面板中的打印纸来源设置与打印机驱动程序中要一致,所以需要将此处的纸张来源设置为:自动选择

12.设置完毕,当您打印时,打印机会根据页面设置,直接选择走纸通道完成连续打印纸。

高分求51单片机串口通信的程序

#include reg52.h

#include intrins.h

#define uchar unsigned char

#define uint unsigned int

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1;

sbit LCD_EN = P2^2;

#define delayNOP(); {nop();nop();nop();nop();};

uchar data RXDdata[ ] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20 };

uchar temp,buf,m,count;

bit playflag=0;

uchar code cdis1[ ] = {” SERILA TRANFER “};

uchar code cdis2[ ] = {” “};

/*******************************************************

延时子程序

****************************************************/

char code SST516[3] at 0x003b;

void delay1(uint ms)

{

uchar k;

while(ms–)

{

for(k = 0; k 120; k++);

}

}

/*************************************************************/

/* */

/*检查LCD忙状态 */

/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 /

/ */

/*************************************************************/

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

delayNOP();

result = (bit)(P00x80);

LCD_EN = 0;

return(result);

}

/**************************************************************/

/* */

/*写指令数据到LCD */

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 /

/ */

/**************************************************************/

void lcd_wcmd(uchar cmd)

{

while(lcd_busy());

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

nop();

nop();

P0 = cmd;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

/**************************************************************/

/* */

/*写显示数据到LCD */

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。 /

/ */

/**************************************************************/

void lcd_wdat(uchar dat)

{

while(lcd_busy());

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

/**************************************************************/

/* /

/ LCD初始化设定 /

/ */

/***************************************************************/

void lcd_init()

{

delay1(15);

lcd_wcmd(0x01); //清除LCD的显示内容

lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据

delay1(5);

lcd_wcmd(0x38);

delay1(5);

lcd_wcmd(0x38);

delay1(5);

lcd_wcmd(0x0c); //开显示,显示光标,光标闪烁

delay1(5);

lcd_wcmd(0x01); //清除LCD的显示内容

delay1(5);

}

/***************************************************************/

/* /

/ 设定显示位置 /

/ */

/**************************************************************/

void lcd_pos(uchar pos)

{

lcd_wcmd(pos | 0x80); //数据指针=80+地址变量

}

/***************************************************

发送数据函数

***************************************************/

void senddata(uchar dat)

{

SBUF =dat;

while(!TI);

TI = 0;

}

/***************************************************

串行中断服务函数

***************************************************/

void serial() interrupt 4

{

ES = 0; //关闭串行中断

RI = 0; //清除串行接受标志位

buf = SBUF; //从串口缓冲区取得数据

playflag=1;

switch(buf)

{

case 0x31: senddata(‘X’);break; //接受到1,发送字符’W’给计算机

case 0x32: senddata(‘L’);break; //接受到2,发送字符’I’给计算机

case 0x33: senddata(‘1’);break; //接受到3,发送字符’L’给计算机

case 0x34: senddata(‘0’);break; //接受到4,发送字符’L’给计算机

case 0x35: senddata(‘0’);break; //接受到5,发送字符’A’给计算机

case 0x36: senddata(‘0’);break; //接受到5,发送字符’R’给计算机

default: senddata(buf);break; //接受到其它数据,将其发送给计算机

}

if(buf!=0x0D)

{

if(buf!=0x0A)

{

temp =buf;

if(count16)

{

RXDdata[count]=temp;

count++;

}

}

}

ES = 1; //允许串口中断

}

/***************************************************

数据显示函数

***************************************************/

void play()

{

if(playflag)

{

lcd_pos(0x40); //设置位置为第二行

for(m=0;m16;m++)

lcd_wdat(cdis2[m]); //清LCD1602第二行

for(m=0;m16;m++)

{

lcd_pos(0x40+m); //设置显示位置为第二行

lcd_wdat(RXDdata[m]); //显示字符

}

playflag=0;

count=0x00;

for(m=0;m16;m++)

RXDdata[m]=0x20; //清显存单元

}

}

/***************************************************

主函数

******************************************************/

void main(void)

{

P0 = 0xff;

P2 = 0xff;

SCON=0x50; //设定串口工作方式

PCON=0x00; //波特率不倍增

TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率

EA=1;

ES = 1; //允许串口中断

TL1=0xf3;

TH1=0xf3; //波特率2400

TR1=1;

lcd_init();

lcd_pos(0x00); //设置显示位置为第一行

for(m=0;m16;m++)

lcd_wdat(cdis1[m]); //显示字符

lcd_pos(0x40); //设置显示位置为第二行

for(m=0;m16;m++)

lcd_wdat(cdis2[m]); //显示字符

while(1)

{

play();

}

}

这个串口通信程序在我的开发版上已经全部验证通过,你可以根据实际,攸 改里面某些参数,满足你自己的需要就行。

比如你你点亮小灯,这部分你只可在相应位置添加代码即可。单片机都是51的。

其中1602的显示程序是用来验证是否通信成功,这部分你可作为参考。这部分你大可用小灯显示程序来替代。

想装一个开关,每天只能开三次,我设想刷卡机每张卡存3元,刷一次扣一元,控制一次通电物理开关,谁会?

这个设想有点悬:卡内的3元是谁负责存、扣?银行代办,那还要银行给你个扣款成功的恢复并“控制一次通电物理开关”;若是自己写到专用的卡,自己专用的POS机,那同样还得一套管理程序实现。实际上,找一台单片机,计数输入次数,只在1-3次输入时输出控制开关的信号(使继电器动作),其余无输出,但是计数器24小时清零一次,这样就等于每24小时内最多只有3次输出,何必刷卡?当然也可以设定每次输入密码,输对一次,有效输出一次,计数到3为止。

本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。