请教各位达人..16*64点阵滚屏程序怎样写? - 新手园地 - 21IC电子工程师社区
来源:百度文库 编辑:神马文学网 时间:2024/04/28 18:42:09
采用74HC595和74HC138的结构,电流驱动为TIP127. 8个io口控制..
只会写一个简单的静态显示.. 不懂写左右滚屏的程序..
请各位达人指点指点..
本人真是菜到掉渣了..
静态程序如下:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
void Keyscan (void); //修改参数按键扫描子程序
void Sendping(); //发送半屏子程序
sbit CLK =P1^5 ; //74HC595移时钟
sbit STB =P1^4 ; // 74HC595锁存信号
sbit Red=P1^6 ; //红色数据输出引脚低电平有效
sbit Greed=P1^7; //全屏控制使能0,低电平有效
sbit OE = P0^7; //全屏使能
uchar SendData; //要发送的数据变量
uchar shuzu1; //数组一维变量
uchar shuzu2; //数组二维变量
uchar hang; //行扫描变量 (半屏只有16行,所以hang=0到15)
void delay()
{
uint i;
for(i=0;i<30;i++);
}
uchar code data1[8][32]=
{
{0x00,0x00,0x7F,0xFC,0x48,0x00,0x48,0x00,0x4F,0xF8,0x50,0x80,0x60,0x88,0x5F,0xFC
,0x41,0x40,0x41,0x20,0x42,0x10,0x44,0x18,0x48,0x10,0x40,0x00,0x7F,0xFE,0x00,0x00},
{0x00,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00},
{0x06,0x08,0x78,0x88,0x08,0x48,0x08,0x48,0xFE,0x08,0x18,0x88,0x1C,0x48,0x2A,0x48,
0x28,0x0E,0x48,0x78,0x8B,0x88,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},
{0x20,0x40,0x20,0x40,0x20,0x40,0x23,0xF8,0xFC,0x48,0x20,0x48,0x22,0x48,0x22,0x4C,
0x24,0x8A,0x24,0x8A,0x20,0x88,0x21,0x08,0x21,0x08,0x22,0x28,0x24,0x10,0x00,0x00},
};
//------------------------------------
//----------字发送子程序-----------
void SendByte(void)
{
uchar m;
for(m=0;m<8;m++)
{
CLK = 0;
Red = (SendData & 0x80); //红屏显示
Greed = (SendData & 0x80); //红屏显示
SendData =SendData<<1;
CLK = 1; //移位时钟上升沿
}
}
//-----------------------------------
//----------行扫描子程序-------------
void RowsCan(void)
{
if (hang>=16)
{
hang =0x00;
}
P1 = P1 & 0xf0;
P1 = P1 | hang;
hang++;
}
void SendHang(void)
{
uchar m2,shuzu;
shuzu = shuzu1; //一维数组变量参数传给数组变量
OE=1;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
STB = 0;
STB = 1; //上升沿数据锁存
RowsCan(); //行扫描
OE = 0;
delay();
}
//---------------------------------------
//----------发送一屏数据-----------------
void Sendping(void)
{
SendHang();
shuzu2++ ;
shuzu2++ ;
if(shuzu2 ==32) { shuzu2 =0;}
}
void initial(void)
{
OE = 1;
Red = 1;
Greed = 1;
SendData = 0x00;
hang = 0x00;
}
//;---------主程序循环--------------
void main()
{
initial();
while(1)
{
Sendping();
}
}
只会写一个简单的静态显示.. 不懂写左右滚屏的程序..
请各位达人指点指点..
本人真是菜到掉渣了..
静态程序如下:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
void Keyscan (void); //修改参数按键扫描子程序
void Sendping(); //发送半屏子程序
sbit CLK =P1^5 ; //74HC595移时钟
sbit STB =P1^4 ; // 74HC595锁存信号
sbit Red=P1^6 ; //红色数据输出引脚低电平有效
sbit Greed=P1^7; //全屏控制使能0,低电平有效
sbit OE = P0^7; //全屏使能
uchar SendData; //要发送的数据变量
uchar shuzu1; //数组一维变量
uchar shuzu2; //数组二维变量
uchar hang; //行扫描变量 (半屏只有16行,所以hang=0到15)
void delay()
{
uint i;
for(i=0;i<30;i++);
}
uchar code data1[8][32]=
{
{0x00,0x00,0x7F,0xFC,0x48,0x00,0x48,0x00,0x4F,0xF8,0x50,0x80,0x60,0x88,0x5F,0xFC
,0x41,0x40,0x41,0x20,0x42,0x10,0x44,0x18,0x48,0x10,0x40,0x00,0x7F,0xFE,0x00,0x00},
{0x00,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00},
{0x06,0x08,0x78,0x88,0x08,0x48,0x08,0x48,0xFE,0x08,0x18,0x88,0x1C,0x48,0x2A,0x48,
0x28,0x0E,0x48,0x78,0x8B,0x88,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},
{0x20,0x40,0x20,0x40,0x20,0x40,0x23,0xF8,0xFC,0x48,0x20,0x48,0x22,0x48,0x22,0x4C,
0x24,0x8A,0x24,0x8A,0x20,0x88,0x21,0x08,0x21,0x08,0x22,0x28,0x24,0x10,0x00,0x00},
};
//------------------------------------
//----------字发送子程序-----------
void SendByte(void)
{
uchar m;
for(m=0;m<8;m++)
{
CLK = 0;
Red = (SendData & 0x80); //红屏显示
Greed = (SendData & 0x80); //红屏显示
SendData =SendData<<1;
CLK = 1; //移位时钟上升沿
}
}
//-----------------------------------
//----------行扫描子程序-------------
void RowsCan(void)
{
if (hang>=16)
{
hang =0x00;
}
P1 = P1 & 0xf0;
P1 = P1 | hang;
hang++;
}
void SendHang(void)
{
uchar m2,shuzu;
shuzu = shuzu1; //一维数组变量参数传给数组变量
OE=1;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
STB = 0;
STB = 1; //上升沿数据锁存
RowsCan(); //行扫描
OE = 0;
delay();
}
//---------------------------------------
//----------发送一屏数据-----------------
void Sendping(void)
{
SendHang();
shuzu2++ ;
shuzu2++ ;
if(shuzu2 ==32) { shuzu2 =0;}
}
void initial(void)
{
OE = 1;
Red = 1;
Greed = 1;
SendData = 0x00;
hang = 0x00;
}
//;---------主程序循环--------------
void main()
{
initial();
while(1)
{
Sendping();
}
}
请教各位达人..16*64点阵滚屏程序怎样写? - 新手园地 - 21IC电子工程师社区
干电池使用寿命的计算方法 - 新手园地 - 21IC电子工程师社区
21IC 电子工程师俱乐部 :怎样将16*16的汉字点阵请教一下16*64点阵屏的程序问题 - 『 单片机论坛 』 - Tony嵌入式论坛 Ton...
为情所困,请教各位达人!
说给新入职场电子工程师的话 - 21IC中国电子网
初学者五大告诫 - 21IC 电子工程师俱乐部
16*64点阵程序及滚动效果视频 - 硬件/嵌入开发
爱虫:请教各位还在用我Mcafee咖啡策略TF,策略该怎么写呢 KDS宽带山 PChome社区
请教各位大侠
【导航】散户新手学习园地,第1页 - 搜狐社区
请教各位大侠什么方法能瘦脸【7月19日已解答03】-美容化妆 - 淘社区 - 消费者门户 ...
[转载][交流]怎样在点阵屏上绘图——基于LCD12864(二)
[转载][交流]怎样在点阵屏上绘图——基于LCD12864(二)
【导航】散户新手学习园地
[转载][交流]怎样在点阵屏上绘图——基于LCD12864(二) -蓝色地平线-搜狐博客
[转载][交流]怎样在点阵屏上绘图——基于LCD12864(二) -蓝色地平线-搜狐博客
89c51仿真时出现问题,请教各位大侠!
请教各位大师,股票中的换手率在多少比较好。
向各位大哥大姐请教蒸馒头技术
请教怎样隐藏文件夹!_
- 新手学堂 - 洛阳钓鱼人 - 洛阳钓鱼论坛-洛阳垂钓园地-...
记叙文写作:怎样写人
帮朋友弄个点阵的程序(半成品,附上gif图).呵,-甲壳 - 新浪BLOG