请教一下关于stc的15系列51的推挽输出模式???

请教一下关于stc的15系列51的推挽输出模式???,第1张

stc15系伍埋凳列单片机I/O引脚有四种模式,由两个寄存器来设置。P3.4和P3.5设置成强推挽输出模式,P3M0=0x00,P3M1=0x30,所以,你的程序是对的。要知道,你这样设置,引脚输出高电平,光耦是导通的,所以,在单片机上电(复位状态)开机时,光耦就导通了。

如果光耦驱动的是继电器,那就会在复位状态下就吸合的。所有,通常,用I/液仔O的低电平驱动光腔旅耦比较好。当然了,如果就需要在复位状态下就导通,这样就可以的。

#include "STC12C54.H"

#define uchar unsigned char

#define uint unsigned int

#define dataport P1//P1直接驱如缓动数码管的渣正模8个阳极

sbit wei1=P3^3//再有三个管脚接3个三极管驱动数码管的阴清嫌极

sbit wei2=P3^4

sbit wei3=P3^5

uint a=0//中断次数计数,一次50ms,20次为1 秒

//共阴数码管七段码

uchar TABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}

//延时子程序

void delay1ms(uint t)

{

uint i,j,k

for(i=ti>0i--)

for(j=15j>0j--)

for(k=27k>0k--)

}

//显示子程序

void display(uint n)

{

uchar a1,a2,a3

a1=n/100%10

a2=n/10%10

a3=n%10

wei1=1

dataport=TABLE[a1]

delay1ms(1)

wei1=0

dataport=0x80|TABLE[a2]//这里多个小数点

delay1ms(1)

wei3=1

dataport=TABLE[a3]

delay1ms(1)

wei3=0

}

void init(void)

{

TMOD=0X01

TH0=(655536-50000)/256//定时50ms

TL0=(655536-50000)%256

EA=1

ET0=1

TR0=1

P1M0=0

P1M1=0xff//P1口设为推挽输出,驱动能力强

P3M0=0

P3M1=0x38//P3.3P3.4 P3.5口设为推挽输出

}

void main(void)//主程序

{

init()//初始状态设定

while(1)

{

display(a/2)//显示计数值,以十分之一秒为单位

}

}

void timer0(void)interrupt 1//中断子程序

{

TH0=(655536-50000)/256

TL0=(655536-50000)%256

a++;

if(a==1980)a=0//1980次是99秒

}

sfr P0M1 = 0X93 //这些是预定义寄存器的地址的

sfr P0M0 = 0X94// 在编译过程中会把 POM1之类的东西隐配变成这些地升携粗址

sfr P1M1 = 0X91 //mcu在运行中也是对这些地址 *** 作的

sfr P1M0 = 0X92

sfr P2M1 = 0X95

sfr P2M0 = 0X96

uchar CONT_1//定义一个常量 作为计数器吵镇 使用,类型无符号整形数

P0M1 = 0 //将io口设置为推挽输出

P1M1 = 0 // 下面这些事定义了这些寄存器的初始值

P2M1 = 0 //以免第一次使用这些寄存器时出错

P0M0 = 0XFF

P1M0 = 0XFF

P2M0 = 0XFF


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12450640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存