基于51单片机和7219的秒表 为什么proteus仿真时候一直闪?
进行仿真的时候是这样的

然后源程序如下
#include<reg51.h>
#define uchar unsigned char
#define DECODE 0X09
#define INTENSITY 0x0a
#define SCANLIMIT 0x0b
#define SHUTDOWN 0x0c
#define DISPLAY 0x0f
sbit start=P1^0;//启动按钮
sbit reset=P1^1;//复位按钮
sbit plus=P1^2;//加号按钮
sbit minus=P1^3;//减号按钮
sbit DIN=P3^0;
sbit LOAD=P3^1;
sbit CLK=P3^2;//MAX7219芯片
uchar i;uchar a;//定义变量
uchar add[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
uchar dat[]={0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x09};//
void display(uchar a);//显示子程序
void InitTimer0();//定时器初始化程序
void delay(uchar n);//延时
void max7219(uchar add,uchar dat);//max7219指令函数
void max7219_init();//7219初始化
void keyscan();//键盘扫描函数
/*************主程序****************/
void main()
{
max7219_init();
InitTimer0();
display(a);
while(1)
{
keyscan();
}
}
/*****定时器初始化函数******/
void InitTimer0()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=0xd8;
TL0=0xef;
TR0=0;
i=0;//时间计数
a=0;//中断计数
}
/***********定时器T0中断*****************/
void t0_func() interrupt 1
{
TH0=0xd8;
TL0=0xef;
if(i==100)
{
i=0;
a++;
if(a>99)
{
a=0;
}
}
else
{
i++;
}
display(a);
}
/**************max7219指令函数****************/
void max7219(uchar add,uchar dat)
{
uchar ADS,m,n;
LOAD=0;
m=0;
while(m<16)
{
if(m<8)
{
ADS=add;
}
else
{
ADS=dat;
}
for(n=8;n>=1;n--)
{
DIN=ADS&0x80;
ADS=ADS<<1;
CLK=1;
CLK=0;
}
m=m+8;
}
LOAD=1;
}
/***********7219初始化***********************/
void max7219_init()
{
max7219(DECODE,0xff);
max7219(INTENSITY,0xf5);
max7219(SCANLIMIT,0x01);
max7219(SHUTDOWN,0x01);
max7219(DISPLAY,0x00);
}
/************显示子程序****************/
void display(uchar a)
{
uchar ge,shi;
ge=a%10;
shi=a/10;
max7219(add[1],dat[ge]);
max7219(add[0],dat[shi]);
}
/***************延时*******************/
void delay(uchar n)
{
uchar b,c;
for(b=0;b<110;b++)
{for(c=0;c<n;c++);}
}
/************keyscan****************/
void keyscan()
{
if(start==0)
{
delay(10);
if(start==0)
{
TR0=!TR0;
while(!start);
}
}
if(reset==0)
{
delay(10);
if(reset==0)
{
a=0;
i=0;
TR0=0;
display(i);
while(!reset);
}
}
if(plus==0)
{
delay(10);
if(plus==0)
{
i=i++;
display(i);
while(!plus);
}
}
if(minus==0)
{
delay(10);
if(minus==0)
{
i=i--;
display(i);
while(!minus);
}
}
}
=========================
想知道到底哪里出错了啊拜托了各位!!!!!!!!!!!!!!!!!!!!!!!!!
谢谢谢谢谢谢
相关推荐
基于51单片机Max7219驱动8×8点阵PROTEUS实例(C语言版)
用C语言设计了基于51单片机的Max7219驱动8×8点阵的PROTEUS仿真实例。
51单片机控制的16个MAX7219级联LED点阵显示设计与Proteus仿真
51单片机,作为经典的微控制器之一,是学习和应用电子技术的基石。其核心是一个8位微处理器,具有处理速度快、指令集丰富、编程灵活等特点,适合用于控制小型电子系统。MAX7219是一款常用于LED显示系统的驱动芯片,具备以下显著特性:驱动8x8共64个LED或64个单独的LED。可级联多个MAX7219芯片,以减少主控制器的I/O端口需求。提供多路复用的扫描显示功能,减少引脚数量。内置数字和字母字符的ROM字模,方便显示固定信息。具有亮度调节功能。
PROTEUS 8*8 点阵 MAX7219 51单片机 仿真 实物
文章目录1 实物图2 模块原理图3 程序4 仿真图5 MAX7219介绍 1 实物图 2 模块原理图 3 程序 #include <reg52.h> #include <intrins.h> /* 定义Max7219端口 */ sbit Max7219_pinCLK = P2 ^ 2; /* CLK */ sbit Max7219_pinCS = P2 ^ 1; /* CS */
基于51单片机Max7219驱动8×8点阵PROTEUS实例
该实例在PROTEUS下仿真了89C51单片机通过MAX7219如何驱动8×8LED点阵。
16个MAX7219级联-Proteus仿真-电路方案
Proteus仿真原理图 16个MAX7219级联 C语言源代码


单片机/工控
