当前位置: 首页 > wzjs >正文

如何增加网站会员高端网咖

如何增加网站会员,高端网咖,学校网站建设自查报告,五是做好纪检监察网站建设在工业控制、智能家居等领域,串口屏作为人机交互的重要组件被广泛应用。理解串口屏的工作原理,最好的方式是从基础的 C 语言编程入手。本文将通过实现一个简单的计算器,逐步展示如何从传统 C 语言程序过渡到适合串口屏开发的代码结构。 目录…

在工业控制、智能家居等领域,串口屏作为人机交互的重要组件被广泛应用。理解串口屏的工作原理,最好的方式是从基础的 C 语言编程入手。本文将通过实现一个简单的计算器,逐步展示如何从传统 C 语言程序过渡到适合串口屏开发的代码结构。

目录

一、基础计算器实现

二、状态机设计:模拟串口屏交互模式

三、串口屏实战:淘晶驰代码解析

四、总结


一、基础计算器实现

让我们从最基本的 C 语言计算器开始:

#include <stdio.h>int main() {double n0, n1;  // n0:当前结果, n1:中间值char t1;        // 运算符printf("=== 简易计算器 ===\n");// 输入第一个数字printf("请输入第一个数字: ");scanf("%lf", &n0);// 输入运算符printf("请输入运算符 (+, -, *, /): ");while (getchar() != '\n'); // 清除缓冲区scanf("%c", &t1);// 输入第二个数字printf("请输入第二个数字: ");scanf("%lf", &n1);// 根据运算符计算结果switch (t1) {case '+':n0 += n1; break;case '-':n0 -= n1; break;case '*':n0 *= n1; break;case '/':if (n1 == 0) {printf("错误:除数不能为零!\n");return 1;}n0 /= n1; break;default:printf("错误:不支持的运算符!\n");return 1;}// 输出结果printf("计算结果: %.2f\n", n0);return 0;
}

运行结果如下:

二、状态机设计:模拟串口屏交互模式

串口屏的交互模式与传统控制台程序不同,更接近计算器的操作方式。下面我们实现一个支持连续计算的版本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>// 全局变量定义
double n0 = 0;        // 当前输入值/计算结果
double n1 = 0;        // 中间计算结果存储
char t1[2] = "";      // 当前运算符存储
char t2[2] = "";      // 输入状态标记// 初始化计算器状态
void initCalculator() {n0 = 0;n1 = 0;strcpy(t1, "");strcpy(t2, "");printf("计算器已初始化\n");
}// 数字按钮处理函数
void handleDigit(int digit) {if (strcmp(t2, "*") == 0) {strcpy(t2, "");n0 = digit;} else {n0 = n0 * 10 + digit;}printf("当前值: %.2f\n", n0);
}// 运算符按钮处理函数
void handleOperator(char op) {strcpy(t2, "*");if (strcmp(t1, "") == 0) {n1 = n0;} else if (strcmp(t1, "+") == 0) {n1 = n1 + n0;n0 = n1;} else if (strcmp(t1, "-") == 0) {n1 = n1 - n0;n0 = n1;} else if (strcmp(t1, "*") == 0) {n1 = n1 * n0;n0 = n1;} else if (strcmp(t1, "/") == 0) {if (n0 != 0) {n1 = n1 / n0;n0 = n1;} else {printf("错误: 除数不能为0\n");}}t1[0] = op;t1[1] = '\0';printf("当前运算符: %s\n", t1);
}// 等号按钮处理函数
void handleEquals() {strcpy(t2, "*");if (strcmp(t1, "") != 0) {if (strcmp(t1, "+") == 0) {n1 = n1 + n0;} else if (strcmp(t1, "-") == 0) {n1 = n1 - n0;} else if (strcmp(t1, "*") == 0) {n1 = n1 * n0;} else if (strcmp(t1, "/") == 0) {if (n0 != 0) {n1 = n1 / n0;} else {printf("错误: 除数不能为0\n");}}n0 = n1;printf("计算结果: %.2f\n", n0);}
}// 清零按钮处理函数
void handleClear() {initCalculator();
}// 主函数 - 支持直接输入数字和运算符
int main() {initCalculator();char input[20];double number;char op;printf("计算器已启动\n");printf("输入格式: 数字 -> 运算符(+,-,*,/,=) -> 数字 -> ...\n");printf("输入 'c' 清除计算器,输入 'q' 退出\n");while (1) {printf("\n请输入: ");scanf("%19s", input);// 处理命令if (strlen(input) == 1) {op = input[0];if (isdigit(op)) {handleDigit(op - '0');} else if (op == '+' || op == '-' || op == '*' || op == '/') {handleOperator(op);} else if (op == '=') {handleEquals();} else if (op == 'c' || op == 'C') {handleClear();} else if (op == 'q' || op == 'Q') {break;} else {printf("无效输入,请重试\n");}} // 处理多位数字else if (sscanf(input, "%lf", &number) == 1) {// 检查是否是合法的数字int i;for (i = 0; input[i] != '\0'; i++) {if (!isdigit(input[i]) && input[i] != '.') {break;}}if (input[i] == '\0') {// 如果是新输入,直接设置值if (strcmp(t2, "*") == 0) {strcpy(t2, "");n0 = number;} // 否则视为错误输入(不能追加多位数字)else {printf("错误: 只能逐位输入数字\n");continue;}printf("当前值: %.2f\n", n0);} else {printf("无效输入,请重试\n");}} else {printf("无效输入,请重试\n");}}return 0;
}

运行结果如下:

三、串口屏实战:淘晶驰代码解析

以淘晶驰串口屏为例,其开发逻辑与上述 C 语言状态机高度对应,核心差异在于代码要写到控件下面的弹起事件

 淘晶驰串口屏系列文章:

001:串口屏介绍

002:淘晶驰USART HMI 上位机软件安装

003:淘晶驰串口屏开发初体验:10分钟实现简易加法器

004:淘晶驰串口屏:复刻苹果计算器,掌握按键控件的切图使用

005:淘晶驰串口屏:复刻苹果计算器,掌握按键控件的切图使用-2个图片

006:淘晶驰串口屏:复刻苹果计算器,掌握切图控件的使用

007:淘晶驰串口屏:复刻苹果计算器,了解代码编写

以下是计算器界面的关键实现:

/*-----------------------------------------

计算器采用双变量存储模式 

n0.val - 当前输入值/计算结果

n1.val - 中间计算结果存储

t1.txt - 当前运算符存储(+、-、*、/)

t2.txt - 输入状态标记("*"表示新输入开始)

// 数字按钮通用逻辑:

// 如果t2标记为"*"(表示新输入开始),则直接设置当前值

// 否则将当前值追加到已有数字后(通过*10+新数字实现)

四、总结

本文以 C 语言编程为切入点,系统展示了从传统计算器开发到串口屏交互逻辑的进阶过程,希望对您有帮助。关注我,解锁更多实战技巧!


文章转载自:

http://U5vPRFOE.hhxpL.cn
http://lNCTr1cU.hhxpL.cn
http://6eyENvp9.hhxpL.cn
http://JHRADwgd.hhxpL.cn
http://mZ916Jp0.hhxpL.cn
http://4F0uYwIK.hhxpL.cn
http://Zq4e9UV9.hhxpL.cn
http://84RmYdNz.hhxpL.cn
http://ugq1A7Mj.hhxpL.cn
http://bFywMpX5.hhxpL.cn
http://RZP7uCgB.hhxpL.cn
http://JVJcEX1F.hhxpL.cn
http://Ytp42twY.hhxpL.cn
http://iFAGk9e3.hhxpL.cn
http://j3IaklPZ.hhxpL.cn
http://8NWoBCYZ.hhxpL.cn
http://dY43qUl6.hhxpL.cn
http://2fBaOonh.hhxpL.cn
http://A6x5dYln.hhxpL.cn
http://MN0YuUsz.hhxpL.cn
http://FuyHYoqd.hhxpL.cn
http://YJmBrGCp.hhxpL.cn
http://rgVtuMnh.hhxpL.cn
http://Ucj9Kql8.hhxpL.cn
http://39HT0TLL.hhxpL.cn
http://7mwgEfoB.hhxpL.cn
http://2OdhwrrB.hhxpL.cn
http://Ajd1y7LX.hhxpL.cn
http://AicYNliQ.hhxpL.cn
http://A9kutMI4.hhxpL.cn
http://www.dtcms.com/wzjs/672113.html

相关文章:

  • 色彩设计网站什么是网络社交平台
  • 企业网站建设介绍万户网站建设
  • 青岛网站建设有哪些公司网站多久才会被收录
  • ppt怎么做网站杭州强龙网站建设电话
  • 学做网站论坛第六节网页设计期末考试作品
  • 深圳手机网站建设哪家好单网页网站 企业
  • win本地网站建设asp.net网站开发实例视频教程
  • 下载ps软件免费版下载安装网站内部seo
  • 广州seo网站多少钱一站式服务门户
  • 钓鱼网站查询系统做淘宝网站需要
  • 租用外国服务器网站网站建设wordpress主题安装教程
  • 网站设计赏析中廉建设网站
  • 苏州网站建设外贸重庆网站seo优化
  • 网站网站建设cnn头条新闻
  • 广东推广网络郑州seo推广
  • 海外免费网站推广有哪些网站前台和后台设计
  • 什么网站教你做早点济南市住房建设网站
  • 鲁山网站建设便利的龙岗网站设计
  • 平阳县城乡规划建设局网站山西网站建设方案公司
  • 分析对手网站公司网站需求
  • 房产网站加盟河南国控建设集团网站
  • 廊坊网站建设价格wordpress图片二级域名
  • 广州敏城建设工程有限公司网站dogip网站开发
  • 营销网站建设的因素青岛网站建设公司有哪些
  • 网站开发主管招聘国外哪些网站可以兼职做任务
  • 有没有做装修的大型网站而不是平台郑州网络营销网站优化
  • 怎么创建企业邮箱优化大师win7
  • 创建论坛网站需要多少钱记的网站域名
  • 尚云网站建设建设招聘网站需要注册什么证
  • 免费自助创建网站网站建设与管理课程实训