基于单片机预费电表控制系统(proteus仿真+源程序)

news/2024/11/24 9:51:22/

一、系统方案
1、本设计采用这51单片机作为主控器。
2、采集电量值送到液晶1602显示。
3、按键设置预设值,实际使用电量超过设置,蜂鸣器报警。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
void LCD_init(void)
{
delay_n10us(10);
LCD_write_command(0x38);//设置8位格式,2行,5x7
delay_n10us(10); LCD_write_command(0x0c);//开显示,关光标,不闪烁
delay_n10us(10); LCD_write_command(0x06);//设定输入方式,增量不移位
delay_n10us(10); LCD_write_command(0x01);//清除屏幕显示
delay_n10us(100); //延时清屏,延时函数,延时约n个10us
}

2、液晶显示程序
void LCD_write_command(uchar dat)
{
delay_n10us(10);
LCD_RS=0; //指令
LCD_RW=0; //写入
LCD_E=1; //允许
LCD_DB=dat; delay_n10us(10); //实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
LCD_E=0; delay_n10us(10); //实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
}

void LCD_write_data(uchar dat)
{
delay_n10us(10);
LCD_RS=1; //数据
LCD_RW=0; //写入
LCD_E=1; //允许
LCD_DB=dat; delay_n10us(10);
LCD_E=0; delay_n10us(10);
}

void LCD_disp_char(uchar x,uchar y,uchar dat)
{
uchar address;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
LCD_write_data(dat);
}

void LCD_disp_str(uchar x,uchar y,uchar *str)
{
uchar address;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
while(*str!=‘\0’)
{
LCD_write_data(*str);
str++;
}
}

3、按键程序
void keyscan()
{

if(K1==0)//设定设定使用量+
{if(flag_KEY==1)	//按键只响应1次{flag_KEY=0;if(Set<9900)	Set=Set+10;}
}if(K2==0)//设定设定使用量-
{if(flag_KEY==1)	//按键只响应1次{flag_KEY=0;if(Set>10)	Set=Set-10;}
}//全部按键松开
if(K1&&K2)

{
flag_KEY=1;
}

}

4、核心算法程序
/-------------------------------------
主函数
---------------------------------------
/
void main(void)
{
TIM0init();//定时器配置
EX0=1;//打开外部中断0
IT0=1;//下降沿触发

LCD_init();//LCD初始化              
LCD_disp_str(0,1," Check:000.0Kwh "); //显示
LCD_disp_str(0,2,"000.0  000.0yuan"); //显示 设定使用量
while(1)
{keyscan(); //按键扫描Check();//测速程序DisPlay();//LCD显示
}

}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述


http://www.ppmy.cn/news/1238308.html

相关文章

LeetCode.283移动零(双指针)

LeetCode.283移动零 1.问题描述2.解题思路3.代码 1.问题描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1…

安装compiler version 5

这个compiler version5 在我的资源里面可以免费下载&#xff1b; 另外这个东西还需要安装&#xff0c;安装教程在这里&#xff1a;Keil最新版保姆教程&#xff08;解决缺少V5编译器问题&#xff09; - 哔哩哔哩 (bilibili.com) 看吧安装好了year

中伟视界:AI分析盒子——ai算法中通过什么方法做到一个对象只报警一次,为每个对象生成一个唯一ID

在AI算法中&#xff0c;通过特定的方法实现对象只报警一次&#xff0c;为每个对象生成唯一ID是非常重要的技术问题。随着人工智能技术的快速发展&#xff0c;AI算法在各个领域得到了广泛应用&#xff0c;如安防监控、智能交通、自动驾驶等。而在这些应用场景中&#xff0c;需要…

二、sql手工注入

一、SQL注入的本质 解释&#xff1a;想要进行sql注入&#xff0c;肯定要发现注入点&#xff0c;一般简单的sql注入通过下面两种方式判断就能发现是否存在sql注入漏洞 1.字符型 注意&#xff1a;字符型注入可能为或" 查询语句&#xff1a; select * from student where…

03.实现

实现 条款26&#xff1a;尽可能延后变量定义式的出现时间 条款27&#xff1a;尽量少做转型动作 条款28&#xff1a;避免返回handles指向对象内部成分 在C中&#xff0c;handles是指一个指向对象的指针或引用&#xff0c;用于访问该对象的成员函数或成员变量。 而条款28所说…

笔记:内网渗透流程之信息收集

信息收集 首先&#xff0c;收集目标内网的信息&#xff0c;包括子网结构、域名信息、IP地址范围、开放的端口和服务等。这包括通过主动扫描和渗透测试工具收集信息&#xff0c;以及利用公开的信息源进行信息搜集。 本机信息收集 查看系统配置信息 查看系统详细信息&#xf…

多模态——使用stable-video-diffusion将图片生成视频

多模态——使用stable-video-diffusion将图片生成视频 0. 内容简介1. 运行环境2. 模型下载3. 代码梳理3.1 修改yaml文件中的svd路径3.2 修改DeepFloyDataFiltering的vit路径3.3 修改open_clip的clip路径3.4 代码总体结构 4. 资源消耗5. 效果预览 0. 内容简介 近期&#xff0c;…

jQuery 第十章(jQuery AJAX以及jQuery和其他框架兼容)

文章目录 前言什么是 AJAX&#xff1f;jQuery - AJAX load() 方法jQuery load() 方法 jQuery - AJAX get() 和 post() 方法HTTP 请求&#xff1a;GET vs. POSTjQuery $.get() 方法jQuery $.post() 方法 jQuery 与其他框架兼容jQuery 和其他 JavaScript 框架jQuery noConflict()…