历史上的今天
今天是:2025年12月27日(星期六)
2022年12月27日 | 云台单片机控制源程序
2022-12-27 来源:zhihu
#include "AT89X52.H"
#include "math.h"
sbit NTL = P0^0;//继电器控制,输出
sbit NTR = P0^1;
sbit NTU = P0^2;
sbit NTD = P0^3;
sbit INL = P0^4;//云台运动状况的检测电,输入
sbit INR = P0^5;
sbit INU = P0^6;
sbit IND = P0^7;
sbit LEFC = P2^0;//继电器的通断检测,
sbit LEGC = P2^1;
sbit UPPC = P2^2;
sbit DOWC = P2^3;
sbit SOUND = P2^7;
int counter=0,TimerCnt1Ms=0,LastTime1Ms;
char b,c,d= 0;
char Flag = 0,sc[3];
void Delay(int DelayTimeInMs);
void sendchar();
void checkpinc(char c);
void checkpind(char d);
void show(void);
void judge(char Flag);
void main (void)
{
SCON = 0x52; /* 设置串行口控制寄存器SCON*/
TMOD = 0x21; /* */
TCON = 0x69; /* TCON */
TH1 = 0xf3; /* TH1 */
ET1=1;
EA=1;
b = 0x01;
while( b<0x10 )
{ P0=0xFF;
switch(b)
{case 0x01 :
P0|=0x0F;
NTL=0;
break;
case 0x02 :
P0|=0x0F;
NTR=0;
break;
case 0x04 :
P0|=0x0F;
NTU=0;
break;
case 0x08 :
P0|=0x0F;
NTD=0;
break;
default:
P0=0x0F;
break;
}
Delay(900);
b <<=1;
}
SOUND=1;//蜂鸣器响
P0|=0x0F;
for(;;)
{
show();
judge (Flag);
sendchar();
if (Flag!=0xff)
{
int DelayNum=0;
do
{
SOUND=~SOUND;
DelayNum++;
Delay(1);
}
while( DelayNum<3000);
}
else
Delay(500);
}
}
void show(void)
{
b = 0x01;
c = 0x80;
d = 0x10;
Flag=0x00;
while( b<0x10 )
{ switch(b)
{case 0x01 :
P0|=0x0F;
NTL=0;
break;
case 0x02 :
P0|=0x0F;
NTR=0;
break;
case 0x04 :
P0|=0x0F;
NTU=0;
break;
case 0x08 :
P0|=0x0F;
NTD=0;
break;
}
checkpinc(c);
if (counter>10)
checkpind(d);
b <<=1;
c >>=1;
d <<=1;
counter=0;
}
SOUND=1;
NTL=1;
NTR=1;
NTU=1;
NTD=1;
}
void Delay(int DelayTimeInMs) // Note:DelayTimeInMs<1000
{
int LastTime1Ms = TimerCnt1Ms;
while(abs(TimerCnt1Ms-LastTime1Ms) TimerCnt1Ms=0; } // Timer0 overflow IntNum=10 void timer1_ovf_isr(void) interrupt 3 { unsigned char Second,Minute,Hour = 0; TimerCnt1Ms++; if( TimerCnt1Ms==1000 )//1秒 { TimerCnt1Ms = 0; Second++; if( Second==60 ) { Second = 0; Minute++; if( Minute==60 ) { Minute = 0; Hour++; } } } } void sendchar() { char i; sc[2]=0x0d; if ((Flag&0x0f)>9) sc[0]=65+(Flag&0x0f)-0x0a; else sc[0]=48+(Flag&0x0f); if((Flag&0xf0)>0x90) sc[1]=65+((Flag>>4)&0x0f)-0x0a; else sc[1]=48+((Flag&0xf0)>>4); for (i=0;i<=2;i++) { SBUF=sc[i]; // while (!(USR & 0x40)) { } // USR|=0x40; } } void checkpinc(char c) //C端口检测 { int DelayNum=0; Delay(30); counter=0; do { Delay(2); DelayNum++; // if (PINC&c==c) counter++; } while( DelayNum<15); if (counter>10) Flag |=c; } void checkpind(char d) //D端口检测 { int DelayNum=0; counter=0; do { Delay(2); DelayNum++; // if (d!=(PIND&d)) counter++; } while( DelayNum<30); if (counter>5) Flag |=(d>>4); } void judge (char Flag) { int j,m,n; for (j=0;j<=2;j++) { if (Flag!=0xff) { m=((Flag||0x0f)>>4)||0xf0; n=Flag||0xf0; if ((m-n)<=0) {} else { if ((((~n)||0xf3)==0xff)|((n||0xf3)==0xff)) { } else { P0=((~n)||0xf3); Delay(200); P0=0x8f; } if ((((~n)||0xfc)==0xff)|((n||0xfc)==0xff)) { } else { P0=((~n)||0xfc); Delay(200); P0=0x8f; } } Delay(5); show(); } else j=3; P0=0x8f; } } 电原理图 控制板

下一篇:C51编程中几个重要模块
史海拾趣
|
.net cf 没有GetDelegateForFunctionPointer函数 只有Marshal.GetFunctionPointerForDelegate函数 我要调用一个dll,该dll的函数参数是指针 在.net上可以这样调用: DelegateS myS = Marshal.GetDelegateForFunctionPointer(   ...… 查看全部问答> |
|
新手提问89c51中断系统IE,IP寄存器啥区别?怎么编程使用 如题,最近我在学习用KEIL C编写程序时对单片机里中断系统里寄存器IE和IP的功能很不了解,不知道中断源的优先级到底该设到哪各寄存器里,于是感到很晕,心里犯嘀咕:一个寄存器里怎么能把所有中断源优先次序排个序?!!由于对硬件不了解,就翻了几 ...… 查看全部问答> |
|
昨晚在做LED点阵无意中拍摄到的,呵呵,实际不是这样。 为了显示上面那几个字,我采用手工绘图方法绘出来。 显示代码如下: unsigned char code Display_Font[64][16]= { //1 0x03,0x03,0x03,0x01,0x03,0x03,0x03,0x03, ...… 查看全部问答> |
|
请问: 我用的是2440CAMERA接口,驱动只完成了将数据存到帧存储器的工作,要想在WINCE上将视频,或者是一张图片显示出来,要做什么工作呢? 我的理解是LCD会不断的从帧缓冲里将数据输出到屏上,所以用memcpy将buffer_rgb的数据 ...… 查看全部问答> |
|
关于NT内核模式中的进程问题,一直都没人解决,不知大牛们对此有何看法?? 根据IRP既然可以得到宿主进程的信息,如名字和路径,那么能否得到宿主进程的ID呢? 是有代码可以得到IRP的进程ID的,得到的是PEPROCESS ProcessID,那么这个进程ID和用户模式的任务管理器中看到的进程ID有什么关系??它们是同一个东西吗???内核模 ...… 查看全部问答> |
|
不敢说项目中就会用它,但是可以多一种方案多一个选择。 完成后分享过程中的点滴。 [ 本帖最后由 sblpp 于 2010-10-13 18:55 编辑 ]… 查看全部问答> |
|
IAR编译器下本来的工程应该是Debug,Release,但是ST给的Demo中的 TM3210E-EVAL如何产生的?属于Debug呢还是Release呢?… 查看全部问答> |
|
我刚开始学430在编译下面代码的时候,IAR报错 Error[Pe020]: identifier \"P1REN\" is undefined E:\\workspace\\main.c 12 #include \"io430.h\"#include \"intrinsics.h\" int main( void ){ // Stop watchdog timer to prevent time out ...… 查看全部问答> |
|
分享目前最详细最好的SD卡学习视频教程,阿迪的《MMC/SD卡入门到精通》 比较不错的SD卡/MMC卡学习视频教程,AVR单片机驱动的,在线稍微没有那么清晰东西比较大,没有上传,大家先网上看看在线的,有时间了传清晰版版本优酷网在线观看地址:第一集:http://v.youku.com/v_playlist/f5066832o1p1.html第二集:http://v.you ...… 查看全部问答> |




