51单片机16×16点阵led屏滚动显示+protues仿真+按键功能(史上最全)
文章目录
- 前言
- 一、protues仿真
- 安装软件
- 绘制原理图
- 二、keil程序编写
- 1.
- 三、仿真示例
前言
本次任务:基于protues仿真实现at89c51控制16×16点阵led屏实现流水文字滚动,按键实现暂停,反向,调速
需要用到的工具:keil5,protues8.9
提示:以下是本篇文章正文内容,下面案例可供参考
一、protues仿真
安装软件
protues是一款仿真软件,推荐使用最新版protues8.9具体下载地址:protues8.9安装
绘制原理图
由于官方所给库中只有8×8点阵,现有两个方案:1自行绘制一个16×16点阵教程
2,用四块8×8点阵拼接而成(由于技术有限选择方案二)
先点开元件库,在库里搜索我们需要的元件
接下来任选一个自己喜欢的颜色,同理选择at89c51芯片,74h138,按键,电阻电容等等。
左上部分为51最小系统固定格式,照抄就好
四块数码点阵图
完整示例
二、keil程序编写
1.
代码如下(示例):
#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;
sbit s3=P3^4;
bit fangxiang;
uint net=0,sl=128;
int i = 20;
int alt =0;
bit mode;
uchar code tab[]={//0x00,0x01,0x00,0x02,0x03,0xEC,0x02,0x20,0x02,0x20,0x02,0x28,0xFE,0x26,0x12,0x20,0x12,0x28,0x12,0x26,0x12,0x20,0x13,0xE0,0x10,0x08,0x10,0x07,0x00,0x00,0x00,0x00,/*"点",0*/
/* (16 X 16 , 宋体 ) */0x01,0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0xC3,0xFF,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x00,/*"个",1*/
/* (16 X 16 , 宋体 ) */0x00,0x81,0x00,0x81,0x08,0x82,0x88,0x82,0x68,0x84,0x08,0x88,0x08,0xB0,0x0F,0xC0,0x08,0xB0,0x08,0x88,0x28,0x84,0xC8,0x82,0x08,0x82,0x00,0x81,0x00,0x81,0x00,0x00,/*"关",2*/
/* (16 X 16 , 宋体 ) */0x08,0x20,0x06,0x20,0x40,0x7E,0x31,0x80,0x00,0x02,0x10,0x02,0x10,0x82,0x10,0x82,0x90,0x82,0x5F,0xFE,0x10,0x82,0x10,0x82,0x10,0x82,0x10,0x82,0x00,0x02,0x00,0x00,/*"注",3*/
/* (16 X 16 , 宋体 ) */0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x08,0x00,0x54,0x3F,0xC8,0x6A,0x52,0xAA,0x61,0x3F,0xFE,0x01,0x00,0x08,0xC2,0x08,0x01,0xFF,0xFE,0x08,0x00,0x08,0x00,0x00,0x00,/*"谢",4*/
/* (16 X 16 , 宋体 ) */0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x08,0x00,0x54,0x3F,0xC8,0x6A,0x52,0xAA,0x61,0x3F,0xFE,0x01,0x00,0x08,0xC2,0x08,0x01,0xFF,0xFE,0x08,0x00,0x08,0x00,0x00,0x00,/*"谢",5*/
/* (16 X 16 , 宋体 ) */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 Delay20ms() //@11.0592MHz
{unsigned char i, j;_nop_();_nop_();i = 216;j = 36;do{while (--j);} while (--i);
}void xianshi()
{ uchar aa,i;for(i=0;i<16;i++){P1=i; data1=tab[net+aa]; aa++;data2=tab[net+aa]; aa++;delay(5); data1=0; data2=0; P1=0x00; if(aa>30) aa=0; }
}void main()
{ET1=1; 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);}if(s3==0){Delay20ms();alt = 0;i=i-9;if(i<0){i=20;} Delay20ms();}
}}
void timer1() interrupt 3
{alt++;if(alt==i) {alt=0;if(fangxiang==0) {net=net+2;if(net>sl) net=0;}else {net=net-2;if(net<2)net=sl; }}}
上面是main函数,下面是头文件
/*--------------------------------------------------------------------------
INTRINS.HIntrinsic functions for C51.
Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH
All rights reserved.
--------------------------------------------------------------------------*/#ifndef __INTRINS_H__
#define __INTRINS_H__#pragma SAVE#if defined (__CX2__)
#pragma FUNCTIONS(STATIC)
/* intrinsic functions are reentrant, but need static attribute */
#endifextern void _nop_ (void);
extern bit _testbit_ (bit);
extern unsigned char _cror_ (unsigned char, unsigned char);
extern unsigned int _iror_ (unsigned int, unsigned char);
extern unsigned long _lror_ (unsigned long, unsigned char);
extern unsigned char _crol_ (unsigned char, unsigned char);
extern unsigned int _irol_ (unsigned int, unsigned char);
extern unsigned long _lrol_ (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
#if defined (__CX2__)
extern int abs (int);
extern void _illop_ (void);
#endif
#if !defined (__CX2__)
extern void _push_ (unsigned char _sfr);
extern void _pop_ (unsigned char _sfr);
#endif#pragma RESTORE#endif
将头文件导入即可
具体不做过多赘述;
如果需要修改文字内容,可以用取模软件
取模软件地址
需要注意,在放入程序后,需要将每行前后的中括号去掉
三、仿真示例
keil生成hex文件后,用protues打开
按下第一个按键即可更改速度;第二个按键暂停/启动;第三个按键反向滚动
到这里就结束啦,本人水平有限,如有错误多多指教!!
51单片机16×16点阵led屏滚动显示+protues仿真+按键功能(史上最全)相关推荐
- 51单片机实现c语言字母滚动,使用51单片机实现点阵汉字平滑滚动显示
使用51单片机实现点阵汉字平滑滚动显示 #说明:采用的芯片是89C51,LED点阵屏的规格是16*16,同时使用了两个74HC595芯片,字模生成软件在文末有网盘链接. 1 连接原理图 整体的电路连接 ...
- 51单片机IIC 12864 OLED屏幕滚动显示仿真
51单片机IIC 12864 OLED屏幕滚动显示仿真 程序代码接着前面文章<STC15W408AS单片机IIC驱动0.96寸OLED显示> 这里不再贴出代码了,前面有一篇有实物效果演示, ...
- 51单片机AD转换pcf8591+数码管显示+Proteus仿真二
51单片机AD转换pcf8591+数码管显示+Proteus仿真二
- 【51单片机】点阵LED的显示实验
点阵LED显示实验 前言 一.环境 二.硬件 1.了解Matrix-8×8就像你需要了解女朋友 2.正确地连接线路就像你需要以正确的方式让她开心. 三.软件 1.思路就是有一个给她惊喜的想法 2.头文 ...
- 基于51单片机实现旋转LED灯报警(Proteus仿真)
WeChat:[嵌入式工程师成长日记] https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484096&idx=2&a ...
- 51单片机入门:LED灯闪烁(原理图+仿真+程序)
目录 硬件电路设计 仿真电路设计 程序设计 仿真实现 在用51单片机点亮一个LED小灯的基础上,下面尝试将一个LED灯闪烁起来. 硬件电路设计 结合51单片机最小系统的知识,利用AD19画好最小系统电 ...
- C语言16x16点阵显示汉字程序,单片机+16x16点阵,汉字滚动显示程序(带仿真)
2013-6-26 04:31 上传 点击文件名下载附件 下面是源代码预览: #include #include #define DATAOUT P2 //P2 use as data, you ca ...
- 基于51单片机声音噪声分贝检测采集显示proteus仿真原理图PCB程序设计
硬件设计 (末尾附文件) 功能说明: 1.基于STC89C51/52(与AT89S51/52.AT89C51/52通用)单片机作为主控制器 2.采用LCD1602液晶显示屏实时显示分贝值: 3.使用小 ...
- 基于51单片机的时钟闹钟温度计LCD1602显示proteus仿真原理图PCB
功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示时间/当前温度 2.按键可进行闹钟设置和温度上下限设置 3.到达闹钟时间或温度超过阈值范围,蜂鸣器报警 4.到达闹钟 ...
最新文章
- python查题_python 数据库连表查询习题
- python最基本的两种循环结构_Python基础 — 分支和循环
- 如何将文件加添加成webapp
- android源代码
- ZOJ 3631 Watashi's BG
- Concepts in Games Development(游戏开发概述) 公开课笔记
- 有哪些朋友圈励志说说短句?
- leetcode 503. 下一个更大元素 II
- 计算机组成原理(第三版)唐朔飞-课后习题(完整版)
- 翻译: 顶级人工智能会议 CVPR NeurIPS AAAI 等
- 魔兽地图编辑器使用自定义图标的方法
- 书犹药也,善读之可以医愚
- 961 计算机学科专业基础综合,2018年北京航空航天大学961计算机学科专业基础综合考研复习资料...
- 最简单的全球基站定位接口API
- Python遗传算法求一元函数最大值
- 树莓派镜像备份/内核编译和更换/EC200U上网
- 煤矿用计算机,计算机技术在煤矿安全生产中应用
- SASE:基于数字身份标识的网络与安全访问云服务
- C语言程序设计笔记(浙大翁恺版) 第五周:循环控制
- MSSQL 服务器主体 无法在当前安全上下文下访问数据库,错误:916