📄 lcd.c
字号:
LCD_DIG_4 = 0x00;
OS_EXIT_CRITICAL();
}
/*
*********************************************************************************************************
* TURN ON ALL THE SEGMENTS TO TEST THE LCD
*********************************************************************************************************
*/
void LCD_DispTest (void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
LCD_DIG_1 = 0xFF;
LCD_DIG_2 = 0xFF;
LCD_DIG_3 = 0xFF;
LCD_DIG_4 = 0xFF;
OS_EXIT_CRITICAL();
}
/*
*********************************************************************************************************
* DISPLAY AN ASCII STRING USING 7-SEGMENTS
*********************************************************************************************************
*/
void LCD_DispStr (INT8U dig, char *s)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
switch (dig) {
case 1:
OS_ENTER_CRITICAL();
LCD_DIG_1 = LCD_ASCIItoSegTbl[*s++ - 0x20]; /* Display the ASCII character with the colon segment */
LCD_DIG_2 = LCD_ASCIItoSegTbl[*s++ - 0x20]; /* Display the ASCII character with the DP2 segment */
LCD_DIG_3 = LCD_ASCIItoSegTbl[*s++ - 0x20]; /* Display the ASCII character with the DP3 segment */
LCD_DIG_4 = LCD_ASCIItoSegTbl[*s - 0x20]; /* Display the ASCII character with the DP4 segment */
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
LCD_DIG_2 = LCD_ASCIItoSegTbl[*s++ - 0x20]; /* Display the ASCII character with the DP2 segment */
LCD_DIG_3 = LCD_ASCIItoSegTbl[*s++ - 0x20]; /* Display the ASCII character with the DP3 segment */
LCD_DIG_4 = LCD_ASCIItoSegTbl[*s - 0x20]; /* Display the ASCII character with the DP4 segment */
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
LCD_DIG_3 = LCD_ASCIItoSegTbl[*s++ - 0x20]; /* Display the ASCII character with the DP3 segment */
LCD_DIG_4 = LCD_ASCIItoSegTbl[*s - 0x20]; /* Display the ASCII character with the DP4 segment */
OS_EXIT_CRITICAL();
break;
case 4:
OS_ENTER_CRITICAL();
LCD_DIG_4 = LCD_ASCIItoSegTbl[*s - 0x20]; /* Display the ASCII character with the DP4 segment */
OS_EXIT_CRITICAL();
break;
}
}
/*
*********************************************************************************************************
* DISPLAY A 16-bit UNSIGNED VALUE
*********************************************************************************************************
*/
void LCD_DispINT16U (INT16U val)
{
INT8U digit;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
if (val > 9999) { /* Make sure value fits in 4 digits */
val = 9999;
}
OS_ENTER_CRITICAL();
digit = (INT8U)(val / 1000); /* Look up ASCII value for thousands digit */
LCD_DIG_1 = LCD_ASCIItoSegTbl[digit + '0' - ' '];
val = val % 1000;
digit = (INT8U)(val / 100); /* Look up ASCII value for hundreds digit */
LCD_DIG_2 = LCD_ASCIItoSegTbl[digit + '0' - ' '];
val = val % 100;
digit = (INT8U)(val / 10); /* Look up ASCII value for tens digit */
LCD_DIG_3 = LCD_ASCIItoSegTbl[digit + '0' - ' '];
val = val % 10;
digit = (INT8U)val; /* Look up ASCII value for units digit */
LCD_DIG_4 = LCD_ASCIItoSegTbl[digit + '0' - ' '];
OS_EXIT_CRITICAL();
}
/*
*********************************************************************************************************
* DISPLAY A 16-bit UNSIGNED VALUE AS HEXADECIMAL
*********************************************************************************************************
*/
void LCD_DispINT16UHex (INT16U val)
{
INT8U digit;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
digit = (INT8U)((val & 0xF000) >> 12); /* Look up ASCII value for MS Hex Digit */
if (digit < 10) {
LCD_DIG_1 = LCD_ASCIItoSegTbl[digit + '0' - ' '];
} else {
LCD_DIG_1 = LCD_ASCIItoSegTbl[digit - 10 + 'A' - ' '];
}
digit = (INT8U)((val & 0x0F00) >> 8); /* Look up ASCII value for next MS digit */
if (digit < 10) {
LCD_DIG_2 = LCD_ASCIItoSegTbl[digit + '0' - ' '];
} else {
LCD_DIG_2 = LCD_ASCIItoSegTbl[digit - 10 + 'A' - ' '];
}
digit = (INT8U)((val & 0x00F0) >> 4); /* Look up ASCII value for next MS digit */
if (digit < 10) {
LCD_DIG_3 = LCD_ASCIItoSegTbl[digit + '0' - ' '];
} else {
LCD_DIG_3 = LCD_ASCIItoSegTbl[digit - 10 + 'A' - ' '];
}
digit = (INT8U)(val & 0x000F); /* Look up ASCII value for LS digit */
if (digit < 10) {
LCD_DIG_4 = LCD_ASCIItoSegTbl[digit + '0' - ' '];
} else {
LCD_DIG_4 = LCD_ASCIItoSegTbl[digit - 10 + 'A' - ' '];
}
OS_EXIT_CRITICAL();
}
/*
*********************************************************************************************************
* CLEAR ICON
*
* Description: This function is called to turn OFF a single icon (Decimal Point, Colon, UP/DOWN arrow)
* Arguments : icon is the ID number of the icon to turn OFF
* Returns : none
*********************************************************************************************************
*/
void LCD_DispIconClr (INT8U icon)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
switch (icon) {
case 1:
OS_ENTER_CRITICAL();
LCD_DIG_1 &= 0x7F;
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
LCD_DIG_2 &= 0x7F;
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
LCD_DIG_3 &= 0x7F;
OS_EXIT_CRITICAL();
break;
case 4:
OS_ENTER_CRITICAL();
LCD_DIG_4 &= 0x7F;
OS_EXIT_CRITICAL();
break;
}
}
/*
*********************************************************************************************************
* SET ICON
*
* Description: This function is called to turn ON a single icon (Decimal Point, Colon, UP/DOWN arrow)
* Arguments : icon is the ID number of the icon to turn ON
* Returns : none
*********************************************************************************************************
*/
void LCD_DispIconSet (INT8U icon)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
switch (icon) {
case 1:
OS_ENTER_CRITICAL();
LCD_DIG_1 |= 0x80;
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
LCD_DIG_2 |= 0x80;
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
LCD_DIG_3 |= 0x80;
OS_EXIT_CRITICAL();
break;
case 4:
OS_ENTER_CRITICAL();
LCD_DIG_4 |= 0x80;
OS_EXIT_CRITICAL();
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -