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

📄 cnc2119.c

📁 基于ARM7与CAN总线的加工中心面板控制系统软件。选用ARM单片机且带CAN接口的lpc2119芯片
💻 C
📖 第 1 页 / 共 2 页
字号:
		dat=KeyDone(data);
		rcv_buf[0]=dat>>8;
		rcv_buf[1]=dat;
		for(i=0;i<2;i++)				
			SendByte(rcv_buf[i]);
		while((U0LSR&0X20)==0);
    return 1;
	}
/*================================================
**函数名称:UART0_Ini()
**功能:初始化
**入口参数:baud,set
**出口参数:无
==================================================*/
uint8 UART0_Ini(uint32 baud,UARTMODE set)
	{
		uint32  bak;
		PINSEL0|=0X00000005;
	
		//参数过滤
		if((0==baud)||(baud<115200))
			return(0);
		if((set.datab<5)||(set.datab>8))
			return(0);
		if((0==set.stopb)||(set.stopb>2))
			return(0);
		if(set.parity>4)
			return(0);
		//设置串口波特率
		U0LCR=0x80;																	//DLAB位置1
		bak=(Fpclk>>4)/baud;
		U0DLM=bak>>8;
		U0DLL=bak&0xff;
		//设置串口模式
		bak=set.datab-5;															//设置字长度
		if(2==set.stopb)
			bak|=0x04;																//判断是否为2位停止位
		if(0!=set.parity)
			{
				set.parity=set.parity-1;
				bak|=0x08;
			}
		bak|=set.parity<<4;														//设置奇偶校验
		U0FCR=0x81;
		U0IER=0X01;
		U0LCR=bak;
		VICIntSelect=0x00000000;
		VICVectCntl1=0x26;
		VICVectAddr1=(int)IRQ_UART0;
		VICIntEnable|=0x00000040;
		return(1);


	}

/*========================================================




===========================================================*/
uint32 KeyDone(uint32 dat)
	{
		uint8	row,col,temp;
		switch(dat)                     //按键编码
			{
				case	0x40:
					row=0;
					col=0;
					nled=0x40;
					break;
				case	0x48:
					row=1;
					col=0;
					nled=0x48;
					break;
				case	0x50:
					row=2;
					col=0;
					nled=0x50;
					break;
				case	0x58:
					row=3;
					col=0;
					nled=0x58;
					break;
				case	0x60:
					row=4;
					col=0;
					nled=0x60;
					break;
				case	0x68:
					row=5;
					col=0;
					nled=0x68;
					break;
				case	0x41:
					row=0;
					col=1;
					nled=0x41;
					break;
				case	0x49:
					row=1;
					col=1;
					nled=0x49;
					break;
				case	0x51:
					row=2;
					col=1;
					nled=0x51;
					break;
				case	0x59:
					row=3;
					col=1;
					nled=0x59;
					break;
				case	0x61:
					row=4;
					col=1;
					nled=0x61;
					break;
				case	0x69:
					row=5;
					col=1;
					nled=0x69;
					break;
				case	0x42:
					row=0;
					col=2;
					nled=0x42;
					break;
				case	0x4A:
					row=1;
					col=2;
					nled=0x4A;
					break;
				case	0x52:
					row=2;
					col=2;
					nled=0x52;
					break;
				case	0x5A:
					row=3;
					col=2;
					nled=0x5A;
					break;
				case	0x62:
					row=4;
					col=2;
					nled=0x62;
					break;
				case	0x6A:
					row=5;
					col=2;
					nled=0x6A;
					break;
				case	0x43:
					row=0;
					col=3;
					nled=0x43;
					break;
				case	0x4b:
					row=1;
					col=3;
					nled=0x4b;
					break;
				case	0x53:
					row=2;
					col=3;
					nled=0x53;
					break;
				case	0x5b:
					row=3;
					col=3;
					nled=0x5b;
					break;
				case	0x63:
					row=4;
					col=3;
					nled=0x63;
					break;
				case	0x6b:
					row=5;
					col=3;
					nled=0x6b;
					break;
				case	0x44:
					row=0;
					col=4;
					nled=0x44;
					break;
				case	0x4c:
					row=1;
					col=4;
					nled=0x4c;
					break;
				case	0x54:
					row=2;
					col=4;
					nled=0x54;
					break;
				case	0x5c:
					row=3;
					col=4;
					nled=0x5c;
					break;
				case	0x64:
					row=4;
					col=4;
					nled=0x64;
					break;
				case	0x6c:
					row=5;
					col=4;
					nled=0x6c;
					break;
				case	0x45:
					row=0;
					col=5;
					nled=0x45;
					break;
				case	0x4d:
					row=1;
					col=5;
					nled=0x4d;
					break;
				case	0x55:
					row=2;
					col=5;
					nled=0x55;
					break;
				case	0x5d:
					row=3;
					col=5;
					nled=0x5d;
					break;
				case	0x65:
					row=4;
					col=5;
					nled=0x65;
					break;
				case	0x6d:
					row=5;
					col=5;
					nled=0x6d;
					break;
				default:
					break;
				}
			temp=keylist[row][col];
      //SendData(temp);
			return temp;
	}
/*====================================================




===================================================*/
void  IRQ_Eint0(void) __irq
	{	//下面尜加键值处理
		uint8	data;
		uint32 dat;
		CH452I2CWrByte(nled);												//相应按键的LED灯亮
		data=CH452I2CRead();
		dat=KeyDone(data);
		SendData(dat);
    ISendBuf(dat);		
		while((EXTINT&0x01)!=0)													//等待外部中断信号恢复为高电平
		EXTINT=0x01;															//清除EINTO中断标志
		VICVectAddr=0;																//向量中断结束
	}

/*=========================================================

    通码与断码 make_code 为键盘标准值

==========================================================*/
void sendmake(uint16 make_code)							//通码,按键按下,或持续按住
	{
			
		SendData(make_code);	//直接发低8位
    ISendBuf(make_code);
									
	}

/*=============================================================

       发送断码,按键释放后

================================================================*/
void sendbreak(uint16 make_code)				//断码,按键释放
	{
		uint8 sendsucc=0;					  //存储返回值
		uint8 t=0;										//记次数
		while(sendsucc!=0x08)							//判断是否发送成功,没有则继续发送断码
			{	                                      				
				sendsucc = 0;
				t++;
				sendsucc+=SendData(0xf0);				//发送断码0xf0
				sendsucc+=SendData(make_code);			//直接发送
        sendsucc+=ISendBuf(0xf0);
        sendsucc+=ISendBuf(make_code);
				if(t==5)						          	//防止一直没有成功发送断码,产生死循环
          break;	
			}
	}

/*=============================================================



================================================================*/
void Reset(void)
	{
	

	}
/*==============================================================

								主函数


================================================================*/

int main(void)
	{
    uint8 i,j;
    uint16 p;
    uart0_set.datab=8;
		uart0_set.stopb=1;
		uart0_set.parity=0;
		Reset();
    PINSEL0=0x00000000;
    PINSEL1=0x00000000;		
		//IO0DIR=PINCON;
    //IO0SET=PINCON;
		rcv_new=0;
		UART0_Ini(115200,uart0_set);
		CH452Init();	 
		InitCAN();
		while(1)
      {
        if(S_And==0)                   //如果+4按下,则发送通码,否则发送断码
          sendmake(IndeKey[0]);
        else
          sendbreak(IndeKey[0]);
        if(S_Sub==0)                   //如果-4按下,则发送通码,否则发送断码
          sendmake(IndeKey[1]);
        else
          sendbreak(IndeKey[1]);
        if(X_And==0)                   //如果+X按下,则发送通码,否则发送断码
          sendmake(IndeKey[2]);
        else
          sendbreak(IndeKey[2]);
        if(X_Sub==0)                   //如果-X按下,则发送通码,否则发送断码
          sendmake(IndeKey[3]);
        else
          sendbreak(IndeKey[3]);
        if(Y_And==0)                   //如果+Y按下,则发送通码,否则发送断码
          sendmake(IndeKey[4]);
        else
          sendbreak(IndeKey[4]);
        if(Y_Sub==0)                   //如果-Y按下,则发送通码,否则发送断码
          sendmake(IndeKey[5]);
        else
          sendbreak(IndeKey[5]);
       if(Z_And==0)                    //如果+Z按下,则发送通码,否则发送断码
          sendmake(IndeKey[6]);
        else
          sendbreak(IndeKey[6]);
        if(Z_Sub==0)                   //如果-Z按下,则发送通码,否则发送断码
          sendmake(IndeKey[7]);
        else
          sendbreak(IndeKey[7]);
        if(R_Oe0==1||R_Oe1==1)
          {
     
            for(i=0;i<5;i++)
              for(j=0;j<8;j++)
                {
                  p=RolaKey[i][j]&0x00ff;
                  if(ROECON==p)
                    {
                      SendData(RolaKey[i][j]);
                      ISendBuf(RolaKey[i][j]);
                    }
                    
                }
          }
      }
		//	return(0);
				
	}

⌨️ 快捷键说明

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