Re: [問題] 我的8051開機會閃一閃...
: 看到這問題,我只想請問你。
: 你程式寫了嗎?
: 如果寫了你閃led燈是HI動作還是LOW動作呢?
: 你有量過開機時LED腳位那邊電壓狀態嗎?
: 你只給接好圖。沒有線路圖,如何請更強的高手幫助呢?
: MAX232插拔有時會傳送訊號,所以真不知道你原本LED燈是什麼情況下該閃。
: 而且做電燈電視開關不是會用繼電器做?否則110V交流電。如何用5V的MCU控制?
: 親身碰到有時看動作狀態有時也不一定知道是什麼問題。
: 大多只能提供方向。
#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char
sbit wled = P3^2;
sbit rel01 = P1^0;
sbit rel02 = P1^1;
sbit rel03 = P1^2;
sbit rel04 = P1^3;
sbit rel05 = P1^4;
sbit rel06 = P1^5;
sbit rel07 = P1^6;
sbit rel08 = P1^7;
sbit rel09 = P0^0;
sbit rel10 = P0^1;
sbit rel11 = P0^2;
sbit rel12 = P0^3;
sbit rel13 = P0^4;
sbit rel14 = P0^5;
sbit rel15 = P0^6;
sbit rel16 = P0^7;
sbit rel17 = P2^7;
sbit rel18 = P2^6;
sbit rel19 = P2^5;
sbit rel20 = P2^4;
sbit rel21 = P2^3;
sbit rel22 = P2^2;
sbit rel23 = P2^1;
sbit rel24 = P2^0;
delay(int count)
{
int i,j;
for(i=0;i<count;i++)
for(j=0;j<200;j++);
}
led_bl()
{
int i;
for(i=0;i<1;i++)
{
wled = 0; delay(10);
wled = 1; delay(10);
}
}
init_rs232()
{
SCON=0x50;
TMOD=0x20;
TH1=0xFD;
TR1=1;
TI=1;
}
tx_char(uchar c)
{
while(1)if(T1)break;
TI=0;
SBUF=c;
}
tx_str(char *str)
{
do{tx_char(*str++);}
while(*str!='\0');
}
char rx_char()
{
while(1)if(RI)break;
RI=0;
//wled = 0; delay(5);
//wled = 1; delay(0);
return SBUF;
}
main()
{
uchar mn;
led_bl();
init_rs232();
delay(200);
mn = '0';
/*
P2=0;
switch(P2)
{
case 0 : mn='0';break;
case 1 : mn='1';break;
case 2 : mn='2';break;
case 3 : mn='3';break;
case 4 : mn='4';break;
case 5 : mn='5';break;
case 6 : mn='6';break;
case 7 : mn='7';break;
case 8 : mn='8';break;
case 9 : mn='9';break;
case 10 : mn='a';break;
case 11 : mn='b';break;
case 12 : mn='c';break;
case 13 : mn='d';break;
case 14 : mn='e';break;
case 15 : mn='f';break;
case 16 : mn='g';break;
}
*/
printf("This machine is \"%c\"", mn);printf("\n");
while(1)
{
int i;
uchar command[4];
led_bl();
for(i=0;i<4;i++)
{
command[i]=rx_char();
}
if(command[0]==mn)//機器組
{
if(command[1]=='d')
{
switch(command[2])
{
case 'A':rel01 = 0; break;
case 'a':rel01 = 1; break;
case 'B':rel02 = 0; break;
case 'b':rel02 = 1; break;
case 'C':rel03 = 0; break;
case 'c':rel03 = 1; break;
case 'D':rel04 = 0; break;
case 'd':rel04 = 1; break;
case 'E':rel05 = 0; break;
case 'e':rel05 = 1; break;
case 'F':rel06 = 0; break;
case 'f':rel06 = 1; break;
case 'G':rel07 = 0; break;
case 'g':rel07 = 1; break;
case 'H':rel08 = 0; break;
case 'h':rel08 = 1; break;
case 'I':rel09 = 0; break;
case 'i':rel09 = 1; break;
case 'J':rel10 = 0; break;
case 'j':rel10 = 1; break;
case 'K':rel11 = 0; break;
case 'k':rel11 = 1; break;
case 'L':rel12 = 0; break;
case 'l':rel12 = 1; break;
case 'M':rel13 = 0; break;
case 'm':rel13 = 1; break;
case 'N':rel14 = 0; break;
case 'n':rel14 = 1; break;
case 'O':rel15 = 0; break;
case 'o':rel15 = 1; break;
case 'P':rel16 = 0; break;
case 'p':rel16 = 1; break;
case 'Q':rel17 = 0; break;
case 'q':rel17 = 1; break;
case 'R':rel18 = 0; break;
case 'r':rel18 = 1; break;
case 'S':rel19 = 0; break;
case 's':rel19 = 1; break;
case 'T':rel20 = 0; break;
case 't':rel20 = 1; break;
case 'U':rel21 = 0; break;
case 'u':rel21 = 1; break;
case 'V':rel22 = 0; break;
case 'v':rel22 = 1; break;
case 'W':rel23 = 0; break;
case 'w':rel23 = 1; break;
case 'X':rel24 = 0; break;
case 'x':rel24 = 1; break;
case 'Z':P0=0x00;P2=0x00;P1=0x00;break;
case 'z':P0=0xFF;P2=0xFF;P1=0xFF;break;
default: printf("Command miss");printf("\n");
}
}
else
{
printf("Command miss");printf("\n");
}
}
else
{
printf("Command miss");printf("\n");
}
}
我不知道我的做法會不會佷奇怪...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.152.161.22
→
02/21 21:44, , 1F
02/21 21:44, 1F
→
02/21 21:45, , 2F
02/21 21:45, 2F
→
02/21 21:48, , 3F
02/21 21:48, 3F
→
02/21 23:06, , 4F
02/21 23:06, 4F
→
02/21 23:08, , 5F
02/21 23:08, 5F
→
02/21 23:26, , 6F
02/21 23:26, 6F
→
02/23 00:14, , 7F
02/23 00:14, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):