资源描述
实验八
一、 实验电路
16列点阵,RB控制每次1列有效,每列由RC 、RD输出16个点,一个汉字的显示需要有16步,下图为第1--4,后续步骤依此类推。
二、 测试程序
#include <p18F452.h> //调用头文件
#define U6U7_A PORTBbits.RB0 //定义U6、U7的A脚
#define U6U7_B PORTBbits.RB1 //定义U6、U7的B脚
#define U6U7_C PORTBbits.RB2 //定义U6、U7的C脚
#define U7_E PORTBbits.RB3 //定义U6的E3脚
#define U6_E PORTBbits.RB4 //定义U7的E3脚
unsigned char m;
const unsigned char han[]=
{
/*-- 文字: 国 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00,
};
//---------------------------------------
//名称: 写一个汉字到LED函数
//-----------------------------------------
void disp16_16(void)
{
if(++m>31) m=0;
PORTD=0;
PORTC=0;
PORTB=0;
if(m<16) PORTC=(han[m]);
else PORTD=(han[m]);
PORTB|=(m&0x07);
if((m&0x08)>0) U7_E=1;
else U6_E=1;
}
//---------------------------------------
//名称: 主函数
//-----------------------------------------
void main(void)
{
unsigned char k;
ADCON1=0X06; //所有IO均为数字口,模拟量输入禁止
TRISB=0B11100000; //RB0-4设置为输出
PORTB=0B00000000; //失能U6、U7
TRISD=0B00000000; //RD设置为输出
PORTD=0B00000000; //灭掉LED点阵屏的00-07行
TRISC=0B00000000; //RC设置为输出
PORTC=0B00000000; //灭掉LED点阵屏的08-15行
while(1)
{
for(k=0;k<70;k++);
disp16_16();
}
}
三、 思考
汉字字库和汉字之间的关系?
四、 实验准备
自己制作几个简单汉字的字库,上机实验时验证。
7
展开阅读全文