初级会员
- 积分
- 194
- 金钱
- 194
- 注册时间
- 2019-9-24
- 在线时间
- 69 小时
|
3金钱
STC官网上的段码屏驱动程序这部份内容看得不是很明白,求高手费心解释,断码屏原理我是理解的,扫描函数也懂,装载显示这个不明白,还有buff这个数组
/*
MCU PIN P17 P16 P15 P14 P13 P12 P11 P10 P27 P26 P25 P24 P23 P22 P21 P20
LCD PIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
LCD PIN name SEG11 SEG10 SEG9 SEG8 SEG7 SEG6 SEG5 SEG4 SEG3 SEG2 SEG1 SEG0 COM3 COM2 COM1 COM0
-- 1D 2: 2D 2. 3D 4: 4D 4. 5D 5. 6D COM3
1E 1C 2E 2C 3E 3C 4E 4C 5E 5C 6E 6C COM2
1G 1B 2G 2B 3G 3B 4G 4B 5G 5B 6G 6B COM1
1F 1A 2F 2A 3F 3A 4F 4A 5F 5A 6F 6A COM0
B7 B6 B5 B4 B3 B2 B1 B0
buff[0]: -- 1D 2: 2D 2. 3D 4: 4D
buff[1]: 1E 1C 2E 2C 3E 3C 4E 4C
buff[2]: 1G 1B 2G 2B 3G 3B 4G 4B
buff[3]: 1F 1A 2F 2A 3F 3A 4F 4A
buff[4]: 4. 5D 5. 6D -- -- -- --
buff[5]: 5E 5C 6E 6C -- -- -- --
buff[6]: 5G 5B 6G 6B -- -- -- --
buff[7]: 5F 5A 6F 6A -- -- -- --
*/
/****************** 对第1~6数字装载显示函数 ***************************/
u8 code T_LCD_mask[4] = {~0xc0,~0x30,~0x0c,~0x03}; //1100 0000 0011 0000 0000 1100 0000 0011
u8 code T_LCD_mask4[4] = {~0x40,~0x10,~0x04,~0x01}; //0100 0000 0001 0000 0000 0100 0000 0001
void LCD_load(u8 n,u8 dat) //n为第几个数字,为1~6,dat为要显示的数字 10us@22.1184MHZ
{
u8 i,k;
u8 *p;
if((n == 0) || (n > 6)) return;
i = t_display[dat];
if(n <= 4) //1~4
{
n--;
p = LCD_buff;
}
else
{
n = n - 5;
p = &LCD_buff[4];
}
k = 0;
if(i & 0x08) k |= 0x40; //D
*p = (*p & T_LCD_mask4[n]) | (k>>2*n);
p++;
k = 0;
if(i & 0x04) k |= 0x40; //C
if(i & 0x10) k |= 0x80; //E
*p = (*p & T_LCD_mask[n]) | (k>>2*n);
p++;
k = 0;
if(i & 0x02) k |= 0x40; //B
if(i & 0x40) k |= 0x80; //G
*p = (*p & T_LCD_mask[n]) | (k>>2*n);
p++;
k = 0;
if(i & 0x01) k |= 0x40; //A
if(i & 0x20) k |= 0x80; //F
*p = (*p & T_LCD_mask[n]) | (k>>2*n);
}
|
|