本帖最后由 zzhgy 于 2017-7-2 00:33 編輯
這個程序是有問題的。。最后單片機沒有按要求(ad轉換輸出的值大于某值時數碼管顯示,蜂鳴器響)顯示,請問這個程序后面是哪里出現了問題,因為還是新手,還請大神們多多指導,謝謝了。。
#include<reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define addw 0x90
#define addr 0x91
sbit scl=P2^0;
sbit sda=P2^1;
sbit beep=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
uchar Ch3value;
unsigned char code table[]={0x39,0x3f,0x3e};
unsigned char code table2[]={0xf7,0xef,0xdf};
void delay(unsigned int i)
{
unsigned int m,n;
for(m=i;m>0;m--)
for(n=50;n>0;n--);
}
void beeplignt()
{
unsigned int i;
while(1)
{
for(i=0;i<100;i++)
{
delay(10);
beep=0;
}
beep=1;
delay(15);
}
}
void delayus()
{
_nop_();
_nop_();
}
void Start(void)
{
sda=1;
delayus();
scl=1;
delayus();
sda=0;
delayus();
scl=0;
}
void Stop(void)
{
sda=0;
delayus();
scl=1;
delayus();
sda=1;
delayus();
scl=0;
}
void Noack(void)
{
sda=1;
delayus();
scl=1;
delayus();
scl=0;
delayus();
}
void Ack(void)
{
sda=0;
delayus();
scl=1;
delayus();
scl=0;
delayus();
}
void init()
{
scl=1;
sda=1;
}
void Send(unsigned char Data)
{
unsigned char BitCounter=8;
unsigned char temps;
do
{
temps=Data;
scl=0;
delayus();
if((temps&0x80)==0x80)
sda=1;
else
sda=0;
scl=1;
temps=Data<<1;
Data=temps;
BitCounter--;
}
while(BitCounter);
scl=0;
delayus();
sda=1;
delayus();
}
unsigned char Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
sda=1;
do
{
scl=0;
delayus();
scl=1;
delayus();
if(sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
unsigned char Readadc(unsigned char Ch3)
{
unsigned char Data;
Start();
Send(addw);
Ack();
Send(0x40|Ch3);
Ack();
Start();
Send(addr);
Ack();
Data=Read();
scl=0;
Noack();
Stop();
return Data;
}
void myprint()
{
unsigned char num;
while(1)
{
for(num=0;num<3;num++)
{
P0=table[num];
dula=1;
dula=0;
P0=table2[num];
wela=1;
wela=0;
delay(5);
}
}
}
void Init_Time(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
ET1=1;
EA=1;
TR1=1;
while(1);
}
void main(void)
{
init();
Ch3value=Readadc(3);
Init_Time();
}
void T1_int(void) interrupt 3
{
if(Ch3value>0x77)
{
myprint();
beeplignt();
}
}
|