C51单片机编程

用C51编程,当高电平输入到单片机中单片机中的一个口发出信号小灯会亮,当输入单片机低电平是小灯会灭,当连续出现8个低电平输入单片机时,单片机会发出一个信号到喇叭,发出响声!

谢谢!
最好是用汇编语言,谢谢!!!!!!

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit 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);

                   }

               }

         }

     }

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-30
要路图,,,可以用计数的方式(当连续出现8个低电平输入单片机时),当计数到8时,给接嗽的引脚发送一个高电平,延迟100MS再发送一个低电平
第2个回答  2010-08-02
你要用两组IO 吗?
用一组也行 因为IO内部集成上拉(非p0)
你可以用硬件的现实的方式做第一个问题,因为你是说输入高会亮 那就就把二极管的正端接到你的输入量的引脚上 和IO 并有一起 然后把IO 一直拉低 就等着你的输入量拉高的时候 等就会亮 就想检测按键一样 。
对于第二个问题 你可以写程序 (但我还是不懂你说的连续什么意思)单片机处理时间很小小 这里不能没没有时间差 )因为人的输入肯定会有时间差 你在相应延时一下再检测的输入量是否是符合你的连续 就编个有源驱动程序驱动喇叭就行了!
第3个回答  推荐于2017-10-19
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

RET

END本回答被网友采纳
第4个回答  2010-07-31
现场写给你吧:
org 0000h
ajmp main
ORG 0030H
MAIN:
MOV SP,#40H
MOV A,P1
JNB P1.0,J1
JB
AJMP MAIN
J1:
SETB P2.0
INT R0
CJNZ R0,#08H,J3
MOV R0,#00H
RET
J2:
CLR P2.0

RET
J3:
MOV R5,#64H
LOOP:
CPL P2.1
ACALL DELAY
DJNZ R5,LOOP
MOV R5,#64H
RET
DELAY:
MOV R7,#0FFH
MOV R6,#64H
DE1:NOP
DE2:NOP
DJNZ R6,DE2
DJNZ R7,DE1
RET
END
相似回答