A. 为什么stc89c52单片机的p34口高电平电压只有0.8v
这个引脚你接大电流的负载了吧,可以把该引脚设置成推挽输出,理论电流可达20ma。
B. 如何用单片机实现防空警报音
需要找到防空警报的频率变化范围,就可以实现。
下面给一个蜂鸣器模拟消防车报警声;
*****************************************************************************/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Count;
sbit Key1 = P3^2 ;
sbit Key3 = P3^3 ;
sbit BEEP = P3^1 ; //蜂鸣器
sbit p34 = P3^4 ;
/********************************************************
延时函数
*********************************************************/
void delay(void)
{
uint k;
for(k=1700;k>0;k--);
}
/********************************************************
键控制函数
*********************************************************/
void key_control()
{
if(Key1==0)
{
while(Key1==0);
TR0=1;
}
if(Key3==0)
{
while(Key3==0);
TR0=0;
}
}
/********************************************************
主函数
*********************************************************/
main()
{
p34=0;
P0=0x0;
P1=0xff;
P2=0xff;
Count=0x00;
BEEP=1;
TMOD=0x01;
TH0=0x00;
TL0=0xff;
EA=1; ET0=1;
while(1)
{
do
{
Count++;
key_control();
delay();
}while(Count!=0xff);
do
{
Count--;
key_control();
delay();
}while(Count!=0x00);
}
}
/*********************************************************
Time0中断函数
**********************************************************/
void Time0(void) interrupt 1 using 0
{
TH0=0xfe;
TL0=Count;
BEEP=~BEEP;
}
/*********************************************************/
C. STC11L02E 单片机 由P34口唤醒问题,懂的人进,哪位大侠能帮帮忙
P3.0 P3.4 P3.5 唤醒功能与 WAKE_CLKO 寄存器有关
WAKE_CLKO.4 =1 ; P3.4 允许唤醒
WAKE_CLKO.5 = 1 ; P3.5 允许唤醒
WAKE_CLKO.6 =1 ; P3.0 允许唤醒
这是数据手册的测试程序
#include "reg51.h"
#include "intrins.h"
sfr WAKE_CLKO = 0x8f;
//External interrupt0 service routine
void t0int( ) interrupt 1 //T0 inerrrupt, interrupt 1 (location at 000BH)
{
}
void main()
{
WAKE_CLKO = 0x10; //enable ��������P3.4/T0/INT falling edge wakeup MCU
//from power-down mode
//T0_PIN_IE (WAKE_CLKO.4) = 1
//ET0 = 1; //enable T0 interrupt
EA = 1; //open global interrupt switch
while (1)
{
T0 = 1; //ready read T0 port
while (!T0); //check T0
_nop_();
_nop_();
PCON = 0x02; //MCU power down
_nop_();
_nop_();
P1++;
}
}
D. 15单片机怎样用p34口
是51单片机吧,P3.4是多功能口,一是标准的IO口,可以直接输入输出
第二个功能是T0的脉冲输入口,当T0作为计数器时,可以作为T0的脉冲输入口使用。
E. 银行一米线的c程序 芯片AT89C52,语音模块接单片机的P34,P35端口,激光模块接单片机的P24,P25端口,语言是
//程序说明--------------------
//程序一直检测激光模块接口,
//如果先检测到里面的接口,延时一段 时间后,又检测到外面的接口信号,说明有人往外走,启动语音“谢谢光临”
//如果先检测到外面的接口信号,延时一段时间后,检测到里面的接口信号,说明有人走进来,启动语音“某某银行竭诚为你服务”
//当有人还在里面的时候,后续的人进来,提示“请退到一米线外”
#include<AT89X52.H>
//端口定义------------------
sbit WELCOME =P3^4;
sbit BYE =P3^5;
sbit INSIDE =P2^4;
sbit OUTSIDE =P2^5;
// 语音(P3.4和P3.5)和激光模块(P2.4和P2.5)
unsigned char someone; //有人 为1,无人0
//延时---------------------
void delay()
{
unsigned char i,j,k;
for(i=0;i<200;i++)
for(j=0;j<200;j++)
for(k=0;k<200;k++);
}
//主程序------------------
void main()
{
while(1)
{
if(INSIDE) //出去
{
delay();
if(OUTSIDE)
{
someone=0;
BYE=0;
}
}
if(OUTSIDE) //进来
{
delay();
if(INSIDE)
{
someone=1;
WELCOME=0;
}
}
if(someone)
{
if(OUTSIDE) //后面有人进来
{
delay();
if(INSIDE)
{
//请退到一米线外
}
}
}
}
}
具体还要按 实际 调整
F. 51单片机中用4个开关控制4个发光二极管的C语言程序设计
#include<reg51.h>
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitled1=P1^4;
sbitled2=P1^5;
sbitled3=P1^6;
sbitled4=P1^7;
main()
{
while(1)
{
led1=key1;
led2=key2;
led3=key3;
led4=key4;
}
}
G. 51单片机中这是什么意思 我是小白,初学者(特别是P3^4那一类的)
这些是位定义,意思相当于用另外的字母去表示这个位。你可以理解为换了个名字,比如sbit Key1=P3^4,以后对Key1进行操作其实就是对P3.4进行操作。
H. 51单片机3键键盘电路图[只有三个按键,链接pc的]
同学你好,我来帮你,你可以使用串口啊,比如:1:给你一个从PC发给单片机数据后,单片机再原样发给PC的参考代码:2:将51某一个(引脚)按键0,1状态,发给PC;
1::::::::::::::
#include <REG52.H>
bit Flag;
unsigned int R_D,S_D;
unsigned char i;
void usart_init(void); ///串口初始化
void main (void) {
usart_init(void); ///串口初始化
while(1)
{
if (Flag==1)
{
SBUF = S_D; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
Flag=0;
}
}
}
}
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
R_D = SBUF; //SUBF接受/发送缓冲器
S_D=R_D;///////返回PC发送
Flag=1;
}
}
void usart_init(void)///串口初始化
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
}
2:::::::::::::
#include <REG52.H>
sbit p34=P3^4;////////定义一个按键
bit Flag=1;
unsigned int S_D;
unsigned char i;
void usart_init(void); ///串口初始化
void delay (unsigned int Z) ; //延时程序 Z倍 MS
void key_p34(void) ; /////按键检
void main (void) {
usart_init(void); ///串口初始化
key_p34(void) ; ////上电后检测一次按键的状态
if (Flag==1)//上电后发送一次按键的状态
{
SBUF =1; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
}
else
{
SBUF =0; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
}
while(1)
{
key_p34(void) ;
if (Flag==1)
{
SBUF =1; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
}
else
{
SBUF =0; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
}
}
}
void usart_init(void)///串口初始化
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
}
void delay (unsigned int Z)//延时程序 Z倍 MS
{
unsigned int x,y;
for(x=Z;x>0;x--)
for(y=110;y>0;y--) ;
}
void key_p34(void) /////按键检测
{
if(p34==0)
{ delay(10);
if(p34==0)
{
while(!p34) ;/////等待按键松手
Flag=0;
}
}
}
I. 用单片机处理问题时有这么一个语句if(p32==1&&p33==1&&p34==1&&p35==1&&p36==0),这个语句能简化吗
可以,以我常用的avr
为例。
比如p32------p36是pb口,
我读入pb口状态用pinb语句。
unsigned char a;
a=PINB;
a=a&0b01111100;//屏蔽第0位第1位和第七位
if a==0x3c //0011 1100
{ 加入条件为真的执行语句 }
以后读入pb口状态后付给a,判断a就行了。