导航:首页 > 操作系统 > 51单片机驱动实例

51单片机驱动实例

发布时间:2022-08-06 15:25:17

① stc51单片机彩屏驱动程序怎么写希望具体点,谢谢

武汉 谷鑫科技基于STC单片机彩屏驱动程序实例部分展示,篇幅有限
AUXR = 0x8e;//////////////////////////////////注意增加该语句。
#include <reg51.h>
#include <absacc.h>
#define X_ADDR XBYTE[0x0000]
#define Y_ADDR XBYTE[0x0100]
#define CMD XBYTE[0x0200]
#define DAT XBYTE[0x0300]
unsigned char code zk[32] = {//请
0x00, 0x47, 0x20, 0x23, 0x00, 0xEF, 0x20, 0x23, //left
0x22, 0x23, 0x22, 0x23, 0x2A, 0x32, 0x22, 0x02,
0x48, 0xFC, 0x40, 0xF8, 0x40, 0xFE, 0x08, 0xFC, //right
0x08, 0xF8, 0x08, 0xF8, 0x08, 0x08, 0x28, 0x10};
unsigned char code picture[];
main()
{
unsigned int x,y,x2,y2;
unsigned int i;
unsigned char key,x1,y1,j,k,z,m,n,bright;
AUXR = 0x02;//////////////////////////////////注意增加该语句。
bright = 8;

key = 1;//////////////////////////////////////选择液晶屏型号
//0:TFT2432;
//1:TFT3224;
//2:TFT480234
//3:TFT480272
//4:TFT6448
//5:TFT8048
//6:TFT8060
//7:TFT8060

if(P13==1)
{
if(key==0){x2=240;y2=320;x1=6; y1=16; goto loop1;}//x1/32,y1/20
if(key==1){x2=320;y2=240;x1=8; y1=12; goto loop1;}
if(key==2){x2=480;y2=240;x1=12;y1=12; goto loop1;}
if(key==3){x2=480;y2=272;x1=12;y1=14; goto loop1;}
if(key==4){x2=640;y2=480;x1=16;y1=24; goto loop1;}
if(key==5){x2=800;y2=480;x1=20;y1=24; goto loop1;}
if(key==6){x2=800;y2=600;x1=20;y1=30; goto loop1;}
if(key==7){x2=800;y2=600;x1=20;y1=30; goto loop1;}//亮度测试
}

loop1:
bright--;if(bright==255)bright=7;
CMD = 0x06;
DAT = bright;

///////////////////////以下是清屏功能///////////////////////////////////////
//用红色清屏
CMD = 0x04;DAT = 0xe0;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
///////////////////////以上是清屏功能///////////////////////////////////////

while(key==1)
{
for(bright=7;bright!=255;bright--)
{
CMD = 0x06;
DAT = bright;
for(y=0;y<15;y++){x=1;while(x!=0)x++;}
}
CMD = 0x20;//关断显示,poweroff
for(y=0;y<15;y++){x=1;while(x!=0)x++;}
key = P1&0x07;
}

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

//用红色清屏
CMD = 0x04;DAT = 0x1c;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作

② 51单片机怎么驱动直流电机c语言

51单片机驱动直流电机程序(用的是l298n芯片):

#include<reg51.h>

#include<math.h>

#define uint unsigned int

#define uchar unsigned char

#define N 100

sbits1=P1^0; //电机驱动口

sbit s2=P1^1; //电机驱动口

sbit s3=P1^2; //电机驱动口

sbit s4=P1^3; //电机驱动口

sbit en1=P1^4; //电机使能端

sbit en2=P1^5; //电机使能端

sbit LSEN=P2^0; //光电对管最左

sbit LSEN1=P2^1; //光电对管左1

sbit LSEN2=P2^2; //光电对管左2

sbit RSEN1=P2^3; //光电对管右1

sbit RSEN2=P2^4; //光电对管右2

sbit RSEN=P2^5; //光电对管最右

uint pwm1=0,pwm2=0,t=0;

void delay(uint xms)

{

uint a;

while(--xms)

{

for(a=123;a>0;a--);

}

}

void motor(uchar speed1,uchar speed2)

{

if(speed1>=-100&&speed1<=100)

{

pwm1=abs(speed1);

if(speed1>0)

{

s1=1;

s2=0;

}

if(speed1==0)

{

s1=1;

s2=1;

}

if(speed1<0)

{

s1=0;

s2=1;

}

}

if(speed2>=-100&&speed2<=100)

{

pwm2=abs(speed2);

if(speed2>0)

{

s3=1;

s4=0;

}

if(speed2==0)

{

s3=1;

s4=1;

}

if(speed2<0)

{

s3=0;

s4=1;

}

}

}

void go_forward(uint speed)

{

s1=1;

s2=0;

s3=1;

s4=0;

pwm1=speed;

pwm2=speed;

}

void go_back(uint speed)

{

s1=0;

s2=1;

s3=0;

s4=1;

pwm1=speed;

pwm2=speed;

}

void stop()

{

s1=1;

s2=1;

s3=1;

s4=1;

pwm1=0;

pwm2=0;

}

void turn_right(uint P1,uint P2) //右转函数

{

s1=1;

s2=0;

s3=0;

s4=1;

pwm1=P1;

pwm2=P2;

}

void turn_left(uint P1,uint P2) //左转函数

{

s1=0;

s2=1;

s3=1;

s4=0;

pwm1=P1;

pwm2=P2;

}

void tracking()

{

if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) //没有检测到

{

go_forward(100);

}

if((LSEN1==1)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) //左一检测到

{

turn_left(40,80); //左转 右轮 》左轮

delay(N);

}

if((LSEN1==0)&&(LSEN2==1)&&(RSEN1==0)&&(RSEN2==0)) //左二检测到

{

turn_left(40,60); //左转 右轮 》左轮

delay(N);

}

if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==1)&&(RSEN2==0)) //右一检测到

{

turn_right(60,4); //右转 左轮 》右轮

delay(N);

}

if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==1)) //右二检测到

{

turn_right(80,40); //右转 左轮 》右轮

delay(N);

}

if((LSEN1==1)&&(LSEN2==1))

{

turn_left(0,100);

delay(1000);

}

if((RSEN1==1)&&(RSEN2==1))

{

turn_right(100,0);

delay(1000);

}

}

void avoidance()

{

}

void init()

{

TMOD=0x02; //timer0 同时配置为模式2, 8自动重装计数模式

TH0=156; //定时器初值设置100us中断

TL0=156;

ET0=1;

EA=1;

TR0=1; //开启总中断

}

void main()

{

init();

while(1)

{

tracking();

}

}

void timer0() interrupt 1 //电机驱动 提供PWM信号

{

if(t<pwm1)

en1=1;

else

en1=0;

if(t<pwm2)

en2=1;

else

en2=0;

t++;

if(t>100)

t=0;

}

(2)51单片机驱动实例扩展阅读

L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。

③ 怎样用51单片机驱动

51单片机主要用于“控制”而不是驱动,单片机的IO口驱动能力是很弱的,最大也就是20毫安,所以一般是单片机提供控制信号,再额外设计驱动电路。

④ 用C51单片机,编写脉冲控制步进电机的驱动器

是什么步进电机啊,有没有驱动器,如果有的话,就直接给脉冲就好了。

⑤ 51单片机如何驱动12个继电器 求电路图

1,使用5V驱动线包的继电器,不需要三极管.线包一端接5V,一端接单片机.输出5时断开,输出0时导通.
2,使用12V或者24V驱动线包的继电器,需要三极管,用9012或者9013就行.线包一端接12/24,一端接NPN的C端(并且C端上拉到12/24).单片机的I/O接NPN的B端,NPN的E端通过小电阻接地.
3,继电器记得加续流二极管.4007就行,
图不知道怎么贴上来.

⑥ 51单片机驱动带有驱动器的步进电机C语言编程

#include<reg51.h>
#defineucharunsignedchar
sbitkey=P3^2;
sbitdir=P0^3;
sbitpluse=P0^2;
sbiten=P0^4;
voiddelay(inta)
{
while(a--);
}
main()
{
uchari;
en=0;
pluse=0;
while(1)
{
if(key==0)
{
delay(1000);
if(key==0);
{
while(key==0);
for(i=0;i<200;i++)
{
dir=0;
en=1;
pluse=~pluse;
delay(800);
}
}
}
dir=1;
en=0;
pluse=0;
}
}

⑦ 51单片机如何驱动42V电机

应该只直流电机,那么单片机控制继电器线包端,从而控制42V电机。

⑧ c51单片机程序实例

#include<reg51.h>
#defineucharunsignedchar
uchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0到9
ucharnum,cnt,disn;
ucharkeyval,disk;
ucharled[]={1,2,3,4};
voiddealdat(uchara)
{
led[0]=0;
led[1]=0;
led[2]=0;
led[3]=0;
led[a]=disk;
}
voiddelay(unsignedinta)
{
unsignedinti,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(num)
{
case0:P2=0x01;break;
case1:P2=0x02;break;
case2:P2=0x04;break;
case3:P2=0x08;break;
default:break;
}
P0=~tab[led[num]];
num++;
num&=0x03;
cnt++;
if(cnt>100)
{
cnt=0;
disn++;
disn%=4;
dealdat(disn);
}
}

ucharkbscan(void)
{
unsignedcharsccode,recode;
P3=0x0f;//发0扫描,列线输入
if((P3&0x0f)!=0x0f)//有键按下
{
// delay(20);//延时去抖动
if((P3&0x0f)!=0x0f)
{
sccode=0xef;//逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return0;//无键按下,返回0
}

voidgetkey(void)
{
unsignedcharkey;
key=kbscan();
if(key==0){keyval=0xff;return;}
switch(key)
{
case0x11:keyval=7;break;
case0x12:keyval=4;break;
case0x14:keyval=1;break;
case0x18:keyval=10;break;
case0x21:keyval=8;break;
case0x22:keyval=5;break;
case0x24:keyval=2;break;
case0x28:keyval=0;break;
case0x41:keyval=9;break;
case0x42:keyval=6;break;
case0x44:keyval=3;break;
case0x48:keyval=11;break;
case0x81:keyval=12;break;
case0x82:keyval=13;break;
case0x84:keyval=14;break;
case0x88:keyval=15;break;
default:keyval=0xff;break;
}
}

main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
if(keyval!=0xff)disk=keyval;
delay(10);
}

}

阅读全文

与51单片机驱动实例相关的资料

热点内容
如何用本机登陆远程服务器地址 浏览:680
黄小鸭解压文具盒 浏览:670
女程序员的转行方法 浏览:881
东风启辰车联网安装文件夹 浏览:524
华为怎么设置app时间锁 浏览:660
后宫app视频怎么下载 浏览:525
如何把图片转换从PDF格式 浏览:259
重写和重载的区别java 浏览:233
expressvpnandroid 浏览:84
储存卡被加密怎么解除 浏览:169
地球怎么压缩直径 浏览:780
金铲铲之战服务器爆满怎么进 浏览:160
同仁堂pdf 浏览:935
如何编译原理课程教材 浏览:730
单片机控制显示器 浏览:776
顶好花app下载怎么找不到 浏览:989
手机命令大全 浏览:808
怎么下邮政银行app 浏览:250
不背单词app单词怎么学习 浏览:481
程序员日常操作搞笑 浏览:382