ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于51单片机的16x16点阵滚动广告牌 proteus仿真 左右滚动 按键暂停

2021-02-18 14:03:41  阅读:272  来源: 互联网

标签:aa 滚动 0x18 0x00 51 0x02 16x16 delay net


硬件设计

(末尾附文件)

该方案支持左右滚动,两个按键,其中之一支持暂停/启动,另外一个支持换方向。

原理图:
在这里插入图片描述
仿真图:
在这里插入图片描述

程序设计

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define data1 P0
#define data2 P2
sbit s1=P3^6;
sbit s2=P3^7;
bit fangxiang;
uint alt=0,net=0,sl=128;
bit mode;
uchar code tab[]={
//
0x20,0x08,0x24,0x10,0x22,0x60,0x21,0x80,0x26,0x41,0x39,0x32,0x02,0x04,0x0C,0x18,
0xF0,0x60,0x13,0x80,0x10,0x60,0x10,0x18,0x14,0x04,0x18,0x02,0x00,0x01,0x00,0x00,/*"欢",2*/

0x02,0x00,0x02,0x02,0x42,0x04,0x33,0xF8,0x00,0x04,0x00,0x02,0x3F,0xF2,0x20,0x22,
0x40,0x42,0x00,0x02,0x3F,0xFE,0x20,0x42,0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00,/*"迎",3*/

0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,0x02,0x08,0x04,0x30,0x18,0xC0,
0xF0,0x02,0x10,0x01,0x13,0xFE,0x10,0x00,0x10,0x80,0x14,0x60,0x18,0x18,0x00,0x00,/*"你",4*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",5*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/

};

void delay(uint z)	   //延时子函数
{
   uchar x;
   for(;z>0;z--)
   for(x=110;x>0;x--);
}

void xianshi()			//显示
{ 
	uchar aa,i;
	for(i=0;i<16;i++)
	{
		P1=i; //列扫描
		data1=tab[net+aa]; //取出上8行数据输出
		aa++;
		data2=tab[net+aa]; //取出下8行数据输出
		aa++;
		delay(5);	//延时
		data1=0;  //清屏
		data2=0;  //清屏
		P1=0x00;  //消除余辉
		if(aa>30) aa=0;  //字模地址
	}	
	
}

void main()	 //主函数
{
   ET1=1;	 //使能定时器0
   EA=1;	 //开启总中断
   TR1=1;	//开始计数
   while(1)	 //无限循环
   {
	   xianshi();  //显示
	   if(s1==0)   //检测按键
	   {
	      delay(30);  //延时消抖
		  TR1=~TR1;	  //按下暂停  ,暂按继续
		  while(!s1)xianshi();
		  delay(30);
	   }
	   if(s2==0)	//检测按键
	   {
	       delay(30);			//延时消抖
		   fangxiang=~fangxiang;  //方向取反
		   while(!s2)xianshi();
		   delay(30);
	   }
	 }
}
 
void timer1() interrupt 3
{

   alt++;
   if(alt==10)		   //到一定的时间加以实现左移
   {
     alt=0;
	 if(fangxiang==0)	 //如果是正向 正向移动
	 {
		 net=net+2;
	     if(net>sl)  //字移动数量
	     net=0;

.

文件仅供参考:
链接:https://pan.baidu.com/s/1oWzSEVmQzs9xctBMqX0f9Q
提取码:xm55

.

标签:aa,滚动,0x18,0x00,51,0x02,16x16,delay,net
来源: https://blog.csdn.net/ajing666/article/details/113845579

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有