第四章 软件部分设计 4.2.2程序流程图
4.2.31602初始化程序
图4—4 1602显示程序流程图
void lcd_1602_init(void) //初始化1602液晶
{ lcd1_602_wr_cmd(0x06); //输入模式为,字符不动,光标右移(设置输入模式)
Lcd_1602_wr_cmd(0x38); //设定两列(功能设置)
Lcd_1602_wr_cmd(0x0c); //开启显示屏,不显示光标,光标所在(显示开/关控制)
Lcd_1602_wr_cmd(0x01); //清屏的指令应该在液晶初始化最后面一行(清显}
20
示)
第四章 软件部分设计 4.3步进电机工作原理及程序设计
4.3.1步进电机工作原理
步进电机由脉冲控制,给它发出一定的脉冲顺序就可以使其转动,改变脉冲顺序,改变转动方向,步进电机正反转驱动时序脉冲如表4-1所示:
表4—1 步进电机脉冲时序表
IN1 1 1 0 0 0 0 0 1 IN2 0 1 1 1 0 0 0 0 IN3 0 0 0 1 1 1 0 0 IN4 0 0 0 0 0 1 1 1
4.3.2步进电机驱动子程序
char count=0,i=0;
unsigned char code1[4]={0x01,0x02,0x04,0x08}; unsigned char code2[4]={0x03,0x06,0x0c,0x09};
unsigned char code3[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; void main() {
MCU_init();
led_flashing_cnt = 1000; timer0_init(); _emi = 1; while(1); }
void timer0_interrupt(void) {
_emi = 0;
21
第四章 软件部分设计 _t0af = 0; if(count==10) {
count=0; PA=code1[i]; if(++i>3)i=0;
} _emi = 1; }
4.4 PWM波形发生子程序的设计
void main(void) {
_acerl = 0; //屏蔽pa7-pa0的A/D输入功能
_cp0c = 0; //屏蔽pa0、pa2、pa3三个I/O口的比较器0输入和出功能 _cp1c = 0; //屏蔽pa5、pc2、pc3三个I/O口的比较器1输入和出功能 _prm2 = 0x02; //设置TP00PS:0 TP0_0 on PA0(屏蔽PA0的I/O功能) _tmpc0 = 0x03; //使能TP0_0(TM0,即PWM输出功能) _tmpc1 = 0; //屏蔽其余的TPm_n功能 _tm0c0 = 0x04; //选择512个TM0时钟周期 _tm0c1 = 0xac; //设置CCRA初始值为80H(128)
_tm0al = 0x80; //简易型TM(TM0 CCRA低字节寄存器)先写低字节
_tm0ah = 0x00; //简易型TM(TM0 CCRA高字节寄存器)先读高字节,再读低字节 _t0on = 1; //启动定时器0(TM0C0寄存器的bit3位)
_t0ae = 1; //定时器0比较器A匹配中断控制位(MFI0寄存器bit1位)
_mf0e = 1; //允许多功能中断0,多功能中断包括TM中断(INTC1寄存器bit1位) _emi = 1; //开总中断(INTC0寄存器bit0位)
}
4.5 AD转换软件设计思路
因HT66FU50单片机内部含有AD转换模块,直接从AD输入引脚输入模拟量数据即可,通过编写AD转换程序即可实现AD转换功能。AD转换时序图如下所示:
22
第四章 软件部分设计
图4—5 AD转换时序图
A/D 转换步骤
1.设置单片机内部寄存器ADCR1中的ADCK2—ADCK0位,选择所需A/D转换的时钟[17]。 2.给ADCR0寄存器中的ADOFF位付值为0,使能A/D转换功能[17]。
3.设置ADCR1寄存器 和ADCR0 寄存器中的ACS4—ACS0 位,即可选择连接至内部A/D 转换器的通道[17]。
4.设置ACERH寄存器 和ACERL 寄存器中的ACE11—ACE0 位,设置哪些引脚规划为A/D 转换输入引脚[17]。
5.设置总中断控制位EMI,使其 置位为“1”, 以及A/D 转换器中断位ADE置位为“1”
[17]
。
6.通过设定ADCR0 寄存器中的START 位从“0”到“1”再回到“0”,开始模数转换
的过程。该位需初始化为“0”[17]。
7.循环查询ADCR0 寄存器中的EOCB位,检查模数转换过程是否完毕。当此位成为逻辑低电平时,表示转换过程已经结束。转换完成后,可读取A/D 数据寄存器ADRL 和ADRH 获得转换后的数值。另一种方法是,若中断使能且堆栈未满,则程序等待A/D 中断发生。AD转换程序详见附录1。
23
第四章 软件部分设计 4.6按键检测及声光报警程序设计
void main() { MCU_init(); LED1 = OFF; LED2 = OFF; LED3 = OFF;
LED4 = ON;
while(1)
开始 扫描键值 N 是否有键按下 Y Y 延时10ms消抖 N 是否有键按下 Y 提取键值 调用键盘 处理子程序 结束 图4—6 按键检测程序流程图 24
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库家庭安防、火灾自动报警系统毕业设计论文 - 图文(6)在线全文阅读。
相关推荐: