文章目录
前言一、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 P2sbit 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- Keil Elektronik GmbH and ARM Germany GmbHAll 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打开
按下第一个按键即可更改速度;第二个按键暂停/启动;第三个按键反向滚动
到这里就结束啦,本人水平有限,如有错误多多指教!!