返回首页

C51单片机编程

251 2024-04-22 19:13 admin

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

                   }

               }

         }

     }

}

要路图,,,可以用计数的方式(当连续出现8个低电平输入单片机时),当计数到8时,给接嗽的引脚发送一个高电平,延迟100MS再发送一个低电平

你要用两组IO 吗?

用一组也行 因为IO内部集成上拉(非p0)

你可以用硬件的现实的方式做第一个问题,因为你是说输入高会亮 那就就把二极管的正端接到你的输入量的引脚上 和IO 并有一起 然后把IO 一直拉低 就等着你的输入量拉高的时候 等就会亮 就想检测按键一样 。

对于第二个问题 你可以写程序 (但我还是不懂你说的连续什么意思)单片机处理时间很小小 这里不能没没有时间差 )因为人的输入肯定会有时间差 你在相应延时一下再检测的输入量是否是符合你的连续 就编个有源驱动程序驱动喇叭就行了!

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

现场写给你吧:

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

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片
上一篇:返回栏目