📄 copyprint_voice.c
字号:
/*************************************************************************************
* function: broadcasting ,distance,fare using real time voice, together with printing*
* complete on the 11th,May,2003 *
* version tone2.0 *
* author Liyanjiang *
* all rights reserved *
*************************************************************************************/
/* procotol is as following *
* the data format the taximeter send is: *
* the xtal is 11.0592, SM0 SM1=0x10, the baud rate is 1/64 xfosc *
* PRE+DATA *
* PRE is one byte, 0xda means hired on for printing, 0xdb means hired on for voice *
* 0xdc means hired off for print,and 0xdd means hired off for voice; *
* and 0xde for all printing and voice entering to hired status; *
* 0xdf for all printing and voice quiting to hired on status *
* TB8=1 when send PRE, and TB8=0 when send others *
* the 4th information, then distance, then waiting time, the fare amount is the 7 or*
* 8th information up on *
**************************************************************************************/
//HERE IS THE CODE//
//#include <reg52.h>
#include <STC89C51RC_RD_PLUS.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define PAUSE_KEY_VALUE 1
#define CHECK_KEY_VALUE 2
#define SINGLE_DISTANCE_KEY_VALUE 3
#define PAPER_END_COM 0xed
#define PAPER_INSERT_COM 0xe6
#define KEY_MULTI_PRESS_INHIBIT_COM 0xeb
#define KEY_MULTI_PRESS_ALLOW_COM 0xec
#define ALLOW_RECEIVE_KEY_VALUE_COM 0xaa
void delay2ms(void);
void receive_data(void);
bit hired_off_flg,hired_on_flg;
bit hired_off_receive_end_flg_for_print,paper_run_flg;
bit hired_on_receive_end_flg_for_print,paper_end_flg;
bit pause_key_pressed_flg,check_key_pressed_flg,single_distance_key_pressed_flg;
bit key_multi_press_allow_flg;
bit print_start_flg,key_send_ready_start_flg,key_send_ready_end_flg;
uchar receive_item;
bit single_distance_key_pressed_flg,check_key_pressed_flg,pause_key_pressed_flg;
uchar single_distance_key_pressed_time,check_key_pressed_time,pause_key_pressed_time;
uchar single_distance_key_release_time,check_key_release_time,pause_key_release_time;
bit send_flg,pause_key_release_flg,check_key_release_flg,single_distance_key_release_flg;
uchar price[8];
uchar distance[8];
uchar total_waiting_time[8];
uchar fare[8];
uchar get_off_time[8];
uchar idata bill_number[8],unit[8],tele_num[8],car_num[8],linsence[8],get_on_date[8],get_on_time[8];
uchar xdata ITEM_BILL_NO[8]={11,18,21,21,37,23,24,40};
uchar xdata ITEM_COMPANY[8]={12,24,22,25,10,23,34,40};
//COMPANY:
uchar xdata ITEM_TELE_NUM[8]={29,14,21,37,23,24,39,40};
//TEL NO.:
uchar xdata ITEM_CAR_NUM[8]={12,10,27,37,23,24,39,40};
//CAR NO.:
uchar xdata ITEM_LIN_NUM[8]={21,18,23,37,23,24,39,40};
//LIN NO.:
uchar xdata ITEM_DATE[8]={37,37,37,13,10,29,14,40};
//DATE:
uchar xdata ITEM_S_TIME[8]={37,28,39,29,18,22,14,40};
//S.TIME: FOR STARTING TIME
uchar xdata ITEM_E_TIME[8]={37,14,39,29,18,22,14,40};
//E.TIME: FOR ENDING TIME
uchar xdata ITEM_PRICE[8]={37,37,25,27,18,12,14,40};
//PRICE:
uchar xdata ITEM_DISTANCE[8]={37,37,37,37,37,20,22,40};
//KM: for distance
uchar xdata ITEM_W_TIME[8]={37,32,39,29,18,22,14,40};
//W.TIME for waiting time
uchar xdata ITEM_FARE[8]={37,37,37,15,10,27,14,40};
//FARE:
uchar receive_num;
uchar space_data[8];
void printing_hired_on(void);
void print_car_number(uchar *item,uchar *car_num);
void print_tele_number(uchar *item,uchar *tel_num);
void insert_some_space_dot_line(uchar line_num);
//sbit NEEDLEC_PIN=P3^5;
//sbit NEEDLED_PIN=P3^7;
sbit NEEDLEC_PIN=P1^3;
sbit NEEDLED_PIN=P1^4;
sbit NEEDLEB_PIN=P1^2; //preserved
//sbit NEEDLEA_PIN=P1^4; //preserved
uchar bdata value_a,value_b,value_c,value_d;
uchar idata printed_data[8];
uchar key_send_ready_com;
uint count_time;
//sbit SINGLE_DISTANCE_KEY=P2^6;
//sbit CHECK_KEY=P2^5;
//sbit PAUSE_KEY=P2^7;
sbit PRINT_COM_REQUEST=P1^6;
sbit NEEDLEA_BIT=value_a^7;
sbit NEEDLEB_BIT=value_b^7;
sbit NEEDLEC_BIT=value_c^7;
sbit NEEDLED_BIT=value_d^7;
sbit CLK=P1^0;
sbit RST=P1^5;
sbit POWER_G=P1^1;
sbit BLACK_DOT=P3^3; //hight when black dot comes
sbit PAPER_END=P1^7; //LOW when NO PAPER
sbit VOICE_RST=P2^0;
sbit VOICE_FOR_HIRE=P2^1;
sbit VOICE_HIRED=P2^2;
//sbit VOICE_NO_USE=P2^3;
void print_one_charactor_line(uchar *item,uchar *printed_data);
void print_one_dot_charactor(void);
void print_one_dot_line(void);
void print_hired_off(void);
void print_hired_on(void);
void print_public_part(bit hired_flg);
void paper_run(void);
void print_some_space_charactor_line(uchar lines);
/**************************************************************************************
* here is the table of printed code, a charactor is printed in 5X7 array *
* 每一个字符被打印成5x7点阵,每一点阵的横行的高两位总为0,不用,用时首先移位掉,而 *
* 最后的一位也总是为0, 但是用于字符间的空点, 其真正点阵取其其余的五位。 *
* 每一个表的最大量为256个字节,特殊符号在第二个表格中 *
***************************************************************************************/
uchar code secode1[252]={
0x1c,0x22,0x26,0x2a,0x32,0x22,0x1c, //0,0
0x08,0x18,0x08,0x08,0x08,0x08,0x1c, //1,1
0x1c,0x22,0x02,0x04,0x08,0x10,0x3e, //2,2
0x3e,0x04,0x0c,0x02,0x02,0x22,0x1c, //3,3
0x04,0x0c,0x14,0x24,0x3e,0x04,0x04, //4,4
0x3e,0x20,0x3c,0x02,0x02,0x22,0x1c, //5,5
0x1c,0x22,0x20,0x3c,0x22,0x22,0x1c, //6,6
0x3e,0x02,0x04,0x08,0x08,0x08,0x08, //7,7
0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c, //8,8
0x1c,0x22,0x22,0x1e,0x02,0x22,0x1c, //9,9
0x08,0x14,0x22,0x3e,0x22,0x22,0x22, //10,A
0x3c,0x22,0x22,0x3c,0x22,0x22,0x3c, //11,B
0x1c,0x22,0x20,0x20,0x20,0x22,0x1c, //12,C
0x3c,0x22,0x22,0x22,0x22,0x22,0x3c, //13,D
0x3e,0x20,0x20,0x3c,0x20,0x20,0x3e, //14,E
0x3e,0x20,0x20,0x3c,0x20,0x20,0x20, //15,F
0x1c,0x22,0x20,0x20,0x3e,0x22,0x1e, //16,G
0x22,0x22,0x22,0x3e,0x22,0x22,0x22, //17,H
0x1c,0x08,0x08,0x08,0x08,0x08,0x1c, //18,I
0x0e,0x04,0x04,0x04,0x04,0x24,0x18, //19,J
0x22,0x24,0x28,0x30,0x28,0x24,0x22, //20,K
0x20,0x20,0x20,0x20,0x20,0x20,0x3e, //21,L
0x22,0x36,0x2a,0x22,0x22,0x22,0x22, //22,M
0x22,0x22,0x32,0x2a,0x26,0x22,0x22, //23,N
0x1c,0x22,0x22,0x22,0x22,0x22,0x1c, //24,O
0x3c,0x22,0x22,0x3c,0x20,0x20,0x20, //25,P
0x1c,0x22,0x22,0x22,0x2a,0x24,0x1a, //26,Q
0x3c,0x22,0x22,0x3c,0x28,0x24,0x22, //27,R
0x1c,0x22,0x20,0x1c,0x02,0x22,0x1c, //28,S
0x3e,0x08,0x08,0x08,0x08,0x08,0x08, //29,T
0x22,0x22,0x22,0x22,0x22,0x22,0x1c, //30,U
0x22,0x22,0x22,0x22,0x22,0x14,0x08, //31,V
0x22,0x22,0x22,0x22,0x2a,0x36,0x22, //32,W
0x22,0x22,0x14,0x08,0x14,0x22,0x22, //33,0x
0x22,0x22,0x14,0x08,0x08,0x08,0x08, //34,Y
0x3e,0x02,0x04,0x08,0x10,0x20,0x3e};//35,Z
uchar code secode2[49]={
0x00,0x00,0x14,0x2a,0x2a,0x2a,0x2a, //36,m
0x00,0x00,0x00,0x00,0x00,0x00,0x00, //37,SPACE
0x00,0x02,0x04,0x08,0x10,0x20,0x00, //38, /
0x00,0x00,0x00,0x00,0x0c,0x0c,0x00, //39, .
0x00,0x0c,0x0c,0x00,0x0c,0x0c,0x00, //40, :
0x1c,0x00,0x3e,0x14,0x14,0x14,0x26, //41, Chinese word yuan
0x00,0x00,0x00,0x3e,0x00,0x00,0x00 //42, -
};
void delay2ms(void)
{
uchar i;
for(i=0;i<200;i++);
}
void delay1ms(uchar x)
{
uchar i,j;
for(j=0;j<x;j++)
{
for(i=0;i<250;i++);
}
}
bit check_paper_end(void)
{
if(PAPER_END)//&&!paper_end_flg)
{
delay1ms(100);
if(PAPER_END)return(1);
}
return(0);
}
void send_to_main_cpu(uchar key_value)
{
PRINT_COM_REQUEST=0;
while(!key_send_ready_end_flg);
TB8=1;
SBUF=0xee;
while(!TI);
TI=0;
TB8=0;
SBUF=key_value;
while(!TI);
TI=0;
TB8=1;
SBUF=0xcc;
while(!TI);
TI=0;
key_send_ready_start_flg=0;
key_send_ready_end_flg=0;
PRINT_COM_REQUEST=1;
}
void main(void){
AUXR=0x00;//enable on chip exram
POWER_G=1;
BLACK_DOT=1;
RST=1;
CLK=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -