2个回答
展开全部
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define outdat P2
sbit ld=P3^0;
sbit lw=P3^1;
//数码管显示代码
unsigned char code tab[]={
0x01,0x02,0x03,0x04,0xFF,0xFF,0xFF,0xFF};
void delay1ms(unsigned int count) //延时1ms
{
unsigned char j;
for(;count>0;count--)
for(j=0;j<120;j++);
}
void display(unsigned char num)
{
outdat=tab[num];
ld=0;ld=1;ld=0;
outdat=0x01<<num;
lw=0;lw=1;lw=0;
delay1ms(2);
}
void main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++)
{
display(i);
}
}
}
奥蕾达
2024-11-14 广告
2024-11-14 广告
透明LED显示屏顾名思义就是LED屏像玻璃一样具有透过光线的性质。具有50%到90%的通透率,面板厚度仅为10m左右,其高通透性与其特殊的材质、结构及安装方式紧密相关。 透明LED显示屏与LED玻璃屏都LED显示屏具透明特点透明LED显示屏...
点击进入详情页
本回答由奥蕾达提供
展开全部
#include <at89x52.h>
#define uchar unsigned char
#define uint unsigned int
#define SPEED 1 //定义亮度
uchar col,disrow; //col为位移变量,disrow为行变量
uint word;
uchar code tab[]=
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
uchar code HZ[];
uchar BUFF[10];
void loadoneline(void);
void sendoneline(void);
void delay(uchar);
/*******根据列指针,由双字节合并为单字节的子程序模块12MHZ************/
uchar two_onebyte(uchar h1,uchar h2)
{
uchar temp,tempcol;
if(col<8) tempcol=col;
else tempcol=col-8;
temp=(h1<<tempcol)|(h2>>(8-tempcol));
temp=255-temp;
return temp;
}
/****************************主函数***************************/
void main(void)
{
uchar i;
col=0;word=0;
while(1)
{
while(col<16)// 循环16次,点亮并移动一个汉字
{
for(i=0;i<SPEED;i++)//汉字在屏幕上的停留时间(即移动速度快慢)
{
for(disrow=0;disrow<16;disrow++)//扫描16行
{
P2_5= 0;
P2_7=1;//消影。 E接在P2_4 ,=1;
loadoneline();//装载一线点阵数据
sendoneline();//发送一线点阵数据
P1=tab[disrow];
P2_7=0;//开显示
P2_5= 1; // 点亮屏幕
delay(50);
//P3_1=1; //(CLK=P3_1)上升沿595输出
}
}
col++; //列指针递增
}
col=0;word=word+32;// 一个汉字移动后,指向下一个汉字
if(word>=4480)word=0;// 移动154个汉字后,重新开始
}
}
/**************装载一线点阵数据****************/
void loadoneline(void)
{
uchar s;
for(s=0;s<3;s++) //s为要显示的数字+1
{
BUFF[2*s]=HZ[word+32*s+2*disrow];
BUFF[2*s+1]=HZ[word+1+32*s+2*disrow];
}
}
/***************发送一线点阵数据*******************/
void sendoneline(void)
{
char s;uchar inc;
if(col<8)inc=0;else inc=1;
for(s=0+inc;s<=3+inc;s++) // s=2*要显示的数字-1//<15
{
SBUF=two_onebyte(BUFF[s],BUFF[s+1]);
while(!TI);TI=0;
}
}
/******************延时程序******************************/
void delay(uchar k)
{
uchar i;
for(i=0;i<k;i++);
}
/***********************汉字点阵码*************************/
uchar code HZ[]=
#define uchar unsigned char
#define uint unsigned int
#define SPEED 1 //定义亮度
uchar col,disrow; //col为位移变量,disrow为行变量
uint word;
uchar code tab[]=
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
uchar code HZ[];
uchar BUFF[10];
void loadoneline(void);
void sendoneline(void);
void delay(uchar);
/*******根据列指针,由双字节合并为单字节的子程序模块12MHZ************/
uchar two_onebyte(uchar h1,uchar h2)
{
uchar temp,tempcol;
if(col<8) tempcol=col;
else tempcol=col-8;
temp=(h1<<tempcol)|(h2>>(8-tempcol));
temp=255-temp;
return temp;
}
/****************************主函数***************************/
void main(void)
{
uchar i;
col=0;word=0;
while(1)
{
while(col<16)// 循环16次,点亮并移动一个汉字
{
for(i=0;i<SPEED;i++)//汉字在屏幕上的停留时间(即移动速度快慢)
{
for(disrow=0;disrow<16;disrow++)//扫描16行
{
P2_5= 0;
P2_7=1;//消影。 E接在P2_4 ,=1;
loadoneline();//装载一线点阵数据
sendoneline();//发送一线点阵数据
P1=tab[disrow];
P2_7=0;//开显示
P2_5= 1; // 点亮屏幕
delay(50);
//P3_1=1; //(CLK=P3_1)上升沿595输出
}
}
col++; //列指针递增
}
col=0;word=word+32;// 一个汉字移动后,指向下一个汉字
if(word>=4480)word=0;// 移动154个汉字后,重新开始
}
}
/**************装载一线点阵数据****************/
void loadoneline(void)
{
uchar s;
for(s=0;s<3;s++) //s为要显示的数字+1
{
BUFF[2*s]=HZ[word+32*s+2*disrow];
BUFF[2*s+1]=HZ[word+1+32*s+2*disrow];
}
}
/***************发送一线点阵数据*******************/
void sendoneline(void)
{
char s;uchar inc;
if(col<8)inc=0;else inc=1;
for(s=0+inc;s<=3+inc;s++) // s=2*要显示的数字-1//<15
{
SBUF=two_onebyte(BUFF[s],BUFF[s+1]);
while(!TI);TI=0;
}
}
/******************延时程序******************************/
void delay(uchar k)
{
uchar i;
for(i=0;i<k;i++);
}
/***********************汉字点阵码*************************/
uchar code HZ[]=
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询