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模拟图:
程序可以直接复制粘贴运行,然后仿真,对你有用的话点个赞吧,忙了一天了!