main.c
来自「MEGA16单片机程序包2」· C语言 代码 · 共 115 行
C
115 行
#include "main.h"
unsigned char ReadPin(void)
{
unsigned char i;
PORTC = 0XFF; //定义上拉电阻和设置高电平输出
DDRC = 0X00; //为端口引脚定义方向
_NOP(); // 为了同步插入nop 指令
i = PINC; // 读取端口引脚
}
void car_turn(unsigned char mes)
{
switch(mes)
{
/**************************以下为检测障碍物时的执行函数************************************/
case 0x00: forward(); break;
case 0x01: {
back_left();
delay(1000);
for_right();
delay(1000);
}; break;
case 0x02: {
backward();
delay(1000);
for_left();
delay(1000);
}; break;
case 0x03: {
back_left();
delay(1000);
for_right();
delay(1000);
}; break;
case 0x04: {
back_right();
delay(1000);
for_left();
delay(1000);
}; break;
case 0x05: forward(); break;
case 0x06: {
back_right();
delay(1000);
for_left();
delay(1000);
}; break;
case 0x07: {
backward();
delay(1000);
for_left();
delay(1000);
}; break;
/**************************以下为检测黑线时的执行函数************************************/
case 0x30: for_left(); break;
case 0x28: forward(); break;
case 0x18: for_right(); break;
case 0x20: for_left(); break;
case 0x08: for_right(); break;
case 0x38: backward(); break;
default: forward(); break;
}
}
void main()
{
unsigned char mesg,mesc;
unsigned char pin;
init_lcd(); //初始化液晶
LCD_write_string(0,0,"auto car"); //显示信息
LCD_write_string(0,1,"ATMega 16");
while(1)
{
pin = 0x00; //初始化引脚信息
mesg = 0x00;
mesc = 0x00;
pin = ReadPin(); //读取引脚信息
mesc|= pin&0x07; //屏蔽光电传感器干扰,检测障碍物
mesg|= pin&0x38; //屏蔽超声波干扰,检测黑线
if(mesc)
car_turn(mesc);
else
car_turn(mesg);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?