开始 初始化 开始采集 发送通道地址 ADC是否忙?N Y启动AD转换
信号采集流程图
第 37 页
NAD转换完成?Y结束
开始LCD初始化设置LCD设置为基本指令动作设置显示数据地址Y读状态忙?N写入显示数据
N数据是否写完?Y结束LCD显示流程图
第 38 页
开始设置端口及初始化 设置中断 光信号采 集 采集结果输入至L298 芯片 调整步进电机位置 结束
步进电机控制流程图
第 39 页
附录四 仿真程序 #include \
int delay(); void inti_lcd(); void show_lcd(int); void cmd_wr(); void ShowState();
void clock(unsigned int Delay) ; void DoSpeed(); //计算速度 //正转值
#define RIGHT_RUN 1 //反转值
#define LEFT_RUN 0 sbit RS=0xA0; sbit RW=0xA1; sbit E=0xA2;
char SpeedChar[]=\char StateChar[]=\char STATE_CW[]=\char STATE_CCW[]=\char SPEED[3]=\
unsigned int RunSpeed=50; //速度
unsigned char RunState=RIGHT_RUN; //运行状态 main() { /*定时器设置*/ TMOD=0x66; //定时器0,1都为计数方式;方式2; EA=1; //开中断 TH0=0xff; //定时器0初值FFH; TL0=0xff; ET0=1; TR0=1; TH1=0xff; //定时器1初值FFH;
第 40 页
TL1=0xff; ET1=1; TR1=1; IT0=1; //脉冲方式 EX0=1; //开外部中断0:加速 IT1=1; //脉冲方式 EX1=1; //开外部中断1:减速
inti_lcd();
DoSpeed(); ShowState(); while(1) {
clock(RunSpeed); P0_1=P0_1^0x01; } }
//定时器0中断程序:正转 void t_0(void) interrupt 1 { RunState=RIGHT_RUN; P0_0=1; P1=0x01; cmd_wr(); ShowState(); }
//定时器1中断:反转 void t_1(void) interrupt 3 { RunState=LEFT_RUN; P0_0=0; P1=0x01; cmd_wr();
第 41 页