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

基于51单片机的智能计算器Protues仿真设计

目录

一、设计背景

二、实现功能

三、硬件设计

3.1 总体硬件设计

​3.2 键盘电路的设计

3.3 显示电路的设计

 四、仿真演示

 五、源程序

一、设计背景

       随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了。计算器在人们的日常中是比较的常见的电子产品之一。如何使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器,使其更好的为各个行业服务,成了如今电子领域重要的研究课题。

二、实现功能

     本设计是以AT89C51单片机为核心的计算器模拟系统设计,输入采用4×4矩阵键盘,可以进行加、减、乘、除4位带符号数字运算,最大运算是可达9999*9999,可以运算负数,并在LCD1602上显示操作过程。

三、硬件设计

3.1 总体硬件设计

为了更好的实现系统得功能,硬件电路的设计应该遵循以下原则:

1、优化硬件电路

      采用软件设计与硬件设计相结合的方法;尽管采用软件来实现硬件系统的功能时,也许响应时间会比单纯使用硬件时长,而且还要占用微处理器(MCU)的时间;但是,用软件实现硬件的功能可以简化硬件结构,提高电路的可靠性。所以,在设计本系统得时候,在满足可靠性和实时性的前提下,尽可能的通过软件来实现硬件功能。

2、可靠性及抗干扰设计

      根据可靠性设计理论,系统所用芯片数量越少,系统的平均无故障时间越长。而且,所用芯片数量越少,地址和数据总线在电路板上受干扰的可能性也就越小。因此,系统的设计思想是在满足功能的情况下力争使用较少数量的芯片。

3、灵活的功能扩展

     功能扩展是否灵活是衡量一个系统优劣的重要指标。一次设计往往不能完全考虑到系统的各个方面,系统需要不断完善以及进行功能升级。进行功能扩展时,应该在原有设计的基础上,通过修改软件程序和少量硬件完成。对于本系统而言,就是要求在系统硬件不变的情况下,能够通过修改软件程序,完成功能的升级和扩展。

     根据第提出的系统设计方案,结合以上三条原则,确定了系统硬件的设计。计算器主要由以下一些功能模块构成:非编码键盘模块、LCD液晶显示屏模块等。

下图为总体硬件结构。

3.2 键盘电路的设计

       键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。从成本角度出发,本设计选用的是非编码键盘。如下图所示:

3.3 显示电路的设计

       当系统需要显示少量数据时,采用LCD液晶显示屏进行显示是一种经济实用的方法。P0口作为液晶显示的数据端口,P3.5-P3.7口作为其控制端口,控制LCD液晶显示屏显示输出数据。如下图所示:

 四、仿真演示

初始界面

 加运算

减运算

乘运算

除运算

 

五、源程序

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
//--------LCD1602-------------------
//P00-07==== D0-7
sbit rs=P2^7;        //指令or数据
sbit wela=P2^6;      //读or写
sbit lcden=P2^5;	 //使能信号
//--------LCD1602-------------------
//--------KEY-----------------------
//P1口
//--------KEY-----------------------
uchar code table[]= "                ";long  int data_a,data_b; 	//第一个数和第二个数
long  int data_c;			//计算结果uchar dispaly[10];         //显示缓冲//************************************************************************/
// 描述: 延时t us函数
//************************************************************************/
void LCD_Delay_us(unsigned int t)
{while(t--);           //t=0,退出
}
//************************************************************************/
// 描述: 延时t ms函数
//************************************************************************/
void LCD_Delay_ms(unsigned int t)
{unsigned int i,j;for(i=0;i<t;i++)       		//执行t次循环for(j=0;j<113;j++)     		//执行113次循环;
}
//************************************************************************/
// 描述: 1602液晶写指令
//************************************************************************/
void write_com(uchar com)    	//1602液晶写指令
{rs=0;                       //写指令lcden=0;                    //使能1602 P0=com;                     //写入指令comLCD_Delay_ms(1);            //延时1mslcden=1;                    //使能1602LCD_Delay_ms(2);            //延时2ms  lcden=0;	                //使能1602
}
//************************************************************************/
// 描述:1602液晶写数据 
//************************************************************************/
void write_date(uchar date) //1602液晶写数据
{rs=1;                        //写数据lcden=0;                     //使能1602 P0=date;                     //写入数据dateLCD_Delay_ms(1);             //延时1mslcden=1;                     //使能1602LCD_Delay_ms(2);             //延时2mslcden=0;	                 //使能1602
}
//************************************************************************/
// 描述:指定x,y写入字符函数
//************************************************************************/void W_lcd(unsigned char x,unsigned char y,unsigned char Data) {     if (y == 0){write_com(0x80 + x);}   //第一行  else{write_com(0xc0 + x);}          //第二行write_date( Data);                  //写入数据}//指定x,y写入字符串函数void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {     if (y == 0){write_com(0x80 + x);} 		//第一行else{write_com(0xC0 + x);}        		//第二行while (*s)                        		//{write_date( *s); s++;}      		//写入数据}
//************************************************************************/
// 描述:初始化液晶,及画面初始化 
//************************************************************************/
void init_lcd(void)            //初始化液晶,及画面初始化
{wela=0;                      //写液晶lcden=0;                     //使能1602write_com(0x38);             //8 位总线,双行显示,5X7 的点阵字符LCD_Delay_us(100);           //延时100uswrite_com(0x0c);             //开显示,无光标,光标不闪烁write_com(0x06);             //光标右移动write_com(0x01);             //清屏write_com(0x80);             //DDRAM 地址归0
}
//************************************************************************/
// 描述: 反转法键盘扫描 
//************************************************************************/
short keycheckdown()				/* 反转法键盘扫描 */
{short temp1,temp2,temp,a=0xff;P1=0xf0;						/* 输入行值(或列值) */LCD_Delay_ms(20);				/* 延时 */temp1=P1;						/* 读列值(或行值) */P1=0xff;LCD_Delay_ms(20);				/* 延时 */P1=0x0f;						/* 输入列值(或行值) */LCD_Delay_ms(20);				/* 延时 */	temp2=P1;						/* 读行值(或列值) */P1=0xff;temp=(temp1&0xf0)|(temp2&0xf);	/* 将两次读入数据组合 */switch(temp)					/* 通过读入数据组合判断按键位置 */{case 0x77 :a=0x0a;break;//  按键+   case 0x7b :a=0x0e; break;// 按键=	case 0x7d :a=0;	   break;// 按键0case 0x7e :a=0x0f; break;// 按键CEcase 0xe7 :a=0x0d;break;// 	按键/case 0xeb :a=0x9;break; //  按键9case 0xed :a=0x8;break; //  按键8 case 0xee :a=0x7;break; // 	按键7case 0xd7 :a=0x0c;break;//  按键*case 0xdb :a=0x6;break; // 	按键6case 0xdd :a=0x5;break; // 	按键5case 0xde :a=0x4;break; // 	按键4case 0xb7 :a=0x0b; break;// 按键-case 0xbb :a=3;break;	//  按键3case 0xbd :a=2;break;	//  按键2case 0xbe :a=1;break;	//  按键1default :a=0xff;}return a;						/* 返回按键值 */
}
void display_a() //显示数据a
{dispaly[3]=data_a%10000/1000;    //千dispaly[2]=data_a%1000/100;      //百dispaly[1]=data_a%100/10;        //十dispaly[0]=data_a%10;            //个 write_com(0x80+0);               //显示数据aif(data_a>999){	write_date('0'+dispaly[3]);}      //显示千位if(data_a>99){	write_date('0'+dispaly[2]);}		 //显示百位if(data_a>9){	write_date('0'+dispaly[1]);}     //显示十位write_date('0'+dispaly[0]);      //显示个位
}void display_b() //显示数据b
{write_com(0x80+7); //第一行dispaly[3]=data_b%10000/1000;    //千dispaly[2]=data_b%1000/100;      //百dispaly[1]=data_b%100/10;        //十dispaly[0]=data_b%10;            //个 if(data_b>999){	write_date('0'+dispaly[3]); }     //显示千位   
if(data_b>99) {	write_date('0'+dispaly[2]); }    //显示百位  
if(data_b>9)  {	write_date('0'+dispaly[1]); }     //显示十位write_date('0'+dispaly[0]);      //显示个位
}//计算结果
void display_c(x)
{if(data_c<100000000&&data_c>-1)//溢出时显示错误{	dispaly[8]=data_c%1000000000/100000000;    	//万万dispaly[7]=data_c%100000000/10000000;    	//千万dispaly[6]=data_c%10000000/1000000;    		//百万dispaly[5]=data_c%1000000/100000;    		//十万dispaly[4]=data_c%100000/10000;    			//万dispaly[3]=data_c%10000/1000;    			//千dispaly[2]=data_c%1000/100;      			//百dispaly[1]=data_c%100/10;        			//十dispaly[0]=data_c%10;            			//个 write_com(0x80+6+0x40); //第一行if(x==4){    if(data_c>99999999)	{	write_date('0'+dispaly[8]);}    //显示万万if(data_c>9999999)	{	write_date('0'+dispaly[7]);}   //千万if(data_c>999999)	{	write_date('0'+dispaly[6]);}    //百万if(data_c>99999)	{	write_date('0'+dispaly[5]);}    //十万if(data_b!=0)		{write_date('0'+dispaly[4]);    //万write_date('.');write_date('0'+dispaly[3]);    //千write_date('0'+dispaly[2]);    //百write_date('0'+dispaly[1]);    //十write_date('0'+dispaly[0]);    //个 }}else{if(data_c>99999999)	{	write_date('0'+dispaly[8]);}    //显示万万if(data_c>9999999)	{	write_date('0'+dispaly[7]);}    //千万if(data_c>999999)	{	write_date('0'+dispaly[6]);}    //百万if(data_c>99999)	{	write_date('0'+dispaly[5]);}    //十万if(data_c>9999)		{	write_date('0'+dispaly[4]);}    //万if(data_c>999)		{	write_date('0'+dispaly[3]);}    //千if(data_c>99)		{	write_date('0'+dispaly[2]);}    //百if(data_c>9)		{	write_date('0'+dispaly[1]);}    //十write_date('0'+dispaly[0]);    //个 }}
//	else  //溢出时显示错误
//	{
//		write_com(0x80+11+0x40); //第一行
//		write_date('E');         //显示 E 
//		write_date('r');         //显示R
//		write_date('r');		 //显示R
//		write_date('o');		 //显示O
//		write_date('r');		 //显示E
//	}
}void eql(uchar x)//加减乘除运算
{switch(x)		/*功能键选择*/{   case 1:data_c=data_a+data_b;break; 		  //加  /* + S=1 */ /* 数值转换函数 */									case 2:if(data_a>=data_b){data_c=data_a-data_b;} /* - S=2 *///减else{data_c=data_b-data_a;W_lcd(5,1,'-');} //负数符号break;  	 case 3:data_c=(data_a*data_b);break;		  /* * S=3 *///乘case 4:if(data_b==0){LCD_Write_String(0,1,"Error !         ");}else{data_c=(data_a*10000)/data_b;}break;		  /* / S=4 *///除//溢出时显示错误case 0:break;}	  }void main()
{uchar   key=0xff;               //键值初始化uchar   n=0;		 			//第1个数可以按1-4次uchar   m=5; 					//第2个数可以按1-4次uchar   x=0; data_a=0;                       //前一个数data_b=0;                       //后一个数data_c=0;                       //结果 init_lcd();  					//1602液晶初始化display_a();while(1){key=keycheckdown();			/*动态扫描键盘,返回按键对应值,赋给j        key=0到f */if(0xff!=key)				/*若返回值有效,进入内部处理程序*/{ if(key<10){if(key==0&&n==0) ;else{if(n<4){data_a=data_a*10+key;m=5;display_a();}n++;  //首先输入第一个数	}if(key==0&&m==0) ;else{if(m<4){data_b=data_b*10+key;n=5;display_b();}m++;  //必须按了+-*/才能输入第二个数	}}else{	switch(key)		/*功能键选择*/{case 0xa:n=5;m=0;x=1;W_lcd(5,0,'+');break; //加  /* + S=1 */ /* 数值转换函数 */									case 0xb:n=5;m=0;x=2;W_lcd(5,0,'-');break;		  /* - S=2 *///减case 0xc:n=5;m=0;x=3;W_lcd(5,0,'*');break;		  /* * S=3 *///乘case 0xd:n=5;m=0;x=4;W_lcd(5,0,'/');break;		  /* / S=4 *///除case 0xe:n=5;m=5;eql(x);W_lcd(12,0,'=');display_c(x);break; 	  /* = */case 0xf:n=0;x=0;m=5; data_a=0;data_b=0;data_c=0;LCD_Write_String(0,0,table);LCD_Write_String(0,1,table);W_lcd(0,0,'0');break; /*     C*/}	  		  }do{P1=0xf0;}while(P1!=0xf0);		/*等待按键松开*/}//(0xff!=key)	  }//while
}//main

相关文章:

基于51单片机的智能计算器Protues仿真设计

目录 一、设计背景 二、实现功能 三、硬件设计 3.1 总体硬件设计 ​3.2 键盘电路的设计 3.3 显示电路的设计 四、仿真演示 五、源程序 一、设计背景 随着社会的发展&#xff0c;科学的进步&#xff0c;人们的生活水平在逐步的提高&#xff0c;尤其是微电子技术的发展&am…...

Pandas数据分析实战练习

Pandas数据分析实战练习 文章目录 Pandas数据分析实战练习一、读取Excel文件中的数据1、读取工号、姓名、时段、交易额这四列数据,使用默认索引,输出前10行数据2、读取第一个worksheet中所有列,跳过第1、3、5行,指定下标为1的列中数据为DataFrame的行索引标签二、筛选符合特…...

C++ 继承下(二篇文章学习继承所有知识点)

5.继承与友元友元关系不能继承&#xff0c;也就是说基类友元不能访问子类私有和保护成员 //验证友元不能继承 class B {friend void Print(); public:B(int b): _b(b){cout << "B()" << endl;}protected:int _b; };class D : public B { public:D(int b,…...

【C++】C++11新特性——类的改进|lambda表达式

文章目录一、类的改进1.1 默认生成1.2 移动构造函数1.3 移动赋值重载函数1.4 成员变量缺省值1.5 强制生成默认函数的关键字default1.6 禁止生成默认函数的关键字delete1.6.1 C98防拷贝1.6.1 C11防拷贝二、lambda表达式2.1 对比2.2 lambda表达式语法2.3 捕捉列表2.4 函数对象与l…...

C语言进阶(37) | 程序环境和预处理

目录 1.程序的翻译环境和执行环境 2.详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段: 2.3 运行环境 3.预处理详解 3.1预定符号 3.2 #define 3.3 #undef 3.4 命令行定义 3.5 条件编译 3.6 文件包含 了解重点&#xff1a; 程序的翻译环境程序的执行环境详解: C语言程…...

Golang每日一练(leetDay0005)

目录 13. 罗马数字转整数 Roman to Integer ★ 14. 最长公共前缀 Longest Common Prefix ★ 15. 三数之和 3Sum ★★★ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 13. 罗马数字转…...

occt_modeling_data(一)——拓扑

下面是我基于opencascade英文文档中关于occt_modeling_data中Topology部分进行的翻译&#xff0c;英文好的还是建议直接看文档&#xff0c;部分我不肯定的地方我会附上英文原句。如发现有错误欢迎评论区留言。 OCCT Topolog允许用户访问和操纵物体的数据&#xff0c;且不需要处…...

【AcWing】蓝桥杯备赛-深度优先搜索-dfs(3)

目录 写在前面&#xff1a; 题目&#xff1a;93. 递归实现组合型枚举 - AcWing题库 读题&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 数据范围&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; 代码&#xff1a; AC &…...

宇宙最强-GPT-4 横空出世:最先进、更安全、更有用

文章目录前言一、准确性提升1.创造力2.视觉输入3.更长的上下文二、相比于ChatGPT有哪些提升1.GPT-4 的高级推理能力超越了 ChatGPT2.GPT-4 在多种测试考试中均优于 ChatGPT。三、研究团队在GPT-4模型都做了哪些改善1.遵循 GPT、GPT-2 和 GPT-3 的研究路径2.我们花了 6 个月的时…...

HashMap的实际开发使用

目 录 前言 一、HashMap是什么&#xff1f; 二、使用步骤 1.解析一下它实现的原理 ​编辑 2.实际开发使用 总结 前言 本章&#xff0c;只是大概记录一下hashMap的简单使用方法&#xff0c;以及理清一下hashMap的put方法的原理&#xff0c;以及get方法的原理。 一、Has…...

OpenCV入门(十三)快速学会OpenCV 12 图像梯度

OpenCV入门&#xff08;十三&#xff09;快速学会OpenCV 12 图像梯度1.Sobel算子1.1 计算x1.2 计算y1.3 计算xy2.Scharr算子2.1 计算x2.2 计算y2.3 计算xy3.Laplacian算子4.总结图像梯度计算的是图像变化的速度。对于图像的边缘部分&#xff0c;其灰度值变化较大&#xff0c;梯…...

软考:常见小题目计算题

01采购合同的类型采购合同主要包括总价类合同、成本补偿类合同、工料合同三大类合同。1、总价类合同此类合同为既定产品、服务或成果的采购设定一个总价。这种合同应在已明确定义需求&#xff0c;且不会出现重大范围变更的情况下使用。包括&#xff1a;&#xff08;1&#xff0…...

【Linux】进程的程序替换

文章目录1. 程序替换1.创建子进程的目的是什么&#xff1f;2.了解程序是如何进行替换的3. 程序替换的基本原理当创建进程的时候&#xff0c;先有进程数据结构&#xff0c;还是先加载代码和数据&#xff1f;程序替换是整体替换&#xff0c;不是局部替换execl 返回值4. 替换函数1…...

【C++】模板(上)

文章目录1、泛型编程2、函数模板函数模板的实例化模板参数的匹配原则3、 类模板类模板的实例化1、泛型编程 void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left …...

express框架利用formidable上传图片

express框架&#xff0c;在上传图片功能方面&#xff0c;用formidable里面的incomingform功能&#xff0c;很方便。很多功能都已经封装好了&#xff0c;非常好用&#xff0c;简单&#xff0c;不需要写更深层次的代码了。确实不错。 下面是我自己跟着黑马教程的博客系统的部分&…...

测试背锅侠?入职软件测试后大d佬给我丢了这个bug分类分析,至今受益匪浅......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 刚成为入职&#xf…...

STM32 OTA应用开发——通过内置DFU实现USB升级(方式1)

STM32 OTA应用开发——通过内置DFU实现USB升级&#xff08;方式1&#xff09; 目录STM32 OTA应用开发——通过内置DFU实现USB升级&#xff08;方式1&#xff09;前言1 硬件介绍2 环境搭建2.1 Keil uVsion2.2 zadig2.3 STM32CubeProgrammer2.4 安装USB驱动3 OTA升级结束语前言 …...

基于MFC的JavaScript进行网页数据交互

目录 前言 一、创建html对话框工程 二、使用步骤 1.引入JavaScript接口代码 2.重写相关接口 3.在html网页中添加C/C调用的接口 4.在MFC工程中添加调用接口 5.设置确认按键触发调用 6.运行结果 总结 前言 如何快速的进行MFC开发,这里我介绍一种JavaScript与C/C交互的…...

AUTOSAR-Fee

Fee模块 全称Flash EEPROM Emulation Module,属于ECU抽象层 Fee模块本身是脱离硬件的,但是Fee模块可能会引用的Fls模块定制API,所以只能算半抽象. FEE模块应从设备特定的寻址方案和分段中抽象出来,并为上层提供虚拟寻址方案和分段(virtual addressing scheme and segment…...

Linux基本命令——操作演示

Linux基本命令——操作演示Linux的目录结构Linux命令入门目录切换相关命令&#xff08;cd/pwd&#xff09;相对路径、绝对路径和特殊路径符创建目录命令&#xff08;mkdir&#xff09;文件操作命令part1 (touch、cat、more)文件操作命令part2 (cp、mv、rm&#xff09;查找命令 …...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...