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

📄 menus.c

📁 xc164的双can的使用例程
💻 C
📖 第 1 页 / 共 2 页
字号:
							if (digit_index == 1)
							{
								mo = (digits[0]-0x30);
								CAN_HWOBJ[mo].uwMSGCTR = 0xe7ff;; 	// Transmit MO (digits[0]-0x30)
							}
							else
							{
								mo = 10*((unsigned int)digits[0]-0x30) + (unsigned int)digits[1]-0x30;
								if (mo <32)
									CAN_HWOBJ[mo].uwMSGCTR = 0xe7ff;; 	// Transmit MO 10*(digits[0]-0x30) + digits[1]-0x30
							}
							PrintPrompt(0,mo);
							MenuID = 0;
						}
					}
					if (digit_index < 2)
					{
						if ( (key < ';') && (key > '/') ) // digit
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key;
						}
					}
				}
				
				break;
			case 2:
				if (key == 27)	// Escape
				{
					PrintPrompt(0,mo);
					MenuID = 0;
				}
				if (digit_index)
				{
					if (key == 8)	// backspace
					{
						MoveCursor(CursorPosY, --CursorPosX);
						putchar(' ');
						MoveCursor(CursorPosY, CursorPosX);
						digits[--digit_index] = 0;
					}
				}
				if(digit_index < 3)
				{
					if (digit_index)
					{
						if (key == 13)	//Enter
						{
							if (digit_index == 1)
							{
								mo = (digits[0]-0x30);
							}
							else
							{
								mo = 10*(digits[0]-0x30) + digits[1]-0x30;
							}
							PrintPrompt(3, mo);
							MenuID = 3;
						}
					}
					if (digit_index < 2)
					{
						if ( (key < ';') && (key > '/') ) // digit
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key;
						}
					}
				}
				
				break;
			case 3:
				if (key == 27)	// Escape
				{
					PrintPrompt(2,mo);
					MenuID = 2;
				}
				else if (key == 'N' || key == 'n')
				{
					PrintPrompt(4, mo);
					MenuID = 4;
				}
				else if (key == 'R' || key == 'r')
				{
					if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
					{
						CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; 	// disable MO
						CAN_HWOBJ[mo].uwMSGCFG &= ~0x0008;	// Set to dir to rx
						CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; 	// enable MO
					}
					else // if MO invalid
					{
						CAN_HWOBJ[mo].uwMSGCFG &= ~0x0008;	// Set to dir to rx
					}
					PrintPrompt(3,mo);
					MenuID = 3;
					MO_Status[mo]=1;
					UpdateStatus();
				}
				else if (key == 'T' || key == 't')
				{
					if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
					{
						CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; 	// disable MO
						CAN_HWOBJ[mo].uwMSGCFG |= 0x0008;	// Set dir to tx
						CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; 	// enable MO
					}
					else // if MO invalid
					{
						CAN_HWOBJ[mo].uwMSGCFG |= 0x0008;	// Set dir to tx
					}
					PrintPrompt(3,mo);
					MenuID = 3;
					MO_Status[mo]=1;
					UpdateStatus();
				}
				else if (key == 'I' || key == 'i')
				{
					PrintPrompt(5, mo);
					MenuID = 5;
				}
				else if (key == 'M' || key == 'm')
				{
					PrintPrompt(6, mo);
					MenuID = 6;
				}
				else if (key == 'D' || key == 'd')
				{
					PrintPrompt(7, mo);
					MenuID = 7;
				}
				else if (key == 'V' || key == 'v')
				{
					PrintPrompt(8, mo);
					MenuID = 8;
				}
				break;
			case 4:
				if (key == 27)	// Escape
				{
					PrintPrompt(3,mo);
					MenuID = 3;
				}
				else if (key == 'A' || key == 'a')
				{
					if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
					{
						CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; 	// disable MO
						CAN_HWOBJ[mo].uwMSGCFG &= ~0x0002;	// Set to Node A
						CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; 	// enable MO
					}
					else // if MO invalid
					{
						CAN_HWOBJ[mo].uwMSGCFG &= ~0x0002;	// Set to Node A
					}
					PrintPrompt(3,mo);
					MenuID = 3;
					MO_Status[mo]=1;
					UpdateStatus();
				}
				else if (key == 'B' || key == 'b')
				{
					if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
					{
						CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; 	// disable MO
						CAN_HWOBJ[mo].uwMSGCFG |= 0x0002;	// Set to Node B
						CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; 	// enable MO
					}
					else // if MO invalid
					{
						CAN_HWOBJ[mo].uwMSGCFG |= 0x0002;	// Set to Node B
					}
					PrintPrompt(3,mo);
					MenuID = 3;
					MO_Status[mo]=1;
					UpdateStatus();
				}
				break;
			case 5:
 				if (key == 27)	// Escape
				{
					PrintPrompt(3,mo);
					MenuID = 3;
				}
				if (digit_index)
				{
					if (key == 8)	// backspace
					{
						MoveCursor(CursorPosY, --CursorPosX);
						putchar(' ');
						MoveCursor(CursorPosY, CursorPosX);
						digits[--digit_index] = 0;
					}
				}
				if(digit_index < 4)
				{
					if (digit_index)
					{
						if (key == 13)	//Enter
						{
							if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
							{
		
								CAN_HWOBJ[mo].uwMSGCTR = 0xfb7f; 	// Set CPU Update, reset MSGVAL
								if (digit_index == 1)
								{
									CAN_HWOBJ[mo].ulCANAR   = (unsigned long)(digits[0]) << 18;
								}
								else if (digit_index == 2)
								{
									CAN_HWOBJ[mo].ulCANAR   = (unsigned long)((digits[0]<<4)|digits[1]) << 18;
								}
								else if (digit_index == 3)
								{
									CAN_HWOBJ[mo].ulCANAR   = ((unsigned long)((unsigned long)(digits[0]<<8)|(digits[1]<<4)|digits[2]) & 0x07FF) << 18;
								}
   								CAN_HWOBJ[mo].uwMSGCTR  = 0xf7bf;  // reset CPUUPD, set MSGVAL
							}
							else
							{
								if (digit_index == 1)
								{
									CAN_HWOBJ[mo].ulCANAR   = (unsigned long)(digits[0]) << 18;
								}
								else if (digit_index == 2)
								{
									CAN_HWOBJ[mo].ulCANAR   = (unsigned long)((digits[0]<<4)|digits[1]) << 18;
								}
								else if (digit_index == 3)
								{
									CAN_HWOBJ[mo].ulCANAR   = ((unsigned long)((unsigned long)(digits[0]<<8)|(digits[1]<<4)|digits[2]) & 0x07FF) << 18;
								}
							}
							MO_Status[mo] = 1;
							PrintPrompt(3, mo);
							MenuID = 3;
						}
					}
					if (digit_index < 3)
					{
						if ( (key < ';') && (key > '/') ) // digit
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key-48;		// convert to number
						}
						else if ( (key < 'G') && (key > '@') ) // Cap Letter
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key-55;		// convert to number
						}
						else if ( (key < 'g') && (key > 96) ) // Small Letter
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key-87;	// convert to number
						}
					}
				}
				break;
			case 6:
 				if (key == 27)	// Escape
				{
					PrintPrompt(3,mo);
					MenuID = 3;
				}
				if (digit_index)
				{
					if (key == 8)	// backspace
					{
						MoveCursor(CursorPosY, --CursorPosX);
						putchar(' ');
						MoveCursor(CursorPosY, CursorPosX);
						digits[--digit_index] = 0;
					}
				}
				if(digit_index < 4)
				{
					if (digit_index)
					{
						if (key == 13)	//Enter
						{
							if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
							{
		
								CAN_HWOBJ[mo].uwMSGCTR = 0xfb7f; 	// Set CPU Update, reset MSGVAL
								if (digit_index == 1)
								{
									CAN_HWOBJ[mo].ulCANAMR   = (unsigned long)(digits[0]) << 18;
								}
								else if (digit_index == 2)
								{
									CAN_HWOBJ[mo].ulCANAMR   = (unsigned long)((digits[0]<<4)|digits[1]) << 18;
								}
								else if (digit_index == 3)
								{
									CAN_HWOBJ[mo].ulCANAMR   = ((unsigned long)((unsigned long)(digits[0]<<8)|(digits[1]<<4)|digits[2]) & 0x07FF) << 18;
								}
   								CAN_HWOBJ[mo].uwMSGCTR  = 0xf7bf;  // reset CPUUPD, set MSGVAL
							}
							else
							{
								if (digit_index == 1)
								{
									CAN_HWOBJ[mo].ulCANAMR   = (unsigned long)(digits[0]) << 18;
								}
								else if (digit_index == 2)
								{
									CAN_HWOBJ[mo].ulCANAMR   = (unsigned long)((digits[0]<<4)|digits[1]) << 18;
								}
								else if (digit_index == 3)
								{
									CAN_HWOBJ[mo].ulCANAMR   = ((unsigned long)((unsigned long)(digits[0]<<8)|(digits[1]<<4)|digits[2]) & 0x07FF) << 18;
								}
							}
							MO_Status[mo] = 1;
							PrintPrompt(3, mo);
							MenuID = 3;
						}
					}
					if (digit_index < 3)
					{
						if ( (key < ';') && (key > '/') ) // digit
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key-48;		// convert to number
						}
						else if ( (key < 'G') && (key > '@') ) // Cap Letter
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key-55;		// convert to number
						}
						else if ( (key < 'g') && (key > 96) ) // Small Letter
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key-87;	// convert to number
						}
					}
				}
				break;
			case 7:
 				if (key == 27)	// Escape
				{
					PrintPrompt(3,mo);
					MenuID = 3;
				}
				if (digit_index)
				{
					if (key == 8)	// backspace
					{
						MoveCursor(CursorPosY, --CursorPosX);
						putchar(' ');
						MoveCursor(CursorPosY, CursorPosX);
						digits[--digit_index] = 0;
					}
				}
				if(digit_index < 9)
				{
					if (digit_index)
					{
						if (key == 13)	//Enter
						{
							// <<<<<<<<< NEED TO add NEWDAT and Check if DIR is RX or TX
							CAN_HWOBJ[mo].uwMSGCTR = 0xfaff;       // set CPUUPD and NEWDAT
							if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
							{
								CAN_HWOBJ[mo].uwMSGCFG &= 0xFF0F;
								CAN_HWOBJ[mo].uwMSGCFG |= digit_index << 4;	// Set DLC
								for (i = 0; i< digit_index; i++)
									CAN_HWOBJ[mo].ubData[i] = digits[i];
   								CAN_HWOBJ[mo].uwMSGCTR  = 0xf7bf;  // reset CPUUPD, set MSGVAL
							}
							else
							{	
								CAN_HWOBJ[mo].uwMSGCFG &= 0xFF0F;
								CAN_HWOBJ[mo].uwMSGCFG |= digit_index << 4;	// Set DLC
								for (i = 0; i< digit_index; i++)
									CAN_HWOBJ[mo].ubData[i] = digits[i];
								CAN_HWOBJ[mo].uwMSGCTR  = 0xf7Ff;  // reset CPUUPD
							}
							MO_Status[mo] = 1;
							PrintPrompt(3, mo);
							MenuID = 3;
						}
					}
					if (digit_index < 8)
					{
						if ( (key < 127) && (key > 31) ) // visible key
						{
							putchar(key);
							CursorPosX++;
							digits[digit_index++] = key;
						}
					}
				}
				break;
			case 8:
				if (key == 27)	// Escape
				{
					PrintPrompt(3,mo);
					MenuID = 3;
				}
				else if (key == 'E' || key == 'e')
				{
					CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; 	// enable MO
					PrintPrompt(3,mo);
					MenuID = 3;
					MO_Status[mo]=1;
					UpdateStatus();
				}
				else if (key == 'D' || key == 'd')
				{
					CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; 	// disable MO
					PrintPrompt(3,mo);
					MenuID = 3;
					MO_Status[mo]=1;
					UpdateStatus();
				}
				break;

			default:
				break;
		}
	}
}

⌨️ 快捷键说明

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