學文歷史的,最近迷上了弄單片機,自己學了一段時間嘗試寫了個倒計時器(已經盡力了),在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;
}
}
|