1樓:匿名使用者
#include
#define uchar unsigned char#define uint unsigned intsbit high_key=p1^0;
sbit low_key=p1^1;
sbit led=p2^0;
sbit speak=p2^1;
uint count;
void delay(uint x)
uchar j;
while(x--)
for(j=0;j<125;j++)
void main(void)
high_key=0;
low_key=1;
led=speak=0;
while(1)
if(high_key==1)
delay(10);
if(high_key==1)
led=1;
if(low_key==0)
delay(10);
if(low_key==0)
led=0;
count++;
if(count==8)
count=0;
speak=1;
delay(100);
speak=0;
delay(100);
speak=1;
delay(100);
speak=0;
delay(100);
2樓:匿名使用者
要路圖,,,可以用計數的方式(當連續出現8個低電平輸入微控制器時),當計數到8時,給接嗽的引腳傳送一個高電平,延遲100ms再傳送一個低電平
3樓:匿名使用者
你要用兩組io 嗎?
用一組也行 因為io內部整合上拉(非p0)你可以用硬體的現實的方式做第一個問題,因為你是說輸入高會亮 那就就把二極體的正端接到你的輸入量的引腳上 和io 並有一起 然後把io 一直拉低 就等著你的輸入量拉高的時候 等就會亮 就想檢測按鍵一樣 。
對於第二個問題 你可以寫程式 (但我還是不懂你說的連續什麼意思)微控制器處理時間很小小 這裡不能沒沒有時間差 )因為人的輸入肯定會有時間差 你在相應延時一下再檢測的輸入量是否是符合你的連續 就編個有源驅動程式驅動喇叭就行了!
4樓:匿名使用者
led bit p1.0
key bit p1.4
speaker bit p1.7
lowcnt equ 30h
org 0000h
ljmp main
org 0030h
main:
mov lowcnt,#0
loop:
jb key,loop1
setb led
jnb key,$
inc lowcnt
mov a,lowcnt
cjne a,#8,loop1
mov lowcnt,#0
lcall fmq
sjmp loop
loop1:
clr led
sjmp loop
fmq:
clr speaker
mov r2,#200
dly:
mov r3,#250
djnz r3,$
djnz r2,dly
retend
5樓:擾龍冠玉
現場寫給你吧:
org 0000h
ajmp main
org 0030h
main:
mov sp,#40h
mov a,p1
jnb p1.0,j1
jbajmp main
j1:setb p2.0
int r0
cjnz r0,#08h,j3
mov r0,#00h
retj2:
clr p2.0
retj3:
mov r5,#64h
loop:
cpl p2.1
acall delay
djnz r5,loop
mov r5,#64h
retdelay:
mov r7,#0ffh
mov r6,#64h
de1:nop
de2:nop
djnz r6,de2
djnz r7,de1
retend
6樓:匿名使用者
高手啊 俺不會彙編
7樓:九日木水
這個程式很好寫的啊
把io口定義一下,但是不知道你是檢測一個口還是迴圈檢測好幾個口
要是一個口的話,吧檢測到的訊號給計數口,然後中斷輸出一個脈衝給喇叭就可以啦
8樓:匿名使用者
你問題說得不清 連續八個 時間間距是多少 硬體電路呢? 都沒有程式怎麼寫
微控制器C51程式設計兩個問題(裡面詳細,歡迎高手)
問題一 為什麼說delay 500 就是延時0.5s呢?是估算的.c 不能精確定時,通過調節 for j 0 j 125 j 的 125的數值.取125剛好接近 1ms.我就做了好幾個 20us,1ms,1s,的delay程式.把他們執行很多次後,用秒錶核對.1ms 程式也是用的125 這個值,很接...
c51微控制器中斷程式中的interrupt1,2,3是由什麼決定的
衛戍邊疆 中斷是由於某種事件的發生 硬體或者軟體的 計算機暫停執行當前的程式,轉而執行另一程式,以處理髮生的事件,處理完畢後又返回原程式繼續作業的過程。中斷是處理器一種工作狀態的描述。1 int0 外部中斷0,由p3.2埠引入,低電平或下降沿引起。預設優先順序最高。2 int1 外部中斷1,由p3....
c51微控制器請問這句如何理解
你呼叫函式的時候delay 200 會有個延時時間,如果你的延時是是200,200就被賦值給z 然後再把z賦值給x 所以x就是200的值,若你把函式該成delay 400 那麼應該x就等於400.z 是呼叫該子函式時賦值的,如 delay 200 for x z x 0 x 是 賦值 x z 如果 ...