ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-04-24 23:41:55  阅读:986  来源: 互联网

标签:仿真 00 单片机 void keil 数码管 uint


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

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

标签:仿真,00,单片机,void,keil,数码管,uint
来源: https://blog.csdn.net/qq_44139826/article/details/105714189

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有