📄 led点阵显示屏源程序.c
字号:
for(i=0;i<1000;i++) //延时一定时间后再更新显示缓冲区
for(j=0;j<20;j++)
{
if(showbuf_sign==0)
{
show_static(show_buffer1); //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
}
else
{
show_static(show_buffer2);
}
}
}
//show_buffer1={}; //不能给二维数组同时赋值,注意
// show_buffer2=;
}
/*-----------------------------显示右移子程序--------------------------*/
/*
**************************************************************************
**子程序入口:需要右移显示的数据的首地址,不可以是显示缓冲区的地址,
** 数据必须是二维数组,字节数只能16*8字节
*子程序功能:显示内容右移,开始部分和结束部分以空白填充;程序只能滚动显示一次
***************************************************************************
*/
void show_right(storep3)
uchar xdata **storep3;
{
uint num=8+8; //显示缓冲区更新的次数为16次 ,数据长8字节
uint i,j,m;
for(i=0;i<16;i++) //对两个显示缓冲区清零
{
for(j=0;j<8;j++)
{
show_buffer1[i][j]=0x00;
show_buffer2[i][j]=0x00;
}
}
TMOD=TMOD&&0xf0; //计数器0工作在方式1,
TMOD=TMOD||0x01; //声明:计数器0只有各个显示子程序可以使用,
//其他子程序只能使用计数器0或计数器2
TH0=(65536-25000)/256; //晶振12MHZ,计数25000次,1S中断40次
TL0=(65536-25000)%256;
EA=1 ; //CPU开中断,定时器0开中断
ET0=1;
PT0=0; //定时器0为中断低优先级
TR0=1; //启动定时器0
showbuf_sign=0; //程序开始时使用show_buffer1显示缓冲区
for(m=0;m<num;m++)
{
if(showbuf_sign==0) //正在显示显示缓冲区show_buffer1中的内容,
//则更新show_buffer2中的内容
{
for(i=0;i<=m;i++) //滚动右移显示移动的第m次,需要移动m列数据
//需要移位的个数,如第一次仅需更新显示缓冲区的第一位
{
for(j=0;j<16;j++)
{
show_buffer2[j][i]=storep3[j][7-(m-i)];
}
}
}
else
{
for(i=0;i<=m;i++) //滚动右移显示移动的第m次,需要移动m列数据
//需要移位的个数,如第一次仅需更新显示缓冲区的最后一位
{
for(j=0;j<16;j++)
{
show_buffer1[j][i]=storep3[j][7-(m-i)];
}
}
//数据完成一次移动
showbuf_sign=~showbuf_sign; //显示区标志位取反,
//显示另外一个显示缓冲区中的内容
}
for(i=0;i<100;i++)
for(j=0;j<20;j++)
{
if(showbuf_sign==0)
{
show_static(show_buffer1); //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
}
else
{
show_static(show_buffer2);
}
}
}
for(i=0;i<100;i++) //全部数据已经移到显示缓冲区,需要全屏
//静态显示一段时间
{
if(showbuf_sign==0)
{
show_static(show_buffer1); //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
}
else
{
show_static(show_buffer2);
}
}
}
/*-----------------------------上开屏子程序-------------------------*/
/*
*************************************************************************
**子程序入口:需要进行上开屏显示的数据的首地址,不可以是显示缓冲区的地址,
** 数据必须是二维数组,字节数只能16*8字节
*子程序功能:字体从上向下开屏,只可以显示4个汉字(或等量的字符),开完屏后进
** 一段时间的静态显示
*************************************************************************
*/
void show_up(storep4)
uchar xdata **storep4;
{
uint num=16; //显示缓冲区更新的次数为16次 ,即:屏幕的宽度
uint i,j,m;
for(i=0;i<16;i++) //对两个显示缓冲区清零
{
for(j=0;j<8;j++)
{
show_buffer1[i][j]=0x00;
show_buffer2[i][j]=0x00;
}
}
TMOD=TMOD&&0xf0; //计数器0工作在方式1,
TMOD=TMOD||0x01;
TH0=(65536-25000)/256; //晶振12MHZ,计数25000次,1S中断40次
TL0=(65536-25000)%256;
EA=1 ; //CPU开中断,定时器0开中断
ET0=1;
PT0=0; //定时器0为中断低优先级
TR0=1; //启动定时器0
showbuf_sign=0; //程序开始时使用show_buffer1显示缓冲区
for(m=0;m<num;m++)
{
if(showbuf_sign==0) //正在显示显示缓冲区show_buffer1中的内容,则更新show_buffer2中的内容
{
for(i=0;i<=m;i++) //上开屏显示移动的第m次,需要移动m列数据
//需要移位的个数,如第一次仅需更新显示缓冲区的第一位
{
for(j=0;j<16;j++)
{
show_buffer2[i][j]=storep4[15-(m-i)][j];
//一行行的更新
}
}
}
else
{
for(i=0;i<=m;i++) //上开屏显示移动的第m次,需要移动m列数据
//需要移位的个数,如第一次仅需更新显示缓冲区的第一位
{
for(j=0;j<16;j++)
{
show_buffer1[i][j]=storep4[15-(m-i)][j];
}
}
//数据完成一次移动
showbuf_sign=~showbuf_sign; //显示区标志位取反,显示另外一个
//显示缓冲区中的内容
}
for(i=0;i<50;i++)
for(j=0;j<20;j++)
{
if(showbuf_sign==0)
{
show_static(show_buffer1); //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
}
else
{
show_static(show_buffer2);
}
}
}
for(i=0;i<100;i++) //全部数据已经移到显示缓冲区,需要全屏
//静态显示一段时间
{
if(showbuf_sign==0)
{
show_static(show_buffer1); //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
}
else
{
show_static(show_buffer2);
}
}
}
/*-----------------------------下开屏子程序----------------------------*/
/*
*************************************************************************
**子程序入口:需要进行下开屏显示的数据的首地址,不可以是显示缓冲区的地址,
** 数据必须是二维数组,字节数只能16*8字节
**子程序功能:字体从下向上开屏,只可以显示4个汉字(或等量的字符),开完屏后进** 行一段时间的静态显示
**************************************************************************
*/
void show_down(storep5)
uchar xdata **storep5;
{
uint num=16; //显示缓冲区更新的次数为16次 ,即:屏幕的宽度
uint i,j,m;
for(i=0;i<16;i++) //对两个显示缓冲区清零
{
for(j=0;j<8;j++)
{
show_buffer1[i][j]=0x00;
show_buffer2[i][j]=0x00;
}
}
TMOD=TMOD&&0xf0; //计数器0工作在方式1,
TMOD=TMOD||0x01;
TH0=(65536-25000)/256; //晶振12MHZ,计数25000次,1S中断40次
TL0=(65536-25000)%256;
EA=1 ; //CPU开中断,定时器0开中断
ET0=1;
PT0=0; //定时器0为中断低优先级
TR0=1; //启动定时器0
showbuf_sign=0; //程序开始时使用show_buffer1显示缓冲区
for(m=0;m<num;m++)
{
if(showbuf_sign==0) //正在显示显示缓冲区show_buffer1中的内容,
//则更新show_buffer2中的内容
{
for(i=0;i<=m;i++) //下开屏显示移动的第m次,需要移动m列数据
//需要移位的个数,如第一次仅需更新显示缓冲区的最后一位
{
for(j=0;j<16;j++)
{
show_buffer2[15-(m-i)][j]=storep5[i][j];
//一行行的更新
}
}
}
else
{
for(i=0;i<=m;i++) //下开屏显示移动的第m次,需要移动m列数据
//需要移位的个数,如第一次仅需更新显示缓冲区的最后一位
{
for(j=0;j<16;j++)
{
show_buffer1[15-(m-i)][j]=storep5[i][j];
}
}
//数据完成一次移动
showbuf_sign=~showbuf_sign; //显示区标志位取反,显示另外一个
//显示缓冲区中的内容
}
for(i=0;i<50;i++)
for(j=0;j<20;j++)
{
if(showbuf_sign==0)
{
show_static(show_buffer1); //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
}
else
{
show_static(show_buffer2);
}
}
}
for(i=0;i<100;i++) //全部数据已经移到显示缓冲区,需要全屏
//静态显示一段时间
{
if(showbuf_sign==0)
{
show_static(show_buffer1); //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
}
else
{
show_static(show_buffer2);
}
}
}
/*---------------------------上展开屏子程序-------------------------*/
/*
********************************************************************
**子程序入口:需要进行上展开屏显示的数据的首地址,不可以是显示缓冲区的地址,
** 数据必须是二维数组,字节数只能16*8字节
**子程序功能:字体从上到下逐渐展开显示,只可以显示4个汉字(或等量的字符),开** 完屏后进行一段时间的静态显示
********************************************************
*/
void show_upspread(storep6)
uchar xdata **storep6;
{
uint num=16; //显示缓冲区更新的次数为16次 ,即:屏幕的宽度
uint i,j,m;
for(i=0;i<16;i++) //对两个显示缓冲区清零
{
for(j=0;j<8;j++)
{
show_buffer1[i][j]=0x00;
show_buffer2[i][j]=0x00;
}
}
TMOD=TMOD&&0xf0; //计数器0工作在方式1,
TMOD=TMOD||0x01;
TH0=(65536-25000)/256; //晶振12MHZ,计数25000次,1S中断40次
TL0=(65536-25000)%256;
EA=1 ; //CPU开中断,定时器0开中断
ET0=1;
PT0=0; //定时器0为中断低优先级
TR0=1; //启动定时器0
showbuf_sign=0; //程序开始时使用show_buffer1显示缓冲区
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -