|
发表于 2009-9-26 19:53:25
|
显示全部楼层
大舅妈健身,效果也不错。
这个在ARM编译后更小。AVR不清楚。
可读性较差。
const unsigned int BUFFER0[10]={0xEB,0x60,0xC7,0xE5,0x6C,0xAD,0xAF,
0xE0,0xEF,0xED};
const unsigned int BUFFER1[10]={0xD7,0x06,0xE3,0xA7,0x36,0xB5,0xF5,
0x07,0xF7,0xB7};
const unsigned int POS_OFFEST[10]={8, 16, 28, 36, 48, 56, 92, 100, 108, 116};
//向液晶的数位处写一个0~9的数
//数位为大数码的左至右为0~5,小数码的右至左为6~9;
//number:想显示的数 0~9
//position:显示的数位
//display:显示开关,0 关闭该数位显示(此时number值无效),1 显示该数位数字
void lcd_number(unsigned short int number,unsigned short int position,unsigned short int display)
{
const unsigned int numberMode = (position < 6) ? BUFFER0[number] : BUFFER1[number];
const unsigned int currOffest = POS_OFFEST[position];
const unsigned int offestInWord = currOffest & 0xF;
const unsigned int bitMask = (position < 6) ? 0xEF : 0xF7;
if(offestInWord >= 12)
{
if(display == 0)
{
lcd_buffer[currOffest >> 4] &= ~((bitMask & 0xF) << 12);
lcd_buffer[(currOffest >> 4) + 1] &= ~((bitMask & 0xF0) >> 4);
}
else
{
lcd_buffer[currOffest >> 4] |= (numberMode & 0xF) << 12;
lcd_buffer[(currOffest >> 4) + 1] |= (numberMode & 0xF0) >> 4;
}
}
else
{
if(display == 0)
{
lcd_buffer[currOffest >> 4] &= ~(bitMask << offestInWord);
}
else
{
lcd_buffer[currOffest >> 4] |= numberMode << offestInWord;
}
}
flood_lcd_data();
} |
|