单片机实验报告格式8

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……
单片机实验报告格式8.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219