📄 led.c
字号:
//***********************************
// 进屏方式
//***********************************
void v1_int(uchar disp_mod1)
{
uchar idata disp_mod2; //显示方式
if(!b_fnew) //有新信息 就推出显示
{
if(!b_clean)
{
disp_mod2=disp_mod1&0xf0; //高位为进屏幕显示方式
}
else
{
disp_mod2=disp_mod1&0x0f; //高位为进屏幕显示方式
disp_mod2<<=4;
}
switch(disp_mod2)
{ //无方式
case 0x00:
{
}
break;
//1 从上往下显示
case 0x10:
{
v2o_up_do();
}
break;
//2 从下往上显示
case 0x20:
{
v2o_do_up();
}
break;
//3 从左向右显示
case 0x30:
{
v2o_le_ri();
}
break;
//4 从右向左显示
case 0x40:
{
v2o_ri_le();
}
break;
//5 上下开门
case 0x50:
{
v2o_updo_open();
}
break;
//6 上下关门
case 0x60:
{
v2o_updo_close();
}
break;
//7 向右百叶
case 0x70:
{
v2o_right_leaf();
}
break;
//8 向下百叶
case 0x80:
{
v2o_down_leaf();
}
break;
//9 左右开门显示
case 0x90:
{
v2o_leri_open();
}
break;
//10 左右关门显示
case 0xa0:
{
v2o_leri_close();
}
break;
//11 向左百叶
case 0xb0:
{
v2o_left_leaf();
}
break;
default:
{
}
break;
}
}
//清楚消屏标志
b_clean=0;
}
//**********************************
// 左移子程序
//**********************************
void v2_left_mov(dad_long2)
{
uchar idata j,daa;
uchar idata i,h,dad_1;
dad_1=dad_long2+da_loog;
for(i=0;i<da_high;i++)
{
v3_getmdp(i);
daw_6264e+=i*dad_1;
for(j=0;j<dad_1;j++)
{
daa=*daw_6264e--&0x80; //取出当前位的第8位
if(daa)
daa=0x01;
else
daa=0x00;
*daw_6264e++|=daa; //前一位的第1位或上当前位的第8位
*daw_6264e++<<=1; //当前位左移
}
disp();
}
}
//***********************************
// 游动显示
//***********************************
void v1_you1(uchar dad_yseep1,uchar dad_ylong1)
{
uchar idata j,h,g,q,i1;
uint idata i;
uchar idata dad_val9,dad_vala,p; //临时数据
for(i=0;i<dad_ylong1*8;i++) //要移动的位数
{
v2_left_mov(dad_ylong1); //整屏左移1位
//取出显示内容
for(j=0;j<da_high;j++) //取出1屏信息
{
v3_getmdp(j); //由当前的行数 确定用到的6264 和f,e的起始地址
daw_6264e+=j*(dad_ylong1+da_loog); //取出每行的首地址
daw_6264f+=j*da_loog;
for(h=0;h<da_loog;h++)
{
*daw_6264f++=*daw_6264e++; //取出1行信息
}
}
//游动速度
for(g=0;g<1;g++)
{
disp();
}
}
}
/*
for(i=0;i<dad_ylong1;i++) //游动的长度
{
//-----------------------------
for(i1=0;i1<8;i1++)
{
//for(i=0;i<16;i++)//dad_ylong1;i++) //游动的长度
//{
for(j=0;j<da_high;j++) //p屏的高度 (左移一屏,移8个位)
{
v3_getmdp(j); //由当前的行数 确定用到的6264 和f,e的起始地址
daw_6264e+=j*dad_ylong1+i; //确定屏每1行 游动的起始
daw_6264f+=j*da_loog+i%da_high; //确定显示每1行的起始地址
// for(h=0;h<da_loog;h++) //屏的长度 (左移一行,移8个位)
// {
dad_val9=*daw_6264e; //取出一个字节 为左移作准备
//--------------------------取出前1个字节的数据
dad_vala=*daw_6264f;
//
dad_val9<<=i1; //移动下1位 开始=0;也就是不移动
dad_vala<<=1;
// for(g=0;g<8;g++) //1个字节8位数据左移 (左移一个字节)
// {
//左移子程序
p=dad_val9&0x80; //取出要移动数据的地8位
if(p)
{
dad_vala|=0x01; // 如果地8位为高 则地1位也为高
}
else
{
dad_vala&=0xfe; // 如果地8位为底 则地1位也为底
}
*daw_6264f=dad_vala; //移动1位就取1回数据去显示
//游动速度
for(q=0;q<dad_yseep1;q++)
{
disp();
}
// dad_val9<<=1; //移动下1位
// dad_vala<<=1;
// }
// *daw_6264e++; //指针指向 移动的下一个字节
// *daw_6264f++; //指针指向 移动的下一个字节
// }
}
//---
}
}
//--
// }
} */
//***********************************
// 游动显示 8位1移
//***********************************
void v1_you(uchar dad_yseep1,uchar dad_ylong1)
{
uchar idata i,j,h,p,g;
for(i=0;i<=dad_ylong1;i++)
{
if(b_fnew) //有新信息就退出
{
break;
}
//取出显示内容
for(j=0;j<da_high;j++) //取出1屏信息
{
v3_getmdp(j); //由当前的行数 确定用到的6264 和f,e的起始地址
daw_6264e+=j*(dad_ylong1+da_loog)+i; //取出每行的首地址
daw_6264f+=j*da_loog;
for(h=0;h<da_loog;h++)
{
*daw_6264f++=*daw_6264e++; //取出1行信息
}
}
//游动速度
for(g=0;g<dad_yseep1;g++)
{
if(b_fnew) //有新信息就退出
{
break;
}
disp();
}
}
}
//***********************************
// 主程序
//***********************************
void main()
{
uchar idata i,j,h,dad_yseepd;
uchar idata dad_ylong; //游动的速度和长度
static uchar n_all; // 总的信息条数
static uchar n_count; // 信息条数计数器
static uchar disp_mod; // 显示格式
uchar xdata *pntt=&dram;
uchar xdata *pnt2=&d_rom0; // 200H 是总的信息条数据
wtdog(); // 喂狗
int_stant(); // 程序初始化
int_discontinuity(); // 中断初始化
int_address(); // 读屏号
v1_send(); // 整理正确的应答
while(1)
{
pnt2-=1;
n_all=*pnt2++; //取出总的信息条数
if(n_all!=*pnt2) //两个存放信息总条数单元 内容不同的话就认为信息
{ //有信息也是错的
n_all=0xff;
}
//-----测试
// b_fnew=1;
// n_all=3;
//-----
//没有信息的显示
if(n_all==0xff)
{
//-------------------屏初始 为128 * 64 的刷屏
da_high=0x10; //屏高 64点
da_loog=0x10; //屏长128点
da_scan=0x10; //扫描 16扫
disp_mod=0; //从0方式开始显示
for(disp_mod=0;disp_mod<=0xbb;disp_mod+=0x11) //00--0xbb 12种扫描方式
{
//显示方式梯增
b_clean=0; //=0刷屏 标志
v1_int(disp_mod); //进屏显示
for(i=0;i<50;i++)
{
//[判断有无新信息
if(b_fnew) //有新信息
{
disp_mod=0xcc;
break; //有新信息 推出刷屏
}
disp(); //停留时间
}
b_clean=1; //=1清屏信息 标志
v1_int(disp_mod); //进屏显示
}
b_fnew=0; // 清出 新信息标志位
}
//有信息 的 显示信息
else
{
n_count=0; //从第1幅内容开始显示
daw_ascc_count=&d_receive; //指针指向数据体起始地址
for(n_count=0;n_count<n_all;n_count++)
{
v1_read(&dad_ylong,&dad_yseepd); //将1条信息读入6264的E
//不是游动信息
if(!b_you)
{
disp_mod=dad_ylong; //取显示方式
seep=dad_yseepd; //取停留时间
b_clean=0; //=0刷屏 标志
v1_int(disp_mod); //进屏方式
for(i=0;i<=seep;i++) //停留时间
{
//[判断有无新信息
if(b_fnew) //有新信息
{
n_count=0xfe;
break; //有新信息 推出刷屏
}
disp();
}
b_clean=1; //=1清屏信息 标志
v1_int(disp_mod); //进屏显示
}
//是游动信息
else
{
v1_you(dad_yseepd,dad_ylong); //游动显示
}
}
b_fnew=0; // 清出 新信息标志位
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -