导航:首页 > 操作系统 > 单片机可控程序

单片机可控程序

发布时间:2022-10-05 11:06:12

① 求51单片机控制继电器程序

程序就免了,给你几个建议。

  1. 你最好把按键的程序和逻辑控制分开写,这样比较清晰,按键驱动的结果就是消抖以后的按键状态,处理完清除,最好用固定时钟驱动少用延时,按键驱动看着容易做好了还是不容易的。

  2. 逻辑控制无非就是if else。。。用全局量记录之前的状态,最好有个简单明了的逻辑状态图否则很容易乱套,然后操作继电器就是两个io口就是了。

  3. 你用的这个和89c都是stc比较老的型号了,建议你到官网看看,很多新型号跑得更快,程序上能不能通用注意两点,死等延时的时间和硬件上的区别。

  4. stc很多型号都用3.0和3.1口下载程序,所以按键会有影响,建议换个io口

  5. 继电器的常开和常闭是接线决定的,按键常开和常闭可以用上下拉电阻来控制,硬件上处理一下,主要是要保证系统刚上电之前的这段时间的状态是对的。

  6. 51和stm32是完全不同的cpu,如果要移植到stm32上初始化和寄存器操作是不一样的,c语言的层面上大概只有逻辑控制这块儿能用,而且stm32是3.3V硬件上也要处理。

  7. 这个做成并不难,做好就要花些心思,自己做才有意义解决问题就是学习的过程。

② 51单片机, 编一个控制步进电机转动的程序。

#include <reg51.h> //51芯片管脚定义头文件
#include <intrins.h>//内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms
/*
/********************************************************/
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k<125; k++)
{ }
}
}
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void motor_ffw(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //转1×n圈
{
for (i=0; i<8; i++) //一个周期转30度
{
P1 = FFW[i]; //取数据
delay(15); //调节转速
}
}
}
/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void motor_rev(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //转1×n圈
{
for (i=0; i<8; i++) //一个周期转30度
{
P1 = REV[i]; //取数据
delay(15); //调节转速
}
}
}
/********************************************************
*
* 主程序
*
*********************************************************/

main()
{
while(1)
{
motor_ffw(5); //电机正转
delay(5000); //换向延时
//motor_rev(5); //电机反转
//delay(1000); //换向延时
}
}

/********************************************************/

③ 单片机控制舵机程序

//12MHz
#include <reg51.h>

void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0B1;
TL0 = 0x0E0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void delay(void) //误差 0us 延时1ms 此处可以修改高电平周期
//修改此处的延时可以更改舵机转的角度 ,45度具体是多少 你可以试试
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main(void)
{
InitTimer0();
P1_2=0;
while(1);
}

void Timer0Interrupt(void) interrupt 1
{
//20ms中断
TH0 = 0x0B1;
TL0 = 0x0E0;
P1_2=1;
delay();
P1_2=0;
}

④ 单片机可控制流水灯汇编程序 要求:按一下亮一个,再按一下第二个亮,第一个熄灭

/************************************
编写者:XP
学习单片机一个星期,这是我自己写的*/
#include<reg52.h>
sbit Key=P3^2;
sbit LED_1=P1^0;
sbit LED_2=P1^1;
/**********************************
*********延时函数*****************/
void Delay(int del)
{ int i,j;
for(i=0;i<=42;i++)
for(j=0;j<=del;j++) ;
}
void main()
{ while(1)
{ if(Key==0)
{ Delay(10); //软件防抖,延时10ms
if(Key==0)
{ LED_1=0; //第一个灯亮
LED_2=1; //
Key=1;
Delay(250);
if(Key==0)
{ Delay(10); //软件防抖,延时10ms
LED_1=1; //第一个灭
LED_2=0;} //第二个亮
}
}
Delay(300);
Key=1;
}
}

⑤ 单片机控制可控硅调压程序

可控硅必须检测过零信号。只有零点以后触发,才会有效。而且在下一个零点到来的时候,可控硅会自动关闭。你这个程序里面只有一句P=1,没有P=0,那么这个端口一直开启,没有关闭。负载将一直投入。不可能关闭。所以,根本不可能调压!
想要调压:1、增加一个过零检测电路。
2、每次触发以后,过一段时间必须把触发信号关闭。也可以在过零中断时,将触发信号关闭。
3、调压的大小值受过零后多长时间投入。注意10MS以内必须完成一次控制。否则控制将不正常。

⑥ 单片机控制可控硅调压程序

可控硅必须检测过零信号。只有零点以后触发,才会有效。而且在下一个零点到来的时候,可控硅会自动关闭。你这个程序里面只有一句P=1,没有P=0,那么这个端口一直开启,没有关闭。负载将一直投入。不可能关闭。所以,根本不可能调压!
想要调压:1、增加一个过零检测电路。
2、每次触发以后,过一段时间必须把触发信号关闭。也可以在过零中断时,将触发信号关闭。
3、调压的大小值受过零后多长时间投入。注意10MS以内必须完成一次控制。否则控制将不正常。

⑦ 基于51单片机的可控硅调压调光程序-带过零检测

程序:
#include<reg52.h>
#include<intrins.h>
sbitledRS=P1^0;
sbitledRW=P1^1;
sbit ledE=P1^2;
sbit keyjia=P2^7;
sbitkeyjian=P2^6;
sbitcontrolLD=P1^3;
bitflag1=1;
bitflag2=1;
unsigned
char code table[]=" guang liang
";
unsignedchar code table1[]=" 00 ";
intnum,flag=0,count=0;
charliang=3;
voiddelaykt(void) //导通延时
{
unsigned char a;
for(a=2;a>0;a--);
}
voiddelay(int z) //可调延时
{
unsigned x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void
delay9ms(void) //误差
-0.43402777778us 延时9ms
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=224;b>0;b--)
for(a=17;a>0;a--);
}
voidwrite_com(unsigned com) //写指令
{
ledRS=0;
P0=com;
delay(10);
ledE=1;
delay(20);
ledE=0;
}
voidwrite_date(unsigned date) //写数据
{
ledRS=1;
P0=date;
delay(10);
ledE=1;
delay(20);
ledE=0;
}
voidwrite_liang(unsigned liang) //写亮度
{
int shi,ge;
shi=(liang-3)/10;
ge=(liang-3)%10;
write_com(0x80+0x40+7);
write_date(0x30+shi);
write_date(0x30+ge);
}
voidinit() //初始化
{
controlLD=1; //触发控制初始化
ledRW=0; //液晶初始化
ledE=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delaykt();
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_date(table1[num]);
delaykt();
}
EA=1; //外部中断设置
EX0=1;
IT0=1;
}
voidkeyscanf() //键盘判断
{
if(keyjia==0) //加键判断
{
delaykt();
if(keyjia==0)
{
if(flag1==1)
{
flag1=0;
liang++;
if(liang==10)
liang=3;
write_com(0x80+0x40+7);
write_liang(liang);
}
}
}
else if(keyjia!=0)
{
delaykt();
if(keyjia!=0)
flag1=1;
}
if(keyjian==0) //减键判断
{
delaykt();
if(keyjian==0)
{
if(flag2==1)
{
flag2=0;
liang--;
if(liang==2)
liang=9;
write_com(0x80+0x40+7);
write_liang(liang);
}
}
}
else if(keyjian!=0)
{
delaykt();
if(keyjian!=0)
flag2=1;
}
}
voidzhongan() interrupt 0 //外部中断
{
flag=1;
}
voidtimepd() //同步标志判断与定时器设置
{
if(flag==1)
{
flag=0;
TMOD=0x01;
TH0=(65536-1000*(10-liang))/256;
TL0=(65536-1000*(10-liang))%256;
ET0=1;
TR0=1;
}
}
voidtime0() interrupt 1 //定时中断程序
{
count=1;
}
voidchufa() //MOS3020触发
{
if(count==1)
{
count=0;
controlLD=0;
delaykt();
controlLD=1;
delay9ms();
controlLD=0;
delaykt();
controlLD=1;
}
}
voidmain()
{
init();
while(1)
{
keyscanf();
timepd();
chufa();
}
}

⑧ 单片机触发可控硅程序

写程序要加注释,否则放一段时间,自己都看不懂。提问时最好配上电路,起码应该说明你的思路是怎样的,3061是过零触发还是普通的没说明白。
我用下面这个 程序 做过零触发可控硅,出现几个问题请高手指点。
一,如果用定时器1 ,2.3角接3061光耦来触发可控硅,负载灯泡时亮时暗。(定时器0用的常数值既把h换为100)不用定时器1灯就不时亮时暗。不知为啥?
二,不用定时器1, 用下程序,灯泡不亮,但shu2一样计数,不会计到100停止(10ms)。若用常数h换为9000正常计数,换粉10001就不再计数。这又是怎么回事?
三,若把h换为500以内的值时灯泡会亮,500以上就不再亮了。这也又是怎么回事?
// 初看这些问题,好像都是数值超界了,0x9000就正常,0x10001就错误,应该是int型数超界了。
uchar k,m,shu1,shu2;
if(shu1==256)// shu1可能等于256吗?
试一试软仿真,你的问题应该不难解决。
自己思路要清晰

⑨ 单片机输出电压可控怎么做

不知道你单片机输出的波形是通过什么形式的。如果是通过pwm的,可以是通过按键增加或减小pwm的脉宽值就可以了。具体程序在我的博客里面就有一个关于按键设置pwm的文章,用的是pic单片机,你可以参考一下。

阅读全文

与单片机可控程序相关的资料

热点内容
可以去电影院买明天的票吗 浏览:535
大鹏《吉祥》完整版 浏览:157
新中国大将的电视剧 浏览:876
见智研究app评价如何 浏览:618
压缩机附件 浏览:588
谷歌云服务器大升级 浏览:773
一年半程序员找工作 浏览:660
带方舟编译器的手机版本 浏览:33
云服务器扩容磁盘受影响 浏览:391
肉戏比较多的电影 浏览:751
rtu命令 浏览:549
美女母乳片 浏览:462
ak大咖电影在线观看 浏览:226
加固的app反编译 浏览:909
字符串混淆算法 浏览:89
辽宁海关压缩时间 浏览:541
web备忘录源码 浏览:36
芝麻开门的新app怎么用 浏览:399
与何皇后有染的三国小说 浏览:198
msgtopdf 浏览:324