[教学研究]16-32点阵程序
/*
16*32点阵程序
*/
#include
#include
#define uchar unsigned char
//用到的引脚及端口定义及全局变量
sbit SERIALIN_0=P2^0; //定义P2.0为列向第1个74HC595
的DATA输入
sbit SERIALIN_1=P2^1; //定义P2.1为列向第1个74HC595
的DATA输入
sbit SERIALIN_2=P2^2; //定义P2.2为列向第1个74HC595
的DATA输入
sbit SERIALIN_3=P2^3; //定义P2.3为列向第1个74HC595
的DATA输入
sbit CLOCK=P2^4; //74HC595的移位时钟控制
sbit LATCH=P2^5; //74HC595的锁存输出时钟控制
uchar temp[4]={0,0,0,0}; //用到的74HC595显示缓冲区变量
uchar disp[4][16]; //用到的显示缓冲区
//=====================================================================
==============//
//定义要显示的汉字代码段 16*16,分别是左上,左下,右上,右下
//=====================================================================
==============//
uchar code word[16][16]={
{0xDF,0xFF,0xE8,0x01,0xEF,0xF7,0xFF,0xF7,0x77,0xF7,0xB4,0x37,0xAD,0xB7,0xED,0xB7},
{0xDD,0xB7,0xDC,0x37,0x1D,0xB7,0xDF,0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,0xD7,0xDF,0xEF
},/*"河",0*/
{0xFF,0xFF,0xDF,0xBF,0xEF,0xBF,0xED,0xBF,0x7D,0xB3,0xB5,0x8B,0xB4,0x3B,0xE9,0xBB}
,
{0xED,0xBB,0xED,0xAB,0xDD,0xB7,0x1D,0xBF,0xDD,0xBD,0xDD,0xFD,0xDE,0x01,0xFF,0xFF},/*"池",1*/
{0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF},
{0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF},/*"学",2*/
{0xFF,0x7F,0x07,0xBF,0x70,0x01,0x6B,0xFB,0x5F,0xFF,0x5C,0x07,0x6F,0xFF,0x77,0xFF},
{0x70,0x01,0x56,0xDF,0x6E,0xDF,0x7E,0xDF,0x7D,0xDD,0x7D,0xDD,0x7B,0xDD,0x77,0xE1},/*"院",3*/
}; //阳码 行式 逆向
//===================================================================================//
//名称:delay
//说明:延时函数
//功能:根据需要取不同的值,实现不同的延时效果
//===================================================================================//
void delay()
{
uchar i;
for(i=0;i<=100;i++);
}
//===================================================================================//
//名称:shift
//说明:74HC595左移程序
//功能:实现74HC595的移位输入
//===================================================================================//
void shift()
{
uchar j;
for(j=0;j<8;j++)
{
temp[0]=temp[0]<<1; //将temp[0]左移1位
SERIALIN_0=CY; //进位输出到移位寄存器
temp[1]=temp[1]<<1; //将temp[1]左移1位后
SERIALIN_1=CY; //进位输出到移位寄存器
temp[2]=temp[2]<<1; //将temp[2]左移1位后
SERIALIN_2=CY; //进位输出到移位寄存器
temp[3]=temp[3]<<1; //将temp[0]左移1位后的进位输出到移位寄存器
SERIALIN_3=CY; //进位输出到移位寄存器
CLOCK=1; //移位时钟控制移位
CLOCK=0;
}
}
//=====================================================================
==============//
//名称:display—wor
//说明:汉字显示子程序
//功能:实现汉字显示
//=====================================================================
==============//
void display_word()
{
uchar m,p;
for(p=0;p<=20;p++) //一屏
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
刷20次
{
for(m=0;m<=15;m++) //从0,15行逐行扫描
{
temp[0]=disp[0][m]; //将显示内容0放入缓冲区0
temp[1]=disp[1][m]; //将显示内容1放入缓冲区1
temp[2]=disp[2][m]; //将显示内容2放入缓冲区2
temp[3]=disp[3][m]; //将显示内容3放入缓冲区3
shift(); //左移
LATCH=0; //锁存输出
LATCH=1;
P0=m; //显示当前行
delay(); //延时
P0=0xff; //显示完一行重新初始化防止重影
}
}
}
//=====================================================================
==============//
//名称:main
//说明:主函数
//功能:形成要显示的汉字代码实现各种功能显示,本例为左移显示 //=====================================================================
==============//
void main()
{
uchar i,j,m;
while(1)
{
for(i=0;i<=23;i++) //一共显示11个字符
{
for(j=0;j<8;j++) //左移0,7位实现左移
{
for(m=0;m<=15;m++) //逐行左移
{
disp[0][m]=(word[i][m]<>(8-j)); //将第i+1个8*8小块左移j位后的移出
disp[1][m]=(word[i+1][m]<>(8-j)); //值与第i个相或加在一起,形成左移效果
disp[2][m]=(word[i+2][m]<>(8-j)); //
disp[3][m]=(word[i+3][m]<>(8-j)); //
}
display_word(); //调用显示
}
}
}
}