[問題] 控制8051的C語言程式!
這個程式是用Keil uVision3來控制或模擬8051
而控制的方法是一開始都不會動作
之後觸發某隻腳會輸入high訊號,之後會開始動作(觸發腳設為P1_7)
而觸發腳的high就要恢復為low(大約就等於彈簧按鈕會復歸原位)
之後再觸發一次動作會停止
這是c語言的程式,我覺得大概方向是對的
在動作方面雖然啟動觸發正常,但是在結束的觸發就沒反應
不知道是不是在宣告變數那邊要換別種類型?
希望有大大能幫解惑^^"
#include<AT89X51.H>
void delayms(unsigned int time);
main()
{
while(1)
{
unsigned char j,k = 0;
if(P1_7 == 0)
{
k = ~k;
}
while(k)
{
for(j=0x01; j<0x80; j<<=1)
{
P2 = j;
delayms(200);
}
for(j=0x80; j>0x01; j>>=1)
{
P2 = j;
delayms(200);
}
if(P1_7 == 0)
{
k = ~k;
}
}
}
}
void delayms(unsigned int time)
{
unsigned int n;
while( time>0 )
{
n = 120;
while(n>0) n--;
time--;
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.27.237
推
04/13 21:01, , 1F
04/13 21:01, 1F
→
04/13 22:24, , 2F
04/13 22:24, 2F
推
04/13 23:26, , 3F
04/13 23:26, 3F
→
04/13 23:28, , 4F
04/13 23:28, 4F
→
04/13 23:28, , 5F
04/13 23:28, 5F
→
04/13 23:29, , 6F
04/13 23:29, 6F
→
04/13 23:46, , 7F
04/13 23:46, 7F
推
04/13 23:59, , 8F
04/13 23:59, 8F
推
04/14 00:03, , 9F
04/14 00:03, 9F
→
04/14 00:10, , 10F
04/14 00:10, 10F
→
04/14 00:11, , 11F
04/14 00:11, 11F
推
04/14 00:19, , 12F
04/14 00:19, 12F
把修改的主程式部分貼上來
main()
{
while(1)
{
unsigned char j,k = 0;
if(P1_7 == 0)
{
k = ~k;
}
if(k)
{
for(j=0x01; j<0x80; j<<=1)
{
P2 = j;
delayms(200);
}
for(j=0x80; j>0x01; j>>=1)
{
P2 = j;
delayms(200);
}
}
}
}
是有拿掉第二個觸發跟改成if,不過這樣子好像也有按鈕反應時間的問題
※ 編輯: apol1033 來自: 59.126.27.237 (04/14 00:22)
→
04/14 00:29, , 13F
04/14 00:29, 13F
→
04/14 00:29, , 14F
04/14 00:29, 14F
最後想到一個爛招,將第二觸發內加上延遲,不過按鈕的時間間隔就要自己算好
main()
{
while(1)
{
unsigned char j,k = 0;
if(P1_7 == 0)
{
k = ~k;
}
while(k)
{
for(j=0x01; j<0x80; j<<=1)
{
P2 = j;
delayms(2000);
}
for(j=0x80; j>0x01; j>>=1)
{
P2 = j;
delayms(2000);
}
if(P1_7 == 0)
{
k = ~k;
delayms(5000);
}
}
}
}
感覺蠻爛的= ="不穩定,不知道有沒有大大能提出一些意見或者修改@@"
※ 編輯: apol1033 來自: 59.126.27.237 (04/14 00:48)