uia编程
❶ 急!基于单片机的数字示波器设计
首先根据输出波形的频率和幅值进行编码,存储在单片机的ROM里,
然后以一定的时间间隔依次将这些数字量送往D/A进行转换输出,这样,只要循环送数,在D/A的双极性输出端就可以得到波形波形。
采用单片机片内的振荡器、上电复位和外部硬件看门狗电路。
至于波形编码,网上资料很多,下面是硬件电路设计的描述(这个是网上找的):
输出两路幅值相等相位相差90°的正弦波形作为物体偏转测量的基准波形;另一路输出测角波形,该波形相对基准波形的相位反映角偏差的方向、幅值反映角偏差量。专用波形发生器就是模拟角位移输出波形的装置,用来进行后续解调电路以及功放电路的检测。它以单片机为核心,经过D/A转换和放大电路的处理,最后输出反应弹体姿态的基准波形和测角波形。
软件方面的编程:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //共阴极0~9对应16进制数
//=============正弦波数据====================
uchar code sin_tab[256]=
{
0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae,
0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xc9, 0xcc, 0xce, 0xd1, 0xd3, 0xd5, 0xd8,
0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf4,
0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7,
0xf6, 0xf5, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe3, 0xe1, 0xde, 0xdc,
0xda, 0xd8, 0xd6, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4,
0xb1, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99, 0x96, 0x92, 0x8f, 0x8c, 0x89, 0x86, 0x83,
0x80, 0x7d, 0x79, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52,
0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b, 0x39, 0x36, 0x33, 0x31, 0x2e, 0x2c, 0x2a, 0x27,
0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0xf, 0xd, 0xc, 0xb ,
0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0 ,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8 ,
0x9, 0xa, 0xc, 0xd, 0xe, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23,
0x25, 0x27, 0x29, 0x2c, 0x2e, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x40, 0x43, 0x46, 0x48, 0x4b,
0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x60, 0x63, 0x66, 0x69, 0x6c, 0x6f, 0x73, 0x76, 0x79, 0x7c,
};
//三角波信号数据表
uchar code thr_tab[32]=
{
0x00,0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f,0xaf,0xbf,0xcf,0xdf,0xef,
0xff,0xef,0xdf,0xcf,0xbf,0xaf,0x9f,0x8f,0x7f,0x6f,0x5f,0x4f,0x3f,0x2f,0x1f,0x0f
};
//-------------------------------------------------------------------------------------------------------
//锯齿波信号数据表
uchar code jc_tab[33]=
{
0x00,0x08,0x0f,0x18,0x1f,0x28,0x2f,0x38,0x3f,0x48,0x4f,0x58,0x5f,0x68,0x6f,0x78,
0x7f,0x88,0x8f,0x98,0x9f,0xa8,0xaf,0xb8,0xbf,0xc8,0xcf,0xd8,0xdf,0xe8,0xef,0xf8,0xff
};
//数码管位选控制口定义
sbit LED4=P2^7;
sbit LED3=P2^6;
sbit LED2=P2^5;
sbit LED1=P2^4;
//按键口申明
sbit S1=P2^3;
sbit S2=P2^2;
sbit S3=P2^1;
unsigned char tabArry[4]; //保存显示数据
char flag=1; //按键标志,当flag=1时表示没有按下,当flag=0时表示有按键按下
int keycount=0; //按键计数
unsigned char waveth,wavetl; //用于对定时器付值
unsigned int frecount=100; //频率计数
unsigned int mbjs; //码表计数,共采32个点
//毫秒延时程序
void delayms(int ms)
{
uchar i;
while(ms--)
{
for(i=250;i>0;i--);
}
}
//键盘扫描
void keyscan()
{
if(flag==1)
{
if(S3==0) //用S3切换波形
{
delayms(2); //延时去抖
if(S3==0) //按键计数,便于切换波形
{
flag=0;
keycount++;
if(keycount>=4) keycount=0; //四种波形计数4次
}
}
if(S2==0) //频率加1 处理
{
delayms(2);
if(S2==0)
{
flag=0;
switch(keycount)
{
case 0: //正弦波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 1: //三角波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 2: //锯齿波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 3: //方波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
}
waveth=(65536-57603/frecount)/256; //重新计算初值
wavetl=(65536-57603/frecount)%256;
}
}
if(S1==0) //频率减1 处理
{
delayms(2);
if(S1==0)
{
flag=0;
switch(keycount)
{
case 0: //正弦波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 1: //三角波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 2: //锯齿波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 3: //方波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
}
waveth=(65536-57603/frecount)/256; //重新计算初值
wavetl=(65536-57603/frecount)%256;
}
}
}
if(S1!=0 && S2!=0 && S3!=0) flag=1; //判断按键是否弹起
}
//数据分位
void change(char wavetype,unsigned int frequency)
{
tabArry[0]=wavetype; //显示字母,表示波形类型
tabArry[1]=frequency%1000/100; //百位
tabArry[2]=frequency%100/10; //十位
tabArry[3]=frequency%10; //个位
}
//显示函数
void display()
{
switch(keycount)
{
case 0: //显示A和正弦波的频率
change(0x0a,frecount);
break;
case 1: //显示b和三角波的频率
change(0x0b,frecount);
break;
case 2: //显示C和锯齿波的频率
change(0x0c,frecount);
break;
case 3: //显示d和方波的频率
change(0x0d,frecount);
break;
}
P0 = table[tabArry[0]]; //送最高位段码
LED1=0; //打开对应的位选控制口
delayms(2); //显示延时
LED1=1; //关闭对应的位选控制后显示下一位
P0 = table[tabArry[1]];
LED2=0;
delayms(2);
LED2=1;
P0 = table[tabArry[2]];
LED3=0;
delayms(2);
LED3=1;
P0 = table[tabArry[3]];
LED4=0;
delayms(2);
LED4=1;
}
void Timerinit()
{
TMOD=0x01; //定时器0方式1
//定时器初值计算公式:X=65536-(T/T0)=65536-(f0/f/32)
TH0=waveth=(65536-57603/frecount)/256; //定时器初值 22.1184MHz
TL0=wavetl=(65536-57603/frecount)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //定时器0开始计数
}
//主函数
void main()
{
Timerinit(); //定时器初始化
while(1)
{
keyscan(); //扫描按键
display(); //显示程序
}
}
void Timer0() interrupt 1
{
TH0=waveth; //重新赋初值
TL0=wavetl;
if (keycount==0) //输出正弦波
{
P1 = sin_tab[mbjs];
mbjs+=8; //256点,每隔8点输出一个数据
if(mbjs>=256)
{
mbjs=0;
}
}
else if(keycount==1) //输出三角波
{
P1 = thr_tab[mbjs];
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
}
else if(keycount==2) //输出锯齿波
{
P1 = jc_tab[mbjs];
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
}
else if(keycount==3) //输出方波
{
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
else if(mbjs<16) P1=0xff;
else P1=0x00;
}
}
摘 要
函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。
本课题采用由集成运算放大器与晶体管差分放大器共同组成的方波—三角波—正弦波函数发生器的设计方法,先通过比较器产生方波,再通过积分器产生三角波,最后通过差分放大器形成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。
经过仿真得出了方波、三角波、正弦波、方波——三角波转换及三角波——正弦波转换的波形图。
关键字:函数信号发生器、集成运算放大器、晶体管差分放
设计目的、意义
1 设计目的
(1)掌握方波—三角波——正弦波函数发生器的原理及设计方法。
(2)掌握迟滞型比较器的特性参数的计算。
(3)了解单片集成函数发生器8038的工作原理及应用。
(4)能够使用电路仿真软件进行电路调试。
2 设计意义
函数发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。
设计内容
1 课程设计的内容与要求(包括原始数据、技术参数、条件、设计要求等):
1.1课程设计的内容
(1)该发生器能自动产生正弦波、三角波、方波。
(2)函数发生器以集成运放和晶体管为核心进行设计
(3)指标:
输出波形:正弦波、三角波、方波
频率范围:1Hz~10Hz,10Hz~100Hz
输出电压:方波VP-P≤24V,三角波VP-P=8V,正弦波VP-P>1V;
(4)对单片集成函数发生器8038应用接线进行设计。
1.2课程设计的要求
(1)提出具体方案
(2)给出所设计电路的原理图。
(3)进行电路仿真,PCB设计。
2 函数波形发生器原理
2.1函数波形发生器原理框图
图2.1 函数发生器组成框图
2.2函数波形发生器的总方案
函数发生器一般是指能自动产生正弦波、三角波、方波及锯齿波、阶梯波等电压波形的电路或仪器。根据用途不同,有产生三种或多种波形的函数发生器,使用的器件可以是分立器件 (如低频信号函数发生器S101全部采用晶体管),也可以采用集成电路(如单片函数发生器模块8038)。为进一步掌握电路的基本理论及实验调试技术,本课题采用由集成运算放大器与晶体管差分放大器共同组成的方波—三角波—正弦波函数发生器的设计方法。
产生正弦波、方波、三角波的方案有多种,如首先产生正弦波,然后通过整形电路将正弦波变换成方波,再由积分电路将方波变成三角波;也可以首先产生三角波—方波,再将三角波变成正弦波或将方波变成正弦波等等。本课题采用先产生方波—三角波,再将三角波变换成正弦波的电路设计方法[3]。
由比较器和积分器组成方波—三角波产生电路,比较器输出的方波经积分器得到三角波,三角波到正弦波的变换电路主要由差分放大器来完成。差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器时,可以有效地抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。
2.3函数波形发生器各组成部分的工作原理
2.3.1方波发生电路的工作原理
此电路由反相输入的滞回比较器和RC电路组成。RC回路既作为延迟环节,又作为反馈网络,通过RC充、放电实现输出状态的自动转换。设某一时刻输出电压Uo=+Uz,则同相输入端电位Up=+Ut。Uo通过R3对电容C正向充电,如图2.3中实线箭头所示。反相输入端电位n随时间t的增长而逐渐增高,当t趋于无穷时,Un趋于+Uz;但是,一旦Un=+Ut,再稍增大,Uo从+Uz跃变为-Uz,与此同时Up从+Ut跃变为-Ut。随后,Uo又通过R3对电容C反向充电,如图中虚线箭头所示。Un随时间逐渐增长而减低,当t趋于无穷大时,Un趋于-Uz;但是,一旦Un=-Ut,再减小,Uo就从-Uz跃变为+Uz,Up从-Ut跃变为+Ut,电容又开始正相充电。上述过程周而复始,电路产生了自激振荡[4]。
2.3.2方波——三角波转换电路的工作原理
图2.2方波—三角波产生电路
工作原理如下:
若a点断开,整个电路呈开环状态。运算发大器A1与R1、R2及R3、RP1组成电压比较器,C1为加速电容,可加速比较器的翻转。运放的反相端接基准电压,即U-=0,同相输入端接输入电压Uia,R1称为平衡电阻。比较器的输出Uo1的高电平等于正电源电压+Vcc,低电平等于负电源电压-Vee(|+Vcc|=|-Vee|), 当比较器的U+=U-=0时,比较器翻转,输出Uo1从高电平跳到低电平-Vee,或者从低电平Vee跳到高电平Vcc。设Uo1=+ Vcc,则
(2.1)
将上式整理,得比较器翻转的下门限单位Uia_为
(2.2)
若Uo1=-Vee,则比较器翻转的上门限电位Uia+为
(2.3)
比较器的门限宽度:
(2.4)
由以上公式可得比较器的电压传输特性,如图2.3所示。
a点断开后,运放A2与R4、RP2、C2及R5组成反相积分器,其输入信号为方波Uo1,则积分器的输出Uo2为:
(2.5)
时,
(2.6)
时,
(2.7)
可见积分器的输入为方波时,输出是一个上升速度与下降速度相等的三角波,其波形关系如图2.4所示。
a点闭合,即比较器与积分器形成闭环电路,则自动产生方波-三角波。三角波的幅度为:
(2.8)
方波-三角波的频率f为:
(2.9)
由以上两式(2.8)及(2.9)可以得到以下结论:
(1) 电位器RP2在调整方波-三角波的输出频率时,不会影响输出波形的幅度。若要求输出频率的范围较宽,可用C2改变频率的范围,PR2实现频率微调。
(2) 方波的输出幅度应等于电源电压+Vcc。三角波的输出幅度应不超过电源电压+Vcc。
电位器RP1可实现幅度微调,但会影响方波-三角波的频率[3]。
图2.3比较器的电压传输特性
图2.4方波与三角波波形关系
2.3.3三角波---正弦波转换电路的工作原理
如图2.5三角波——正弦波的变换电路主要由差分放大电路来完成。
差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器,可以有效的抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性[1]。
图2.5 三角波——正弦波的变换电路
分析表明,传输特性曲线的表达式为:
(2.10)
(2.11)
式中
——差分放大器的恒定电流;
——温度的电压当量,当室温为25oc时, ≈26mV。
如果Uid为三角波,设表达式为
(2.12)
式中 Um——三角波的幅度;
T——三角波的周期。
为使输出波形更接近正弦波,由图2.6可见:
(1)传输特性曲线越对称,线性区越窄越好。
(2)三角波的幅度Um应正好使晶体管接近饱和区或截止区。
(3)图2.7为实现三角波——正弦波变换的电路。其中RP1调节三角波的幅度,RP2调整电路的对称性,其并联电阻RE2用来减小差分放大器的线性区。电容C1,C2,C3为隔直电容,C4为滤波电容,以滤除谐波分量,改善输出波形[2]。
图2.6三角波—正弦波变换原理
图2.7三角波—正弦波变换电路
2.4电路的参数选择及计算
2.4.1方波-三角波中电容C1变化(关键性变化之一)
实物连线中,我们一开始很长时间出不来波形,后来将C2从10uf(理论时可出来波形)换成0.1uf时,顺利得出波形。实际上,分析一下便知当C2=10uf时,频率很低,不容易在实际电路中实现。
2.4.2三角波—正弦波部分的计算
比较器A1与积分器A2的元件计算如下:
由式(2.8)得
即
取 ,则 ,取 ,RP1为47KΩ的点位器。取平衡电阻
由式(2.9)
即
当 时,取 ,则 ,取 ,为100KΩ电位器。当 时 ,取 以实现频率波段的转换,R4及RP2的取值不变。取平衡电阻 。
三角波—正弦波变换电路的参数选择原则是:隔直电容C3、C4、C5要取得较大,因为输出频率很低,取 ,滤波电容 视输出的波形而定,若含高次斜波成分较多, 可取得较小, 一般为几十皮法至0.1微法。RE2=100欧与RP4=100欧姆相并联,以减小差分放大器的线性区。差分放大器的静态工作点可通过观测传输特性曲线,调整RP4及电阻R*确定。
2.5 总电路图
先通过比较器产生方波,再通过积分器产生三角波,最后通过差分放大器形成正弦波。如图2.5.1所示,
图2.5.1三角波-方波-正弦波函数发生器实验电路
2.6 8038单片集成函数发生器
2.6.1 8038的工作原理
8038由恒流源I1、I2,电压比较器C1、C2和触发器①等组成。其内部原理电路框图和外部引脚排列分别如图2.8和图2.9所示。
图2.8 8038原理框图
图2.9 8038管脚图(顶视图)
1. 正弦波线性调节;2. 正弦波输出;3. 三角波输出;4. 恒流源调节;5. 恒流源调节;6. 正电源;7. 调频偏置电压;8. 调频控制输入端;9. 方波输出(集电极开路输出); 10. 外接电容;11. 负电源或接地;12.正弦波线性调节;13、14. 空脚
在图2.8中,电压比较器C1、C2的门限电压分别为2VR/3和VR/3( 其中VR=VCC+VEE),电流源I1和I2的大小可通过外接电阻调节,且I2必须大于I1。当触发器的Q端输出为低电平时,它控制开关S使电流源I2断开。而电流源I1则向外接电容C充电,使电容两端电压vC随时间线性上升,当vC上升到vC=2VR/3 时,比较器C1输出发生跳变,使触发器输出Q端由低电平变为高电平,控制开关S使电流源I2接通。由于I2>I1 ,因此电容C放电,vC随时间线性下降。当vC下降到vC≤VR/3 时,比较器C2输出发生跳变,使触发器输出端Q又由高电平变为低电平,I2再次断开,I1再次向C充电,vC又随时间线性上升。如此周而复始,产生振荡。若I2=2I1 ,vC上升时间与下降时间相等,就产生三角波输出到脚3。而触发器输出的方波,经缓冲器输出到脚9。三角波经正弦波变换器变成正弦波后由脚2输出。当I1<I2<2I1 时,vC的上升时间与下降时间不相等,管脚3输出锯齿波。因此,8038能输出方波、三角波、正弦波和锯齿波等四种不同的波形。
图2.8中的触发器,当R端为高电平、S端为低电平时,Q端输出低电平;反之,则Q端为高电平。
2.6.2 8038构成函数波形发生器
由图2.9可见,管脚8为调频电压控制输入端,管脚7输出调频偏置电压,其值(指管脚6与7之间的电压)是(VCC+VEE/5) ,它可作为管脚8的输入电压。此外,该器件的方波输出端为集电极开路形式,一般需在正电源与9脚之间外接一电阻,其值常选用10k左右,如图2.10所示。当电位器Rp1动端在中间位置,并且图中管脚8与7短接时,管脚9、3和2的输出分别为方波、三角波和正弦波。电路的振荡频率f约为0.3/[C(R1+RP1/2)] 。调节RP1、RP2可使正弦波的失真达到较理想的程度。
在图2.10中,当RP1动端在中间位置,断开管脚8与7之间的连线,若在+VCC与-VEE之间接一电位器,使其动端与8脚相连,改变正电源+VCC与管脚8之间的控制电压(即调频电压),则振荡频率随之变化,因此该电路是一个频率可调的函数发生器。如果控制电压按一定规律变化,则可构成扫频式函数发生器。
图2.10 8038接成波形产生器阿
3电路仿真
3.1电路仿真
3.1.1方波——三角波发生电路的仿真
图3.1 方波
图3.2 三角波
图3.3 方波——三角波
3.1.2三角波---正弦波转换电路的仿真
图3.4 三角波——正弦波
参考文献
[1]王 远.模拟电子技术(第二版)[M].北京:机械工业出版社,2000
[2]谢自美.电子线路设计实验测试(第二版)[M].武昌:华中科技大学出版社,2000
[3]路 勇.电子电路实验及仿真[M].清华大学出版社,2003
[4]胡宴如.模拟电子技术[M].北京:高等教育出版社,2000
[5]周跃庆.模拟电子技术基础教程[M].天津大学出版社, 2001
[6]曾建唐.电工电子实践教程[M].北京:机械工业出版社,2002
❷ 你有自创语言吗
你有自创语言吗?
个人认为需要完成3件大事情:
1、设计符号,并设计每个符号对应的发音(表音语言)或含义(表意语言)(可以使用已知语言的符号)。
2、设计语法(这个得先对语法进行分类(相当于设计编程语言的格式))。
3、定义词汇对应的符号组合(这个得对词汇分类(相当于定义编程语言的关键词)),我自己已经从韩文中找到灵感设计了一套比韩文字符复杂一些的符号集(主要是为了能支持更多发音),现在差语法和词汇。
礼貌用语:
1、siπ lrAp nahreWi rje yUd'y vom zaweF bou L'sa Y'ء hOл,它比较贴切于汉语语序。
2、你好:li'wo'ha,再见:soi'kenn,谢谢:se'li'wa'o,对不起:teinchi。
3、动词:11个,固有名词:30个,重新简化字(目前)50个,自造子音103个将来时:无变化(对于现在时来说),过去时:一种(句末加tu,有时候在动词后面加变成“已知,见到过“的意思,不影响句末的变化),至于时间之类的按照中文来说就好了。
4、Batium ower rje Fortyaw Ziongigo Yamp'Lial Yamp suwCzЛ,自己觉得很快乐吧。
5、Лo,wiK rje yUd ower siaQiy'Lial Tayler.,不过也只有平时没有事干自创一下。
❸ 使用 python 轻松创建自制 RPA
使用 Python 和 pywinauto 创建简易 RPA
在无需依赖专业 RPA 工具的情况下,通过 Python 编程以及 pywinauto 库,可以轻松实现业务自动化。本文将指导您使用 Python 和 pywinauto 自动操作 Windows 应用程序。
准备工作
首先安装 Python,推荐从非官方页面下载并确保安装时勾选“Add Python 3.x to PATH”选项。安装后,使用命令提示符运行 python --version 来验证 Python 已正确安装。
其次,使用 pipenv 安装 Python 包管理工具,通过命令行执行 pipenv 安装。接下来,创建工作目录并使用 pipenv 初始化,确保在文件夹中生成 Pipfile 文件。
安装 pywinauto 库,通过 pipenv install pywinauto 命令进行。
编写自动执行计算器程序
创建一个名为 calc.py 的文件,内含代码以启动 Windows 计算器并计算指定数值。
运行程序
使用 python calc.py 命令运行程序。计算器将自动启动并计算输入值。
理解 pywinauto 技术背景
使用 pywinauto 时需了解其技术基础。两种元素识别方法:Win32 API 和 UI 自动化。Win32 API 更易识别元素,而 UI 自动化在识别现代桌面应用元素上更有效。
使用 Win32 API 启动应用的代码如下:
若使用 UI 自动化,代码示例如下:
默认使用 Win32 API。
属性解析魔术
pywinauto 使用属性解析魔术技术标识操作元素。例如,计算程序中标识数字 1 的按钮如下编写:
或使用内部结构描述符,如“Button24”来标识。若使用拼写错误或符号差异,pywinauto 会使用“最佳匹配”算法进行查找。
使用 print_control_identifiers() 方法查看元素标识详情,以获取“1”按钮的表示方式。
了解 pywinauto 类结构
通过查看与“1”按钮对应的 pywinauto 对象所属类,可以进一步了解可用的操作方法。在 Windows 应用程序上下文中,该按钮属于 uia_controls.ButtonWrapper 类。
了解类结构,有助于执行特定操作。查阅文档以获取每个类实例可使用的具体方法。
如有兴趣学习 RPA 技术,可关注公众号【RPA业务流程自动化】,获取更多业务咨询时请添加微信。