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

📄 最后测试._c

📁 PS2控制代码123456789
💻 _C
📖 第 1 页 / 共 2 页
字号:
#include<iom128v.h>
#include<eeprom.h>
#include<macros.h>
#define fosc 8000000 //晶振4MHZ
#define BAUD 9600 //波特率
#define  ASK           (PINE&0X40)
#define  SBT_ANSWER    PORTE|=BIT(PORTE7)
#define  CLR_ANSWER    PORTE&=~BIT(PORTE7)
#define  SBT_RESET     PORTC|=BIT(PORTC3)
#define  CLR1_RESET    PORTC&=~BIT(PORTC3)
#define  DPORT_A       PORTA
#define  DATA1          0x20
#define uchar unsigned char
unsigned char flag_time=0; flag_computer=0;flag_test_v=0;
unsigned char data=0,flag=0;
unsigned char count_jiema=0;//解码键盘码
unsigned char keyzhi,temp1,keytemp;jy=0; 
unsigned long value=0,valuefirst=0,rezult=0,rezult2=0;
float rezult1=0; 
unsigned char flag_add=0,flag_sub=0,flag_mul=0,flag_mod=0;
unsigned char DisNumx=1,DisNumx1=0,DisNumy=0, Shift=0,Key_UP=0;
unsigned char put_dete[];
unsigned char table1[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
unsigned char  UnShifted[71][2] = {
0x1C, 'a',
0x32, 'b',
0x21, 'c',
0x23, 'd',
0x24, 'e',
0x2B, 'f',
0x34, 'g',
0x33, 'h',
0x43, 'i',
0x3B, 'j',
0x42, 'k',
0x4B, 'l',
0x3A, 'm',
0x31, 'n',
0x44, 'o',
0x4D, 'p',
0x15, 'q',
0x2D, 'r',
0x1B, 's',
0x2C, 't',
0x3C, 'u',
0x2A, 'v',
0x1D, 'w',
0x22, 'x',
0x35, 'y',
0x1A, 'z',
0x45, '0',
0x16, '1',
0x1E, '2',
0x26, '3',
0x25, '4',
0x2E, '5',
0x36, '6',
0x3D, '7',
0x3E, '8',
0x46, '9',
0x0E, '`',
0x4E, '-',
0x55, '=',
0x5D, '\\',
0x29, ' ',
0x54, '[',
0x5B, ']',
0x4C, ';',
0x52, '\'',
0x41, ',',
0x49, '.',
0x4A, '/',
0x71, '.',
0x70, '0',//小键盘
0x69, '1',
0x72, '2',
0x7A, '3',
0x6B, '4',
0x73, '5',
0x74, '6',
0x6C, '7',
0x75, '8',
0x7D, '9',
0x79, '+',
0x7B, '-',
0x7c, '*',
0x4A, '/',
0x5a, ' ',//enter
0x76, ' ',//Esc
0x75, ' ',// { up }
0x72, ' ',// { down }
0x6B, ' ',// { left }
0x74, ' ',// { right }
0x66, ' ',//(删去键)

};

unsigned char  Shifted[59][2] = {
0x1C, 'A',
0x32, 'B',
0x21, 'C',
0x23, 'D',
0x24, 'E',
0x2B, 'F',
0x34, 'G',
0x33, 'H',
0x43, 'I',
0x3B, 'J',
0x42, 'K',
0x4B, 'L',
0x3A, 'M',
0x31, 'N',
0x44, 'O',
0x4D, 'P',
0x15, 'Q',
0x2D, 'R',
0x1B, 'S',
0x2C, 'T',
0x3C, 'U',
0x2A, 'V',
0x1D, 'W',
0x22, 'X',
0x35, 'Y',
0x1A, 'Z',
0x45, '0',
0x16, '1',
0x1E, '2',
0x26, '3',
0x25, '4',
0x2E, '5',
0x36, '6',
0x3D, '7',
0x3E, '8',
0x46, '9',
0x0E, '~',
0x4E, '_',
0x55, '+',
0x5D, '|',
0x29, ' ',
0x54, '{',
0x5B, '}',
0x4C, ':',
0x52, '"',
0x41, '<',
0x49, '>',
0x4A, '?',
0x71, '.',
0x70, '0',
0x69, '1',
0x72, '2',
0x7A, '3',
0x6B, '4',
0x73, '5',
0x74, '6',
0x6C, '7',
0x75, '8',
0x7D, '9',
};

 void delay(unsigned char n)
  {
   unsigned char i;
   for(;n>0;n--)
   for(i=0;i<200;i++);
 }
/**************************************/
  void initail_ocmj(void)
  { 
   MCUCR=0X00;
   DDRA=0XFF;
   DPORT_A=0XFF;
   DDRE=0X80;      ///PORTE.7作为输出请求信号,PE3为检查忙不忙信号
   DDRD=0XFF;
   PORTD=0XfF;
   PORTE=0Xff;   //PE初使化为高电平
   DDRC=0X08; //PC3复位
   CLR1_RESET;
   delay_nms(20);
   SBT_RESET;
   CLR_ANSWER;//关闭请求信号
   delay(100);
 }
 /***************************************/ 
  void ocmj_write(unsigned char adata)
   {
      while(ASK);//高电平就等待
      DPORT_A=adata;//先给数据给PA
      _NOP();   //延时
      SBT_ANSWER;//请求信号
      _NOP(); 
      while(ASK==0);//等待数据传送完
      CLR_ANSWER; //关闭请求
  }
  
  
 void write_asiic(unsigned char x,unsigned char y,unsigned char asc_p)
        {
	         x+=4;
             ocmj_write(0xf1);
		     ocmj_write(x);
	      	 ocmj_write(y);
		     ocmj_write(asc_p);
		
		 }	
 /********************************************/ 

/**********************************************/
  void  DisplayListChar(unsigned char x,unsigned char y)
     {
        unsigned char i,asc_p;
         asc_p=' ';
       x+=4;
       for(i=0;i<16;i++)
          {   ocmj_write(0xf1);
		      ocmj_write(x+i);
		      ocmj_write(y);
		      ocmj_write(asc_p);
	      }
		  
        }	
//***************************************************************************//
/*         传送bmp点阵数据到LCD            */
/*         x:0~15(字节为单位)  y:0~64      */
/*         bmp_p:指向图形数据的指针        */	
/*         high:位图高度(点阵行为单位)     */
/*         width:位图宽度(以字节为单位)?  */
void bmp_tran(unsigned char x,unsigned char y,unsigned char high,unsigned char width,const unsigned char *bmp_p)
     {
	  unsigned char i,j;
	  x+=4;
	  for(j=0;j<high;j++)
	     {
		  for(i=0;i<width;i++)
		    {
			 ocmj_write(0xf3);//图形
			 ocmj_write(x);
			 ocmj_write(y);
			 ocmj_write(*bmp_p);
			 bmp_p++;
			 x++;
			}
		  x-=width;
		  y++;	
		 }
	 }	
	
	void clr(void)
	{
	 ocmj_write(0xf4);
	}
		 
/**********************************************/
	           /* 写ASCII码初始化 *////找代码//X轴只能从4,5,6,7。....18 19开始,Y=0,16,32,48
/**********************************************///只能显示16*4个字符
void write_ASCII(unsigned type,unsigned xx,unsigned yy,unsigned data)
{
    ocmj_write(type);//0xf9  ASCII码代码
    ocmj_write(xx);
    ocmj_write(yy);
    ocmj_write(data);
}
/*********************************************************************/
 /***********************传送ASCII字母到LCD ********************** */
/***************************    x:0x00~0x0f y:0~64 显示8*16个字符           */	
void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p)
    {
	 x+=4;
	 while((*asc_p)!=0)
	    {
		 ocmj_write(0xf1);
		 ocmj_write(x);
		 ocmj_write(y);
		 ocmj_write(*asc_p);
		 asc_p++;
		 if (x<0x13)
		    x++;
		 else
		   {
		    x=0x04;
			y+=8;		
		   }	
		}	
	 }

/**********************************************/
	       /* 写汉字初始化  *///找代码
/**********************************************/
void write_hazi(unsigned xx,unsigned yy,unsigned data1,unsigned data2)
{
    ocmj_write(0xf0);//表示汉字//f0表示特殊符号,如&,以下
    ocmj_write(xx);
    ocmj_write(yy);
    ocmj_write(data1);
	ocmj_write(data2);
}

/* ***********************************************************
                       传送LCD内部汉字数据到LCD
/* ************************** x:0x00~0x07 y:0x00~0x03********/
void hz_tran(unsigned char x,unsigned char y,unsigned char *hz_p)
    {
	 x+=2;
     while((*hz_p)!=0)
	    {
		 ocmj_write(0xf0);
		 ocmj_write(x);
		 ocmj_write(y);
		 ocmj_write(*hz_p-0xa0);
		 hz_p++;
		 ocmj_write(*hz_p-0xa0);
		 hz_p++;
		 if(x<0x09)
 		    x++;
		 else
		    {
			 x=0x02;
			 y++;
			}	
		}
	}
/* ***********************************************************
                   移动函数
/* **********************************************************/

void up(void)                //上移
{
     ocmj_write(0xf5);
}

void down(void)              //下移
{
    ocmj_write(0xf6);
}

void left(void)              //左移
{
     ocmj_write(0xf7);
}

void right(void)             //右移
{
    ocmj_write(0xf8);
}
void fangbai()
{
 ocmj_write(0xfa);
 
}
void  mouse (void)
{
    ocmj_write(0xFB);
    ocmj_write(0x07);
}	
	
/* ***********************************************************
                      画点函数
/* **********************************************************/
void pset(unsigned char x,unsigned char y)
     {
	  ocmj_write(0xf2);
	  ocmj_write(x+32);
	  ocmj_write(y);
	 }	

/* ***********************************************************
                      画线函数
/* **********************************************************/
void line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
    unsigned char t;
	signed int xerr=0,yerr=0;
	signed int delta_x,delta_y,distance;
	signed char incx,incy;

/* 	计算两个方向的长度 */
	delta_x=x2-x1;
	delta_y=y2-y1;

/* 计算增量的方向,增量为"0"表示为垂直或水平线 */
	if(delta_x>0)
	     incx=1;
	else
	    {
		 if( delta_x==0 )
		      incx=0;
		 else
		      {
			   incx=-1;
			   delta_x =-delta_x;
			  }
		}
	if(delta_y>0)
	      incy=1;
	else
	    {
		 if( delta_y==0 )
		     incy=0;
		 else
		     {
			  incy=-1;
			  delta_y =-delta_y;
			 }
		}
/*  确定画线的范围 */
	if( delta_x > delta_y ) distance=delta_x;
	else distance=delta_y;

/* 画线 */
	for(t=0;t<= distance+1;t++)
	   {
		ocmj_write(0xf2);
	    ocmj_write(x1+32);
	    ocmj_write(y1);
 	    xerr += delta_x ;
		yerr += delta_y ;
		if( xerr > distance )
		    {
			xerr-=distance;
 		    x1+=incx;
		    }
		if( yerr > distance )
		    {
			yerr-=distance;
 		    y1+=incy;
    		}
  	  }
}	     
void datechuli(void)
{write_ASCII(0xf9,4,32,61);//= 
 write_ASCII(0xf9,6,32,table1[rezult/1000000000]);
 write_ASCII(0xf9,7,32,table1[rezult%1000000000/100000000]);
 write_ASCII(0xf9,8,32,table1[rezult%100000000/10000000]);
 write_ASCII(0xf9,9,32,table1[rezult%10000000/1000000]);
 write_ASCII(0xf9,10,32,table1[rezult%1000000/100000]);
 write_ASCII(0xf9,11,32,table1[rezult%100000/10000]);
 write_ASCII(0xf9,12,32,table1[rezult%10000/1000]);
 write_ASCII(0xf9,13,32,table1[rezult%1000/100]);
 write_ASCII(0xf9,14,32,table1[rezult%100/10]);
 write_ASCII(0xf9,15,32,table1[rezult%10]);
}

//*********************************************************//
            /*PS2键盘中断处理*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -