如果光耦驱动的是继电器,那就会在复位状态下就吸合的。所有,通常,用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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)