学文历史的,最近迷上了弄单片机,自己学了一段时间尝试写了个倒计时器(已经尽力了),在proteus上运行的很好。特地找了朋友焊上了但是一开电数码管没有显示,打开那个P3^1/TXD那个端口就亮了,但是很亮,数字也变成相同的了。已经查了很多次资料,单片机也废了好几个了,真心求教,真的对单片机感兴趣。
单片机代码:
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit one_place=P2^1;
sbit ten_place=P2^0;
sbit features1=P1^0;//star开始
sbit features2=P1^1;//stop停止
sbit features3=P1^2;//reset复位
sbit beep=P3^0;
sbit aa=P3^1;//蜂鸣器停止
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar num,num1=11,num2,ten,one;
void timer_init(void)
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=0;
}
void delay(uint n)
{while(n--);
}
void check()
{
if(aa==0){beep=1;}
if(features1==0){TR0=1;}
if(features2==0){TR0=0;}
if(features3==0){TR0=0;TH0=(65536-50000)/256;
TL0=(65536-50000)%256;num1=11;}
}
void display()
{
P2=0xff;
P0=0xff;
}
void main(void)
{
beep=1;
timer_init();
display();
if(features1==1){TR0=0;}
while(1)
{
check();
one_place=1;
P0=table[one];
delay(100);
one_place=0;
delay(100);
ten_place=1;
P0=table[ten];
delay(100);
ten_place=0;
delay(100);
}
}
void Timer0()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
num1--;
if(num1==0)
{TR0=0;
beep=0;}
ten=num1/10;
one=num1%10;
}
}
|