用51单片机,keil编程,proteus仿真,实现2位数码管00-99自动计数

51单片机作业,自己网上查资料,看课本,弄了一个下午加一个晚上,这个专业真的太苦逼!
需要的小伙伴看看吧
要求:现有AT89S51单片机、2按键和2位数码管,电路形式不限制,利用Proteus设计一电路并完成仿真调试,实现如下功能:上电后数码管显示00,按K1键,数码管每秒自动加1顺序显示00~99,中途再次按K1键则暂停计数;按K2键则显示00并停止计数。
keil程序:

#include<reg52.h>
sbit led0 = P0^0;  
sbit led1 = P0^1;  
typedef unsigned int uint;
void display(uint i,uint j); 
void delay_xms(uint x);
uint i,j;
uint k=0;
uint s=1;
uint sum=0;
unsigned char code DSY_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管共阳极 
void delay_xms(uint x)//延时函数
{
 uint m,n;
 for(m=0;m<x;m++)
 {
  for(n=0;n<113;n++);
 }
}
void EX0_INT(void) interrupt 0 //中断函数
{
 k=!k;   
}
void EX1_INT(void) interrupt 2//中断函数
{
    s=!s;
}
void display(uint i,uint j) //显示函数
{
 i = sum/10;   
 j = sum%10; 
  led1=0;
 P2=DSY_CODE[i];
 led0=1;
 delay_xms(500);
 
 led0=0;
 P2=DSY_CODE[j];
 led1=1;
 delay_xms(500);
 
 sum++;
 if(sum==100)
  sum=0;
}
void main()
{
 IE = 0X85;
 IT0 = 1;
 IT1 = 1;
 i = sum/10;   
 P2=DSY_CODE[i];
 while(1)
 {
  while(s==0)
  {
   sum=0;
   i = sum/10; 
   led0=1;
   led1=1;
     P2=DSY_CODE[i];
  }
  while(k==1&s==1)
  display(i,j);
 } 
}

proteus模拟图:
在这里插入图片描述

程序可以直接复制粘贴运行,然后仿真,对你有用的话点个赞吧,忙了一天了!

发布了6 篇原创文章 · 获赞 2 · 访问量 145

猜你喜欢

转载自blog.csdn.net/qq_44139826/article/details/105714189