用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模拟图:
在这里插入图片描述

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

  • 98
    点赞
  • 215
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值