标题:
这个是单片机点阵控制路灯,怎么用按键控制点阵数字增减
[打印本页]
作者:
xubaogui
时间:
2021-4-22 21:48
标题:
这个是单片机点阵控制路灯,怎么用按键控制点阵数字增减
#include<reg52.h>
sbit T_STR = P2^6; //锁存引脚,屏上标识位STR
sbit R1 = P2^4; //数据引脚,屏上标识R1
sbit G1 = P0^4; //数据引脚,屏上标识G1
sbit T_CLK = P2^5; //时钟引脚,屏上标识位CLK
sbit OE = P2^1; //使能引脚,屏上标识EN/OE
unsigned int k;
unsigned char HzNum;
unsigned char tab[8];
unsigned char DIS[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//行数据
/*-----------------------------------------------
16x16汉字取模数据
------------------------------------------------*/
unsigned char code hztest1[][32]= //二维数组,目的是减少运算,可以用最基本的一维数组,每个汉字有32个字节数据
{
/*hong ren*/
0x00,0x00,0xC0,0x01,0xC0,0x00,0xC0,0x01,0xF0,0x03,0xF8,0x07,0xD8,0x07,0xD0,0x05,
0xE0,0x05,0xC0,0x05,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*10*/
0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x1F,0x98,0x10,0x90,0x10,0x90,0x10,0x90,0x10,
0x90,0x10,0x90,0x10,0x90,0x10,0x90,0x10,0xB8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- hongren2 宽度x高度=16x16 --*/
0x00,0x00,0xC0,0x01,0x80,0x01,0xC0,0x01,0xF0,0x07,0xF8,0x0F,0xD8,0x0D,0xD8,0x0D,
0xF0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*9*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,
0xE0,0x07,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*hong ren*/
0x00,0x00,0xC0,0x01,0xC0,0x00,0xC0,0x01,0xF0,0x03,0xF8,0x07,0xD8,0x07,0xD0,0x05,
0xE0,0x05,0xC0,0x05,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*8*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x20,0x04,0x20,0x04,0x20,0x04,0xE0,0x07,
0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- hongren2 宽度x高度=16x16 --*/
0x00,0x00,0xC0,0x01,0x80,0x01,0xC0,0x01,0xF0,0x07,0xF8,0x0F,0xD8,0x0D,0xD8,0x0D,
0xF0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*7*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
/*hong ren*/
0x00,0x00,0xC0,0x01,0xC0,0x00,0xC0,0x01,0xF0,0x03,0xF8,0x07,0xD8,0x07,0xD0,0x05,
0xE0,0x05,0xC0,0x05,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*6*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x20,0x00,0x20,0x00,0x20,0x00,0xE0,0x07,
0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- hongren2 宽度x高度=16x16 --*/
0x00,0x00,0xC0,0x01,0x80,0x01,0xC0,0x01,0xF0,0x07,0xF8,0x0F,0xD8,0x0D,0xD8,0x0D,
0xF0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*5*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x20,0x00,0x20,0x00,0x20,0x00,0xE0,0x07,
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*hong ren*/
0x00,0x00,0xC0,0x01,0xC0,0x00,0xC0,0x01,0xF0,0x03,0xF8,0x07,0xD8,0x07,0xD0,0x05,
0xE0,0x05,0xC0,0x05,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*4*/
0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0xE0,0x07,
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- hongren2 宽度x高度=16x16 --*/
0x00,0x00,0xC0,0x01,0x80,0x01,0xC0,0x01,0xF0,0x07,0xF8,0x0F,0xD8,0x0D,0xD8,0x0D,
0xF0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*3*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*hong ren*/
0x00,0x00,0xC0,0x01,0xC0,0x00,0xC0,0x01,0xF0,0x03,0xF8,0x07,0xD8,0x07,0xD0,0x05,
0xE0,0x05,0xC0,0x05,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*2*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,
0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- hongren2 宽度x高度=16x16 --*/
0x00,0x00,0xC0,0x01,0x80,0x01,0xC0,0x01,0xF0,0x07,0xF8,0x0F,0xD8,0x0D,0xD8,0x0D,
0xF0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x40,0x01,0x40,0x01,0x60,0x03,
/*1*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
};
unsigned char code hztest2[][32]= //二维数组,目的是减少运算,可以用最基本的一维数组,每个汉字有32个字节数据
{
/*10*/
0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x1F,0x98,0x10,0x90,0x10,0x90,0x10,0x90,0x10,
0x90,0x10,0x90,0x10,0x90,0x10,0x90,0x10,0xB8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren 宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x01,0xF0,0x01,0xF0,0x03,0xF0,0x03,
0xE0,0x07,0xC0,0x0D,0xE0,0x01,0xF0,0x01,0x98,0x01,0x88,0x01,0x80,0x03,0x00,0x00,
/*9*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,
0xE0,0x07,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren2宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x09,0xF0,0x0F,0xF8,0x07,0xC8,0x01,
0xC8,0x01,0xC0,0x03,0xE0,0x07,0x70,0x16,0x38,0x1C,0x18,0x18,0x08,0x00,0x00,0x00,
/*8*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x20,0x04,0x20,0x04,0x20,0x04,0xE0,0x07,
0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren 宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x01,0xF0,0x01,0xF0,0x03,0xF0,0x03,
0xE0,0x07,0xC0,0x0D,0xE0,0x01,0xF0,0x01,0x98,0x01,0x88,0x01,0x80,0x03,0x00,0x00,
/*7*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren2宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x09,0xF0,0x0F,0xF8,0x07,0xC8,0x01,
0xC8,0x01,0xC0,0x03,0xE0,0x07,0x70,0x16,0x38,0x1C,0x18,0x18,0x08,0x00,0x00,0x00,
/*6*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x20,0x00,0x20,0x00,0x20,0x00,0xE0,0x07,
0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren 宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x01,0xF0,0x01,0xF0,0x03,0xF0,0x03,
0xE0,0x07,0xC0,0x0D,0xE0,0x01,0xF0,0x01,0x98,0x01,0x88,0x01,0x80,0x03,0x00,0x00,
/*5*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x20,0x00,0x20,0x00,0x20,0x00,0xE0,0x07,
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren2宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x09,0xF0,0x0F,0xF8,0x07,0xC8,0x01,
0xC8,0x01,0xC0,0x03,0xE0,0x07,0x70,0x16,0x38,0x1C,0x18,0x18,0x08,0x00,0x00,0x00,
/*4*/
0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0xE0,0x07,
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren 宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x01,0xF0,0x01,0xF0,0x03,0xF0,0x03,
0xE0,0x07,0xC0,0x0D,0xE0,0x01,0xF0,0x01,0x98,0x01,0x88,0x01,0x80,0x03,0x00,0x00,
/*3*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren2宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x09,0xF0,0x0F,0xF8,0x07,0xC8,0x01,
0xC8,0x01,0xC0,0x03,0xE0,0x07,0x70,0x16,0x38,0x1C,0x18,0x18,0x08,0x00,0x00,0x00,
/*2*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x04,0x00,0x04,0x00,0x04,0xE0,0x07,
0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren 宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x01,0xF0,0x01,0xF0,0x03,0xF0,0x03,
0xE0,0x07,0xC0,0x0D,0xE0,0x01,0xF0,0x01,0x98,0x01,0x88,0x01,0x80,0x03,0x00,0x00,
/*1*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- lvren2宽度x高度=16x16 --*/
0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xE0,0x09,0xF0,0x0F,0xF8,0x07,0xC8,0x01,
0xC8,0x01,0xC0,0x03,0xE0,0x07,0x70,0x16,0x38,0x1C,0x18,0x18,0x08,0x00,0x00,0x00,
};
/*-----------------------------------------------
/*-----------------------------------------------
初始化定时器,做为动态扫描
------------------------------------------------*/
void Init_Timer1(void)
{
TMOD |= 0x10;
EA=1; //总中断使能
ET1=1; //定时中断使能
TR1=1; //打开定时器开关
}
/*-----------------------------------------------
主程序
------------------------------------------------*/
main()
{ unsigned int i;
unsigned char a=0;
Init_Timer1(); //初始化定时器
while(1)
{
k=0;//可以加入其它的控制程序
HzNum = a;
for(i=0;i<200;i++);//循环延时时间,可以自行调节参数
a++;
k++;
if(a == 20)
a = 0;
if(k == 20)
k = 0;
}
}
/*-----------------------------------------------
定时器执行动态扫描
------------------------------------------------*/
void Timer1_isr(void) interrupt 3
{
static unsigned char count,j;
unsigned char i;
TH1=0xff; //重装初值
TL1=0;
T_STR=0; //锁存释放
if(k<=9)
{for(j=0;j<2;j++) //取每个汉字的前2个字节,数据传输完成后锁存输出即可 j表示汉字个数,如果是3个汉字屏就可以修改成3
{
{InputByteR(hztest1[j+2*HzNum][i]);
InputByteR(hztest1[j+2*HzNum][i+1]);}
}}
if(k>9)
{for(j=0;j<2;j++) //取每个汉字的前2个字节,数据传输完成后锁存输出即可 j表示汉字个数,如果是3个汉字屏就可以修改成3
{
{InputByteG(hztest2[j+2*HzNum][i]);
InputByteG(hztest2[j+2*HzNum][i+1]);}
}}
OE=1; //暂时关闭屏幕,防止出现鬼影,如果没有使用该引脚控制则会出现拖影现象。
T_STR=1; //锁存有效,此时一行的数据显示到屏上
P0=DIS[count]|0xf0;//用P0口的前4位控制16行,屏内部通过4-16译码器工作,循环扫描其他15行
OE=0;//使能
count++;
i+=2; //累加调用下一行数据
if(count==16)
count=0;
if(i==32)
i=0;
}
复制代码
作者:
xubaogui
时间:
2021-4-22 21:49
有人告诉哪,增加按键要怎么加
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1