⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 copyprint_voice.c

📁 微型打印机的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************************
* 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 + -