}
case 0xeb:num = 7;flag++;flag_1=1; case 0xdb:num = 8;flag++;flag_1=1;
break; return num;
4.2 显示程序设计
显示程序流程图如下图所示,编写的程序经过初始化、清屏进入串口驱动模式,经过接受指令和数据,进行分析读取字符串,然后在显示屏上正确显示出来。下面还给出了部分显示设计的程序。
读取并显示字符串 调用译码子程序 写指令和数据 清屏,串口驱动模式 开始 初始化
检测显示状态正确否? Y 显示成功
图4.2显示程序流程图
N
23
部分显示设计的程序:
#include\
void write(bit start, unsigned char ddata); void sendbyte(unsigned char bbyte); void delaynms(unsigned int di); void lcdinit(void); {
delaynms(100); PSB=0; CS=1;
write(0,0x30); write(0,0x02); write(0,0x06); write(0,0x0c); write(0,0x01); }
void clr_12864()
void write(bit start, unsigned char ddata)
RESET=0; delaynms(1); RESET=1;
if(x==1)
write(0,0x80+y); else if(x==2)
write(0,0x90+y); else if(x==3)
write(0,0x88+y); write(0,0x98+y); //pos=x+y;
//sendbyte(0xf8);delaynms(5);sendbyte(pos);delaynms(2);
24
else if(x==4)
} { }
void print(uchar *str)
while(*str!='\\0') { }
write(1,*str); str++; if(x==1)
write(0,0x80+y); else if(x==2)
write(0,0x90+y); else if(x==3)
write(0,0x88+y); else if(x==4)
write(0,0x98+y); //pos=x+y;
//sendbyte(0xf8);delaynms(5);sendbyte(pos);delaynms(2);
4.3 主控程序设计
主控程序流程图如下图所示,编写的程序经过初始化、通过给定初值,使定时器中断得以控制,从而产生相应的PWM波形,使驱动芯片动作,控制电动机的正转、反转和停止,在这个过程里,速度检测反馈模块会把实时转速反馈给单片机,从而知道与设定转速是否相符,达到转速反馈控制的目的[21]。下面还给出了部分设计的程序。
25
N N 检测转速与给定相符吗? Y Y 运转正常 控制电机实时正转、反转和停止 反馈信号给单片机 产生PWM控制波 定时器中断控制 初始化 开始 给定初值 驱动芯片开始动作
需要重新给定初值吗? 需要重新给定初值吗?需要重新给定初值吗? N N 结束图4.3 主控程序流程图
Y
部分主控程序设计:
#include\#include\
uint counter,sheding,timer,PWM,TS,ZF,PK,keynum,keynum1,keynum2,temp;
26
uchar qian,bai,shi,ge; extern uchar flag; extern bit flag_1;
uchar digit[] ={%uchar table[4]; sbit P01=P0^1; sbit P02=P0^2; void Init_Timer1(void) {
TMOD |= 0x10 | 0x40; TH1=0xFF; TL1=255; ET1=1; TR1=1; } void Init_Timer0(void) {
TMOD |= 0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%6; ET0=1; TR0=1; } void main(void) {
P01=0; P02=0; write(1,digit[ge]); Init_Timer1(); Init_Timer0();
TS=70;
27