基于单片机的简易收款机的设计(3) 联系客服

发布时间 : 星期二 文章基于单片机的简易收款机的设计(3)更新完毕开始阅读24291d1628ea81c759f57874

附录二 硬件PCB图

21

附录三 原程序代码 1、主程序代码

#include

unsigned char w,cc=0;

unsigned char str[16]={0}; //液晶显示显存

#include \ //包含液晶显示器的一些操作函数 #include \ /24C64的读写函数 #include \ //串行口的操作函数 #include \ //按键功能函数

#include \ //按键检测和键值读取函数 //bit w24c64,r24c64; void main() {

initlcd(); //初始LCD initurat(); //初始串口 menu(); //初始菜单 //inorder(0xc0);

//indata(0x38); //测试LCD第二行是否显示

while(1) {

key1();

if(w!=0) //如果有键按下则读键值 key2(w); //读键值 } }

/********************************结束************************************/

2、键盘代码

unsigned char w1,w2; void key1(void) {

P1=0x0f; w1=P1&0x0f;

if(w1!=0x0f) // 按键 {

delay(100);

if(w1!=0x0f) //再一次检测按键 {

P1=0xf0; w2=P1&0xf0; w=(w1 | w2); } } else

w=0; //未按键

22

}

//-------------------------------------------------------- //unsigned char

void key2(unsigned char j) {

unsigned char i; switch(j) {

//-------------------------------------以下为数字键 case 0x77: i=0x30;indata(i);str[cc++]=0;break; case 0x7b: i=0x31;indata(i);str[cc++]=1;break; case 0x7d: i=0x32;indata(i);str[cc++]=2;break; case 0x7e: i=0x33;indata(i);str[cc++]=3;break; case 0xb7: i=0x34;indata(i);str[cc++]=4;break; case 0xbb: i=0x35;indata(i);str[cc++]=5;break; case 0xbd: i=0x36;indata(i);str[cc++]=6;break; case 0xbe: i=0x37;indata(i);str[cc++]=7;break; case 0xd7: i=0x38;indata(i);str[cc++]=8;break; case 0xdb: i=0x39;indata(i);str[cc++]=9;break; //以下为功能键

case 0xDD: manage_key1();i=0;break; //A写24C64 case 0xDE: manage_key2();i=0;break; //B读24C64

case 0xE7: manage_key3();i=0;break; //C 串行通讯,发送数据 case 0xeb: manage_key4();i=0;break; //D 串行通讯,接受数据 case 0xED: manage_key5();i=0;break; //E 显示计算结果 case 0xEE: manage_key6();i=0; //f 清屏 }

while(1) //等待按键的释放 {

key1();

if(w1==0x0f) {

delay(10); if(w1==0x0f) break; } } }

/********************************结束************************************/

3、液晶显示器代码

#include

#define RS P2_5 //定义LCD控制口

#define RW P2_6 #define E P2_7 #define XS P0

23

void busy(void) //检查忙信号 {

_nop_(); do {

XS=0xff; RS=0; RW=1; E=0; _nop_(); E=1; }

while(P0_7); }

void inorder(unsigned char order) //写命令 {

XS=order; RS=0; RW=0; E=0; busy();

E=1; }

void indata(unsigned char datar) //写数据 {

XS=datar; RS=1; RW=0; E=0; busy(); E=1; }

void initlcd (void) { inorder(0x01);

inorder(0X38); //8位2行5X7点阵

inorder(0X0f); //显示器开,光标开,闪烁开 inorder(0X06); //文字不动,光标自动右移 inorder(0x01); //清显示 }

//=================显示处理程序========================= void xianshi(void) {

unsigned long x,y,z,sum;

x=(str[0]*100+str[1]*10+str[2]); //得到“货号”

y=(str[3]*1000+str[4]*100+str[5]*10+str[6]); //得到“单价”值(3位数) z=(str[7]*100+str[8]*10+str[9]); //得到“数量”值(3位数)

24