/*
# 简单的介绍
程序制作者: 蓬莱山望夜
制作者QQ: 3486805897
注意: 该程序仅仅作为交流学习使用,禁止商用(不会真的会用我的Bug吧……),使用请标注制作者!
版本:V1.0 2022-4-9 675H Program Size: data=63.0 xdata=0 code=2335
# 另外想说的话
真的非常开心能完完整整的做完单片机的毕业设计程序!!记得在2020年的时候,我和我的室友参加了强哥的所谓的 “社团” (其实是莫名奇妙进来的)。在他的社团里面,我亲眼看到了单片机的样子,并且利用了曾经所学的知识启动了它!!那时真的特别的开心。之后,我感觉单片机好弱啊,正好那个时候,强哥问我要不要学树莓派,我说好呀!那一段时间,应该算是我对嵌入式开发的启蒙了吧……
后来大三的时候,老师让我们选择毕业设计,毕业设计嘛,有三条路:单片机、PLC、CAD新型设计。出于对嵌入式开发的喜爱,我选择了单片机!当时我对python十分的感兴趣,但是可以运行python的树莓派太贵了,而且开发套件成本高(树莓派一套开发套件 300 多,单片机才 100 多)。
为什么会选择拿单片机测量酸碱呢,因为我前女友是化工学院的,把酸碱和自动控制结合在一起是一件多美的事情啊!但是……害,祝她能找到更好的~
但是,做单片机的路是很难的,不仅要学C语言,还要了解数电,这些在我的路上都是十分大的阻碍啊!!但是,我可以学习嘛!我相信我可以的喵!!
最后的毕业设计的时候,我看到好多人都比我提前交了毕业设计,有些人是买的,有些人是买了套件直接拼装然后程序一股脑下载进来就可以了。看到周围一点一点做单片机的只有我一个,我的心里压力还很大的……
但是,至少现在,我程序写完了!!!原理图写完了,并且是直播写完的!!而且原理图是可以使用的!我突然有了信心,我可以做完的!
那么接下来,就是面包板的组装和焊接了!我相信我可以的喵!!
2022年4月9日 21:55
*/
#include <reg52.h>
/*
单片机的输入定义的部分
*/
sbit button1 = P3^0; //按钮1
sbit button2 = P3^1; //按钮2
sbit button3 = P3^2; //按钮3
sbit button4 = P3^3; //按钮4
sbit led_red = P2^6; //led 红灯
sbit led_green = P2^7; //led 绿灯
sbit buzzer = P3^7; //蜂鸣器
sbit seg_contrl_1 = P3^4; //数码管控制管脚 1
sbit seg_contrl_2 = P3^5; //数码管控制管脚 2
sbit seg_contrl_3 = P3^6; //数码管控制管脚 3
sbit adc_clk = P2^0; //数模转换 —— 时钟
sbit adc_sat = P2^1; //数模转换 —— 开始转换
sbit adc_eoc = P2^2; //数模转换 —— 转换完成
sbit adc_oe = P2^3; //数模转换 —— 导出数据
sbit adc_ale = P2^4; //数模转换 —— 输入锁存
sbit adc_out_0 = P1^0; //adc 管脚0
sbit adc_out_1 = P1^1; //adc 管脚1
sbit adc_out_2 = P1^2; //adc 管脚2
sbit adc_out_3 = P1^3; //adc 管脚3
sbit adc_out_4 = P1^4; //adc 管脚4
sbit adc_out_5 = P1^5; //adc 管脚5
sbit adc_out_6 = P1^6; //adc 管脚6
sbit adc_out_7 = P1^7; //adc 管脚7
#define seg_input_num P0 //数码管输入
/*
字符定义部分
*/
typedef unsigned char u8;
typedef unsigned int u16;
/*
变量定义部分
*/
unsigned int PH_value = 7; // 定义报警值
unsigned char mode1_exit = 0; // 模式1退出
unsigned char mode2_exit = 0; // 模式2退出
unsigned char mode3_exit = 0; // 模式3退出
unsigned int adc_translate_result; // Adc_output 输出变量
unsigned int adc_num_0 , adc_num_1 , adc_num_2 , adc_num_3 , adc_num_4 , adc_num_5 , adc_num_6 , adc_num_7; //位输出函数
double PH_num_double; // PH值小数输出
unsigned int PH_num_int; // PH值整数输出
unsigned int PH_num_show; // 酸碱模块输出循环值
unsigned char PH_alarm_mode; // 报警模式
/*
延时函数
*/
void Timedelay(u16 Timedelay_inputTime)
{
while(Timedelay_inputTime--)
{
}
}
/*
模数转换输出函数
*/
int Adc_output()
{
// 开始调教AD芯片
adc_oe = 0;
adc_clk = 0;
Timedelay(10);
adc_clk = 1;
adc_ale = 1;
Timedelay(10);
adc_clk = 0;
adc_sat = 1;
Timedelay(10);
adc_clk = 1;
adc_ale = 0;
Timedelay(10);
adc_clk = 0;
adc_sat = 0;
Timedelay(10);
// 等待模数转换芯片输出结果
while(adc_eoc == 0)
{
adc_clk = 1;
Timedelay(10);
adc_clk = 0;
Timedelay(10);
}
// 开始输出
adc_oe = 1;
// 第0位转换
if(adc_out_0 == 0)
{
adc_num_0 = 0;
}
else
{
adc_num_0 = 1;
}
// 第1位转换
if(adc_out_1 == 0)
{
adc_num_1 = 0;
}
else
{
adc_num_1 = 1;
}
// 第2位转换
if(adc_out_2 == 0)
{
adc_num_2 = 0;
}
else
{
adc_num_2 = 1;
}
// 第3位转换
if(adc_out_3 == 0)
{
adc_num_3 = 0;
}
else
{
adc_num_3 = 1;
}
// 第4位转换
if(adc_out_4 == 0)
{
adc_num_4 = 0;
}
else
{
adc_num_4 = 1;
}
// 第5位转换
if(adc_out_5 == 0)
{
adc_num_5 = 0;
}
else
{
adc_num_5 = 1;
}
// 第6位转换
if(adc_out_6 == 0)
{
adc_num_6 = 0;
}
else
{
adc_num_6 = 1;
}
// 第7位转换
if(adc_out_7 == 0)
{
adc_num_7 = 0;
}
else
{
adc_num_7 = 1;
}
// 将转换得到的结果按照权重求和
adc_translate_result = adc_num_0 * 128 + adc_num_1 * 64 + adc_num_2 * 32 + adc_num_3 * 16 + adc_num_4 * 8 + adc_num_5 * 4 + adc_num_6 * 2 + adc_num_7 * 1;
adc_clk = 1;
Timedelay(10);
// 输出PH值
return adc_translate_result;
}
/*
按键消抖函数
*/
int Buttoninputget()
{
// 获取按钮 1 的值
if (button1 == 0)
{
Timedelay(2000);
if (button1 == 0)
{
while(1)
{
if (button1 == 1)
{
return 1;
}
}
}
}
// 获取按钮 2 的值
else if (button2 == 0)
{
Timedelay(2000);
if (button2 == 0)
{
while(1)
{
if (button2 == 1)
{
return 2;
}
}
}
}
// 获取按钮 3 的值
else if(button3 == 0)
{
Timedelay(2000);
if (button3 == 0)
{
while(1)
{
if (button3 == 1)
{
return 3;
}
}
}
}
// 检测到按钮没按
return 0;
}
/*
显示单片机的值
*/
void Led_show(u16 led_show_num_location , u16 Led_show_input_num)
{
u8 numberList[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
seg_input_num = numberList[Led_show_input_num];
switch (led_show_num_location)
{
// 位置1
case 1:
seg_contrl_1 = 0;
seg_contrl_2 = 0;
seg_contrl_3 = 1;
break;
// 位置 2
case 2:
seg_contrl_1 = 1;
seg_contrl_2 = 0;
seg_contrl_3 = 1;
break;
// 位置 3
case 3:
seg_contrl_1 = 0;
seg_contrl_2 = 1;
seg_contrl_3 = 1;
break;
// 位置
没有合适的资源?快使用搜索试试~ 我知道了~
毕业设计 基于STC89C52单片机的程序+全部资料+详细文档(高分项目).zip
共13个文件
zip:1个
uvproj:1个
uvopt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 50 浏览量
2024-05-11
18:00:21
上传
评论
收藏 45KB ZIP 举报
温馨提示
【资源说明】 基于STC89C52单片机的毕业设计 程序+全部资料+详细文档(高分项目).zip基于STC89C52单片机的毕业设计 程序+全部资料+详细文档(高分项目).zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于STC89C52单片机的毕业设计 程序+全部资料+详细文档(高分项目).zip (13个子文件)
详细文档.md 3KB
171265889347208773632.zip 416B
PH_value-main
graduate_project
ph_project.c 15KB
ph_project.hex 7KB
ph_project.uvopt 54KB
ph_project.lnp 52B
ph_project.plg 368B
ph_project 15KB
ph_project.uvproj 13KB
ph_project.OBJ 16KB
ph_project.LST 27KB
ph_project.M51 25KB
ph_project_uvopt.bak 54KB
共 13 条
- 1
资源评论
不走小道
- 粉丝: 3343
- 资源: 5059
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- sensors-18-03721.pdf
- Facebook.apk
- 推荐一款JTools的call-this-method插件
- json的合法基色来自红包东i请各位
- 项目采用YOLO V4算法模型进行目标检测,使用Deep SORT目标跟踪算法 .zip
- 针对实时视频流和静态图像实现的对象检测和跟踪算法 .zip
- 部署 yolox 算法使用 deepstream.zip
- 基于webmagic、springboot和mybatis的MagicToe Java爬虫设计源码
- 通过实时流协议 (RTSP) 使用 Yolo、OpenCV 和 Python 进行深度学习的对象检测.zip
- 基于Python和HTML的tb商品列表查询分析设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功