单片机型号:STC15W4K32S4
数字编码器EC11作为控制波形、频率、占空比的开关
液晶1602A作为显示信息
单片机源程序如下:
Note:
2020-05-06 Update
1. Fix an error in main funciton, cause the EC11 Encoder rotate disorder.
2. Fix an error of interface display during switch frequency.
2020-05-24 Update
1. Fix precision of PWM frequency
2. Fix the information error in interface
波形发生器
作者:老刘爱捣鼓
版本:V0.3.1
单片机型号:STC15W4K32S4 @24MHz
B站视频教程:https://www.bilibili.com/video/BV12k4y197Qu
老刘爱捣鼓(全网同名)期待您的关注!
规格:
输出:单通道
方波:1Hz~4MHz
正弦波:1Hz-10kHz
波幅:约等于VCC,5V左右
带载能力:无带载能力
显示屏:LCD1602
控制:EC11编码器
界面:
左下角显示波形图标(方波/正弦波)和输出状态(On/OFF)
F:频率
D:方波占空比
CD:时钟分频系数(For information only)
P:用于生成正弦波的PWM频率(For information only)
Pt:用于生成正弦波的点数(For information only)
操作:
单击编码器:方波界面下,切换频率和占空比
双击编码器:开启或关闭波形输出
长按编码器:切换方波界面/正弦波界面/电压显示界面
旋转编码器:调节参数
2020-05-06 更新
1. 修正main函数循环中会引起编码器旋转混乱的错误
将main函数中while循环中的Update_Flag=0;放到前面清零,放在后面会在编码器高速旋转时,多次触发中断而Update_Flag在最后被清零则无法正确更新LCD
2. 修正在切换频率时,界面的显示错误
2020-05-24 Update
1. 修正PWM频率精度
2. 修正界面信息的显示错误
*/
#include #include #include "lcd1602.h" #include "wave.h" #include "settings.h" #include "delay.h" #include "config_stc.h" //#include "uart.h" //#include "stdio.h" #ifndef uint8 #define uint8 unsigned char #endif #ifndef int8 #define int8 char #endif #ifndef uint16 #define uint16 unsigned int #endif #ifndef uint32 #define uint32 unsigned long int #endif #define TIMER_0 1 //定时器0中断序号 #define INT_1 2 //编码器旋转 触发外部中断 #define INT_0 0 //编码器按下 触发外部中断 uint8 Timer0_Count; bit Update_Flag = 1; void main(void) { //LCD Pin P1M1 &= 0x00; //设置P1口为准双向 P1M0 &= 0x00; //设置P1口为准双向 P0M1 &= 0x00; //设置P0口为准双向 P0M0 &= 0x00; //设置P0口为准双向 //信号输出Pin PWM3 = 0; //设置PWM3 P4.5低电平 PWM4 = 0; //设置PWM4 P4.4低电平 P4M1 |= 0x30; //设置P4.4(PWM4_2),4.5(PWM3_2)为高阻 P4M0 &= ~0x30; //设置P4.4(PWM4_2),4.5(PWM3_2)为高阻 /* 编码器旋转中断 Interrupt for Encoder Rotation */ IT1 = 0; //外部中断1触发方式,上升沿和下降沿 PX1 = 1; //外部中断1高优先级 EX1 = 1; //开启外部中断1 /* 编码器按键中断 Interrupt for Encoder Click */ IT0 = 1; //外部中断0触发方式,下降沿 PX0 = 1; //外部中断0高优先级 EX0 = 1; //开启外部中断0 /* 定时器0,用于更新电压信息计时 Timer 0 for updating the information of VCC*/ TMOD &= 0xF0; //设置定时器0模式 16位自动重载,在Keil中debug的话,请注意,这种设置是8051的旧13位模式 AUXR &= ~0x80; //定时器0时钟12T模式 TL0 = 0xC0; //设置定时初值 24MHz 20ms TH0 = 0x63; //设置定时初值 24MHz 20ms ET0 = 1; //允许T0溢出中断 /* 定时器1,用于生成小于50Hz的PWM Timer 1 for generate the PWM when frequency less than 50Hz*/ TMOD &= 0x0F; //工作模式,0: 16位自动重装 AUXR &= ~0x40; //12T ET1 = 1; //允许中断 EA = 1; //开总中断 //UartInit(); //UartInit_interrupt(); PWM_Hz_Pre = PWM_Hz; Wave_Shape_Pre = Wave_Shape; Get_PWM_Duty_Limit(); if (PWM_Duty > PWM_Max_Duty) PWM_Duty = PWM_Max_Duty; else if (PWM_Duty < PWM_Min_Duty) PWM_Duty = PWM_Min_Duty; Lcd_Init(); while (1) { if (Update_Flag) { /* Update_Flag要马上清零,如果放在Update_LCD后面,会造成假如Update_LCD的过程中再次触发编码器旋转中断的话, 在执行完Update_LCD后,在中断中置位的Update_Flag却被清零了,造成LCD没刷新,输出和显示的不一致。 另一种方法是在执行Update_LCD前把中断关掉,执行完再打开中断, 但如果这里面的函数执行时间比较长,会产生旋转触发不及时,使用感受卡顿。 关中断来避免重复触发是有好处的,可以避免在函数执行过程中多次触发将参数修改掉, 函数执行过程中参数被修改,可能会造成计算结果混乱,严重时会造成溢出,甚至单片机复位死机。 */ Update_Flag = 0; Wave_OFF(); if (Wave_Shape_Pre != Wave_Shape) { Wave_Shape_Pre = Wave_Shape; if (Wave_Shape == 0) { EX1 = 0; //关闭外部中断1(编码器旋转) TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 (定时器0为VCC更新计时) } else if (Wave_Shape == 1) { PWM_Hz = PWM_Hz_Pre; EX1 = 1; //开启外部中断1(编码器旋转) TR0 = 0; //关闭定时器0 (定时器0为VCC更新计时) TF0 = 0; //清除TF0标志 } else if (Wave_Shape == 2) { PWM_Hz_Pre = PWM_Hz; } } if (Wave_Shape == 1) //方波 { Set_PWMCKS_PS(); Set_PWM_Cycle(); Set_PWM_Width();
上一篇:电阻、电容和电感测试仪设计
下一篇:基于中科微GPS的OLED显示的微型时钟
推荐阅读
史海拾趣
面对日益严峻的环境问题,Banner Engineering公司积极践行绿色环保理念,推动企业的可持续发展。公司在生产过程中采用了环保材料和工艺,减少了对环境的污染。同时,公司还致力于开发节能高效的传感器产品,帮助客户降低能源消耗和减少碳排放。此外,公司还积极参与公益活动和社会责任项目,为社会和环境做出积极贡献。
这些故事展示了Banner Engineering公司在电子行业发展中不断创新、拓展市场、提升质量、践行环保理念的发展历程。正是这些努力使公司成为了电子行业中具有影响力的企业之一。
随着产品性能的不断提升和市场需求的扩大,无锡友达开始积极拓展国内外市场。公司的产品不仅覆盖国内二十多个省、市,还远销欧美、中东、港澳台等国家和地区。通过与国际知名企业的合作,无锡友达不断提升自身的品牌影响力,逐渐在全球电子行业中占据一席之地。
随着电子行业的快速发展,艾迈斯(AMASS)公司意识到只有不断创新才能保持领先地位。为此,公司加大了对研发的投入,引进了一批高素质的研发人才,并建立了完善的研发体系。经过多年的努力,艾迈斯成功研发出了多款具有创新性的连接器产品,其中包括高性能、高安全性的智能设备动力连接器。这些产品的推出不仅提升了公司的技术实力和市场竞争力,也为整个行业的发展带来了积极的影响。
随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。
请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。
在1968年,电子行业正迎来一场技术革新。在这个充满机遇的时代,CML Microcircuits公司应运而生。初创时期的CML专注于研发单芯片解决方案,而不是传统的标准组件组合。这一创新理念使CML在行业中脱颖而出。公司的第一个产品——频率敏感开关,凭借其卓越的性能和可靠性,迅速赢得了市场的认可。这款产品不仅销售了30多年,而且至今仍在某些应用中发挥着关键作用。
为了进一步扩大市场份额,CML Microcircuits公司开始积极拓展全球市场。通过与当地代理商和分销商建立合作关系,CML的产品逐渐进入了全球各地的电子市场。同时,公司还设立了多个海外研发中心和销售中心,以便更好地服务全球客户。这些举措不仅提升了CML的品牌知名度,也为其带来了更多的商业机会。
一、生物生物传感器。该系统利用一个回旋装置来检测,类似导航系统和气袋的原理。振荡晶片的大小类似于一颗尘埃尺寸,有望可使医生诊断和监测常见类型的肿瘤,获得最佳治疗方案。该装置可以鉴定肿瘤标志物-蛋白以及其它肿瘤细胞产生的丰度不同的 ...… 查看全部问答∨ |
|
新手升级8位到32位单片机,TM32与LPCl7xx哪个容易学? 新手升级8位到32位单片机,TM32与LPCl7xx哪个容易学? 价格 性能 开发平台 开发资料 转贴一下比较: TM32 和 LPCl7xx 速度比较(基于uCOS-II平台) 测试1 STM32平台 72MHz--------- ...… 查看全部问答∨ |
|
PXA270核心板方案: CPU:PXA270 SDRAM:128M FLASH:32M 接口:USB、SDCARD、SERIAL等 LCD+TOUCH:3.5‘ 支持WIFI 方案可提供:SCH + PCB + BOOM + WINCE ...… 查看全部问答∨ |
|
求助:4線touch controller 來控制 5線panel 由於當初沒搞清楚5線的定義,就使用了5線式PANEL 分別接在6410 CPU的touch ADC,第五線SG則接在AIN0上。 如果不透過五線式的touch controller,有辦法直接用6410 內建4線controller 來控制嗎? … 查看全部问答∨ |
如何测试出JTAG更个引脚的功能 资源:我这里有一块手机焊有20 针的JTAG接口,目前没有这块手机的任何资料。 拥有Lauterbach JTAG+trace32 调试器。 现象:目前通过Lauterbach JTAG+trace32调试器调试其 ...… 查看全部问答∨ |