单片机实验报告格式8
时间:2025-05-06
时间:2025-05-06
洛阳理工学院实验报告
}
}
2) Control.c文件 #include <reg51.h> sbit P16=P1^6; sbit P17=P1^7; unsigned char ad();
void print(char name, unsigned int value); extern unsigned char param_value[2]; extern char menu_status;
void control_thread() { {
//第1步:A/D转换
unsigned char value = ad(); //第2步:根据采样值控制LED灯 if (value > param_value[1]) {
P16 = 0; P17 = 1;
} else if (value <= param_value[1] && value >= param_value[0])
P16 = 0; P17 = 0;
} else { }
//第3步:如果菜单是关闭的,显示采集到的数值 if (menu_status == 1) {
P16 = 1; P17 = 0;
}
}
print(' ', value);
3) Menu.c文件 #define MENU_ON #define MENU_OFF #define MENU_NUM #define MENU_MAX #define MENU_MIN
unsigned char param_value[] = {100, 150}; unsigned char menu_status = MENU_OFF; char _menu_name[] = {'L','H'}; 号
//参数名的符
1 2 999 0
unsigned char _menu_value[] = {0,0}; 参数数组
unsigned char _menu_idx = 0;
char get_key();
//供显示用的
//参数序号
void print(char name, unsigned int value);
void menu_thread(void) {
char i = 0;
char key = get_key();
if (menu_status == MENU_OFF) {
//当前菜单为关闭状态时 if (key == 0) {
被按下
//若按键0已
为打开状态
menu_status = MENU_ON; //置当前菜单
}
_menu_idx = 0; //设置参数序号0
//将所有参数当前值取出,送入供显示的参数数组中 for (i = 0 ; i < MENU_NUM ; i++) { }
_menu_value[i] = param_value[i];
} else {
//如果当前菜单为打开状态,则进行以下操作: if (key == 0) {
//若按键0按下,则不保存键值,仅切换到下一个参数 if (++_menu_idx == MENU_NUM) {
//判断是否
所有参数都循环到了
完成,设置菜单关闭状态
}
menu_status = MENU_OFF; //若已循环
} else if (key == 1) {
//若按键1按下,则保存键值,并切换到下一个参数 param_value[_menu_idx] = _menu_value[_menu_idx]; if (++_menu_idx == MENU_NUM) { }
menu_status = MENU_OFF;
} else if (key == 2) {
//若按键2按下,则参数值加10 _menu_value[_menu_idx] += 10;
if (_menu_value[_menu_idx] > MENU_MAX) {
_menu_value[_menu_idx] = MENU_MAX;
}
}
}
} else if (key == 3) { }
//若按键3按下,则参数值减10 _menu_value[_menu_idx] -= 10;
if (_menu_value[_menu_idx] < MENU_MIN) { }
_menu_value[_menu_idx] = MENU_MIN;
if (menu_status == MENU_ON) { }
//菜单状态为开时,显示参数值
print(_menu_name[_menu_idx], _menu_value[_menu_idx]);
4) Keybodrd.c文件 #include <reg51.h>
#define CHECK_KEY_DOWN 键压下阶段标志
#define CHECK_KEY_UP 键抬起阶段标志 #define KEY_UP #define KEY_DOWN
sbit _p33 = P3^3; sbit _p34 = P3^4; sbit _p35 = P3^5;
//处在检测按
1 //处在检测按
0 1
//按键抬起标志
//按键压下标志
sbit _p36 = P3^6;
char _key_status = CHECK_KEY_DOWN; 为检测压下阶段) char _key_idx = 0;
void serial(char byte);
char _check_key(unsigned char _key_idx) { serial(~(0x01<<_key_idx)); 换成扫描码后输出
回值 }
char get_key(void) { -1
char result = -1;
if (_p36 == 0) {
//检查按键状态 //将待查按键键码转
//按键检测状态(初值
//按键序号
//根据P36状态决定返
return KEY_DOWN;
} else { }
return KEY_UP;
//无键按下时键值为
if (_key_status == CHECK_KEY_DOWN) { 于检查压下阶段,进行以下操作
//如果当前处
if (_check_key(_key_idx) == KEY_DOWN) { 描键的状态,若为压下标志则 设置为抬起
//判断当前扫
_key_status = CHECK_KEY_UP; //将检查阶段标志
} else { 志设置为压下
//否则,将检查阶段标
if (++_key_idx == 4) { 个按键已经轮流扫描一遍 号设为0
_key_idx = 0;
//判断是否4
//是,则将待扫描按键
}
}
} else if (_key_status == CHECK_KEY_UP) { //如果当前处于检查抬起阶段,进行以下操作
if (_check_key(_key_idx) == KEY_UP) { 描键的状态,若为抬起标志则
result = _key_idx;
//判断当前扫
//键值输出
//按键检查阶
段标志改为压下
_key_status = CHECK_KEY_DOWN;
if (++_key_idx == 4) { 个按键已经轮流扫描一遍 号设为0 }
5) Led.c文件 #include <reg51.h>
}
return result;
_key_idx = 0;
//判断是否4
//是,则将待扫描按键
}
}
char code map1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; char code map2[]={0x00,0x76,0x38}; char _convert(char c){ if(c==' ')
return map2[0];
}
return map2[1]; else if(c=='L') return map2[2]; else if (c>='0'&&c<='9') return map1[c-'0']; return 0;
void delay(){ int i=0,j=0; for(i=0;i<10;i++){ for(j=0;j<10;j++){ } }
void print(char name, unsigned int value) {
char buf[6]; char i = 5;
}
for (i = 5 ; i > 1 ; i--) { } i--;
buf[i] = '0' + value % 10; value /= 10; if (value == 0) { }
break;
}
buf[0] = name;
for (i = 0 ;i < 6 ;i++) {
buf[i] = ' ';
P1 &= 0xC0; }
6) Ad.c文件 #include <reg51.h>
sbit P32 = P3^2; sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = P3^5; sbit P37 = P3^7;
< …… 此处隐藏:2341字,全部文档内容请下载后查看。喜欢就下载吧 ……上一篇:七年级数学期末复习计划
下一篇:初一新课标第五、六单元复习