搜索

tag 标签: 单片机

相关帖子

版块 作者 回复/查看 最后发表
电子技术经典资料汇总:嵌入式开发12.9G attach_img 嵌入式系统编程 我为峰 2019-4-29 0 0 我为峰 2019-4-29 16:35
单片机编程入门视频教程书籍推荐,零基础手把手教你学好单片机。 attach_img 【51单片机】 fasetr 2019-4-25 0 202 fasetr 2019-4-25 15:28
单片机编程入门视频教程书籍,手把手教你从零开始学好单片机。 attach_img 【51单片机】 maiya123 2019-4-23 0 0 maiya123 2019-4-23 19:38
11种常见单片机电路设计模块分享 attach_img 单片机 okhxyyo 2019-4-19 0 505 okhxyyo 2019-4-19 19:08
悬赏 上位机显示 波形采集 - [悬赏 10 枚芯币] attach_img 【微控制器 MCU】 liven269 2019-4-15 3 389 freeelectron 2019-4-17 08:46
BAC201芯片,集成心电信号检测的高集成度生物电信号传感及处理器 移动便携 梅子芯 2019-3-22 0 808 梅子芯 2019-3-22 14:25
STM32系列单片机与贴片式T的完美模式 attach_img 【stm32/stm8】 雷龙发展 2019-3-20 0 303 雷龙发展 2019-3-20 17:49
车载支架无线充电方案介绍 attach_img 单片机 无线充张生 2019-3-14 1 2 无线充张生 2019-3-14 15:29
ESP8266 最全应用文档 attachment 下载中心专版 普拉世科技 2019-2-19 2 160 xiashuang 2019-2-19 14:26
Tank-1测试架说明资料(可烧录测试ESP8266系列) attachment 下载中心专版 普拉世科技 2019-2-15 0 202 普拉世科技 2019-2-15 15:36
中科四平-51单片机创意套件 attach_img 信息发布 中科四平 2018-12-26 0 303 中科四平 2018-12-26 13:35
智能开窗器单片机方案—单片机开发 工控电子 enroo 2018-12-21 0 0 enroo 2018-12-21 16:04
PDIUSBD12 发送模式命令,软连接不起作用 attachment 【stm32/stm8】 longgyue 2018-12-21 2 380 chenbingjy 2018-12-21 14:11
帮忙推荐一款IO口输出为5V的单片机 attach_img 【51单片机】 hugue 2018-11-19 9 763 LuJianchang 2018-11-21 09:09
【连载】【星光闪电STM32F407开发板】第五章 蜂鸣器实验 attach_img 【stm32/stm8】 hejecu 2018-11-4 0 404 hejecu 2018-11-4 09:46
Proteus软件仿真彩屏TFT320240 attach_img 单片机 UpByUp 2018-9-6 2 2423 我喜欢玩游戏 2018-9-6 18:30
灵动微电池供电超极功耗MCU单片机MM32L362PF 单片机 英尚微电子 2018-9-3 0 0 英尚微电子 2018-9-3 16:00
AltiumDesigner(免费免费免费)视频教程,欢迎围观哦,更有讲师(免费免费免费)... attach_img PCB设计 zhaole 2018-8-8 0 0 zhaole 2018-8-8 11:40
LPC1768CAN通信异常 【NXP LPC MCU】 xuannian 2018-7-31 1 728 yet 2018-7-31 16:57
VK1622液晶显示驱动IC 兼容取代HT1622/ QFP64 LQFP64/44/52/48/裸片,附带该IC驱动程序 attach_img 【微控制器 MCU】 道德主义者 2018-7-26 0 606 道德主义者 2018-7-26 10:37

相关日志

分享 STM32F103单片机解密资料
Q528621124 2019-1-8 18:42
STM32F103单片机解密资料
STM32F103 单片机 解密资料 下载 一、 STM32 32 位 ARM Cortex MCU 基于 ARM® Cortex® M 处理器内核的 32 位闪存微控制器 STM32 产品家族,为 MCU 用户开辟了一个全新的自由开发空间,并提供了各种易于上手的软硬件辅助工具。 STM32 MCU 融高性能、实时性、数字信号处理、低功耗、低电压于一身,同时保持高集成度和开发简易的特点。 业内最强大的产品阵容,基于工业标准的处理器,大量的软硬件开发工具,让 STM32 单片机成为各类中小项目和完整平台解决方案的理想选择。 二、 STM32F103 Cortex-M3 单片机 STM32F103 单片机采用 Cortex-M3 内核, CPU 最高速度达 72 MHz 。该系列 MCU 具有 16KB ~ 1MB Flash 、多种控制外设、 USB 全速接口和 CAN 。 以上只是 STM32F103 单片机资料的简单介绍,文章由( 逆向开发技术网 )编辑整理。下次我们将具体介绍一下 ” STM32F103 单片机解密方法 ” 的详细内容 !
38 次阅读|0 个评论
分享 32X8点阵多功能LCD驱动电路VK1622兼容替代HT1622 QFP64 LQFP64/44/52/48,附IC驱动程序
道德主义者 2018-7-26 09:51
32X8点阵多功能LCD驱动电路VK1622兼容替代HT1622 QFP64 LQFP64/44/52/48,附IC驱动程序
型 号: VK1622 / 品 牌: VINTEK/VINKA/ 元泰 封装形式: QFP64 LQFP64 LQFP44 LQFP52 LQFP48 DICE 裸片 COB 邦定片 定制 COG 产品年份:全新年份 联 系 人:许先生 联 系 QQ : 1918885898 2689802003 联系手机: 18898582398 工程服务,技术支持,价格具有优势! 概述 : VK1622 是一個 32x8 的 LCD 駆動器 . 可軟體程式控制使其適用於多樣化的 LCD 應用線路 . 僅用到 3 至 4 條訊號線便可控制 LCD 駆動器 , 除此之外亦可介由指令使其進入省電模式。 工作電壓 : 2.4V~5.2V * 內建 256KHz RC oscillator * 提供 1/4 偏壓 1/8 COM 週期 * 省電模式 * 32x8 LCD 駆動器 * 內建 32x8 bit 顯示記憶體 * 3-wire serial interface * 軟體程式控制 * 資料及指令模式 * 自動增加讀寫位址 * 提供 VLCD 引脚来调整 LCD 工作电压 * 內建電阻式偏壓產生線路 * 8 種 WDT 的基頻選擇 * 計時器及 WDT 的溢位輸出 * 可外接 32.768KHz 石英震盪器或 256KHz 頻率 * 兩種蜂鳴器頻率 (2KHz/4KHz) * 內建 time base generator 以及 WDT * Time base or WDT 溢位輸出 * 8 種的 time base/WDT 的時鐘輸入 * 3-wire serial interface ★ 此篇产品叙述为功能简介,如需要完整产品 PDF 资料可以联系许先生索取! HT1622完全替代VK1622液晶驱动IC中文资料.pdf VK1622B LQFP48液晶驅動IC.pdf HT1621B替代HT1622取代HT1623兼容HT1625代替HT1626中文代理资料.pdf
个人分类: 液晶显示驱动IC|26 次阅读|0 个评论
分享 LCD低功耗液晶驱动IC VK2C23/LQFP64 LQFP48完全兼容替代HT16C23,显示字段为224点或416 ...
道德主义者 2018-7-23 17:02
LCD低功耗液晶驱动IC VK2C23/LQFP64 LQFP48完全兼容替代HT16C23,显示字段为224点或416 ...
VK2C23 -- RAM Mapping 56*4 / 52*8 LCD Driver Controller 概述 VK2C23 是一款存储器映射和多功能 的 LCD 控制 / 驱动芯片。该芯片的显示字段为 224 点 (56 SEG × 4 COM) 或 416 点 (52 SEG × 8 COM) 。 VK2C23 芯片的软件配置特 性使其适用于多种 LCD 应用,包括 LCD 模块和 显示子系统。 VK2C23 芯片可通过双 线双向 I2C 接口与大多数微处理器或微控制器进 行通信。 VK2C2X 系列为 I2C 介面、 RAM mapping 的 LCD 控制暨驱动 IC ,此系列以先进设计技术降低 IC 耗电、提升抗杂讯及 ESD 防护能力。全系列包含 VK2C22 、 VK2C23 、 VK2C24 等。 VK2C22 已成功获得单相电表客戶的认可及采用, VK2C23 及 VK2C24 适合于点数需求较大的三相电表的应用。 此系列內建显示记忆体及 RC 振荡电路;工作电压范围: 2.4V ~ 5.5V ;提供 2 种图框扫描频率: 80Hz or 160Hz ;可由外挂电阻调整 VLCD 电压,也提供內建可由指令调整 16 阶的 VLCD 电压;提供全屏闪烁功能、有三种频率可选。透过 I2C 介面及多項內置电路, VK2C2X 系列与系统控制晶片的传输只需 2 根信号线,大大省去系统零件及布线、降低客戶系统成本。 产品特性 ★工作电压: 2.4 ~ 5.5V ★内部 32kHz RC 振荡器 ★ Bias : 1/3 或 1/4 ; Duty : 1/4 或 1/8 ★带电压跟随器的内部 LCD 偏置发生器 ★ I2C 总线接口 ★两种可选的 LCD 帧频率: 80Hz 或 160Hz ★多达 52 × 8 位的 RAM 用于存储显示数据 ★显示模式: – 56 × 4 模式: 56 SEG × 4 COM – 56 × 4 模式: 56 SEG × 4 COM ★多种闪烁模式 ★读 / 写地址自动增加 ★内建 16 级 VLCD 电压调整电路 ★低功耗 ★提供 VLCD 引脚来调整 LCD 工作电压 ★采用硅栅极 CMOS 工艺制造 ★封装类型: 48LQFP , 64LQFP ★ 此篇产品叙述为功能简介! VK162X 系列控制暨驱动 IC 已营销业界多年。 2010 年更展开 I2C 标准接口系列的新产品开发,此系列包含 VK2C22 、 VK2C23 、 VK2C24 等。 IC 特性强调低功耗、高抗噪声及高系统 ESD 防护能力,以高整合度的脚位包装,提供最大的显示点数。 VK2C23 适用于家电、车载、民生消费品、工业仪表等的 LCD 显示器的控制及驱动,高抗噪声及高 ESD 防护能力尤适合数字式 LCD 电表、水表、瓦斯表等。依包装不同尚有 2 种点数可选择: 4 Common x 56 Segment 及 8 Common x 52 Segment 。 HT16C23完全兼容替代VK2C23高抗扰I2C接口 规格书.pdf VK2C21兼容替代取代HT16C21高抗噪LCD液晶驱动设计开发资料.pdf HT16C21替代HT16C22取代HT16C23兼容HT16C24代替VK2C2X系列中文简介资料.pdf
个人分类: 液晶显示驱动IC|1106 次阅读|0 个评论
分享 替代HT16C21,代替HT16C22兼容HT16C23取代HT16C24/ PDF中文资料,引脚图,应用电路,手 ...
道德主义者 2018-7-10 11:46
替代HT16C21,代替HT16C22兼容HT16C23取代HT16C24/ PDF中文资料,引脚图,应用电路,手 ...
VK2C21 是一款存储器映射和多功能 LCD 控制 / 驱动芯片。该芯片显示模式有 80 点 (20 × 4) 或 128 点 (16 × 8) 。 VK2C21 的软件配置特性使得它 适用于多种 LCD 应用,包括 LCD 模块和显示子 系统。 VK2C2X 系列为 I2C 介面、 RAM mapping 的 LCD 控制暨驱动 IC ,此系列以先进设计技术降低 IC 耗电、提升抗杂讯及 ESD 防护能力。全系列包含 VK2C22 、 VK2C23 、 VK2C24 等。 VK2C22 已成功获得单相电表客戶的认可及采用, VK2C23 及 VK2C24 适合于点数需求较大的三相电表的应用。 此系列內建显示记忆体及 RC 振荡电路;工作电压范围: 2.4V ~ 5.5V ;提供 2 种图框扫描频率: 80Hz or 160Hz ;可由外挂电阻调整 VLCD 电压,也提供內建可由指令调整 16 阶的 VLCD 电压;提供全屏闪烁功能、有三种频率可选。透过 I2C 介面及多項內置电路, VK2C2X 系列与系统控制晶片的传输只需 2 根信号线,大大省去系统零件及布线、降低客戶系统成本。 特性 ★工作电压: 2.4 ~ 5.5V ★内部 32kHz RC 振荡器 ★ Bias : 1/3 或 1/4 ; Duty : 1/4 或 1/8 ★带电压跟随器的内部 LCD 偏置发生器 ★ I2C 接口 ★两个可选 LCD 帧频率: 80Hz 或 160Hz ★多达 16 × 8 位 RAM 用来存储显示数据 ★显示模式: 20 × 4 模式: 20 SEGs 和 4 COMs 16 × 8 模式: 16 SEGs 和 8 COMs ★多种闪烁模式 ★读 / 写地址自动增加 ★内建 16 级 VLCD 电压调整电路 ★低功耗 ★提供 VLCD 引脚用来调整 LCD 工作电压 ★采用硅栅极 CMOS 制造工艺 ★封装类型: 20/24/28 SOP, 16 NSOP ★ 此篇产品叙述为功能简介,如需要完整产品 PDF 资料可以联系许先生索取! VK2C21 适用于高抗噪声的小点数 LCD 应用 VK2C21 是采用 I2C 接口的通用型 LCD 控制暨驱动器,可选用 4 Common 或 8 Common 的驱动模式,最多可显示 128 点;本产品采用低耗电设计、在 3V 工作时只有 18uA 耗电流。高整合性脚位设计:比竞争者封装脚数更少、可显示点数更多;与系统控制芯片的传输只需 2 根信号线、外挂零件少、可降低客户系统成本。 VK2C21 内建有 128 Bit 显示内存,可降低主控 MCU 的负担;工作电压宽广: 2.4V ~ 5.5V ;提供 2 种图框扫瞄频率;内建调整电路可以指令设定 16 阶 VLCD 电压;提供全屏闪烁功能、有三种频率可选。最大可显示点数为 4 COM x 20 SEG 或 8 COM x 16 SEG 。 VK2C2x 系列具备低耗电、高抗噪声及高 ESD 防护能力。全系列包含 VK2C21 、 VK2C22 、 VK2C23 、 VK2C24 等。 VK2C22 已成功获得大陆、美国地区单相电表客户的认可及采用, VK2C23 及 VK2C24 适合于点数需求较大的三相电表的应用。 VK2C21 适用于家电、民生消费品、工业仪表、水表、农网表、瓦斯表等之应用。 VK2C21 提供 28/24/20SOP 及 16NSOP 封装,依封装不同、点数略有差异,有关点数及封装的选用。 ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● VK2C22 是一款存储器映射和多功能 LCD 控制 / 驱动芯片。该系列芯片显示模式有 176 点 (44 × 4)VK2C22 软件配置特性使 得它适用于多种 LCD 应用,包括 LCD 模块和显示子系统。 VK2C22 通过双线双向 I2C 接口与大多数微处理器 / 微控制器进行通信。 VK2C2X 系列为 I2C 介面、 RAM mapping 的 LCD 控制暨驱动 IC ,此系列以先进设计技术降低 IC 耗电、提升抗杂讯及 ESD 防护能力。全系列包含 VK2C22 、 VK2C23 、 VK2C24 等。 VK2C22 已成功获得单相电表客戶的认可及采用, VK2C23 及 VK2C24 适合于点数需求较大的三相电表的应用。 特性 ★工作电压: 2.4V ~ 5.5V ★内部 32kHz RC 振荡器 S ★ Bias : 1/2 或 1/3 ; Duty : 1/4 ★带电压跟随器的内部 LCD 偏置发生器 ★ I2C 接口 ★两个可选 LCD 帧频率: 80Hz 或 160Hz ★多达 44 × 4 位 RAM 用来存储显示数据 ★最大显示模式 44 × 4 : 44 SEGs 和 4 COMs ★多种闪烁模式 ★读 / 写地址自动增加 ★内建 16 级 VLCD 电压调整电路 ★低功耗 ★提供 VLCD 引脚来调整 LCD 工作电压 ★采用硅栅极 CMOS 制造工艺 ★封装类型: 48LQFP , 52QFP ★ 此篇产品叙述为功能简介,如需要完整产品 PDF 资料可以联系许先生索取! LCD 驱动 IC 推出 VK2C22 新 I2C 接口系列 本公司专注于 TN/STN LCD 的中小尺寸应用, VK162X 系列控制暨驱动 IC 已营销业界多年。 2010 年更展开 I2C 标准接口系列的新产品开发,此系列包含 VK2C22 、 VK2C23 、 VK2C24 等。 IC 特性强调低功耗、高抗噪声及高系统 ESD 防护能力,以高整合度的脚位包装,提供客户最大的显示点数。 VK2C22 是首先开发完成的型号, VK2C23 、 VK2C24 会陆续推出。 VK2C22 内建显示内存及 RC 振荡电路;工作电压宽广: 2.4V ~ 5.5V ; 2 种 Bias 分压: 1/2 & 1/3 ;最大显示点数可支持 4 Common x 44 Segment ( 52QFP )。提供 2 种图框扫瞄频率: 80Hz or 160Hz ;可由外挂电阻调整 VLCD 电压,也提供 16 阶可由内建指令调整的 VLCD 电压。透过 I2C 接口及多项内置电路, VK2C22 与系统控制芯片的传输只需 2 根信号线,大大省去系统零件及布线、降低客户系统成本。与其它同包装的产品, VK2C22 提供更多的显示点数。 VK2C22 适用于家电、车载、民生消费品、工业仪表等的 LCD 显示器的控制及驱动,高抗噪声及高 ESD 防护能力尤适合数字式 LCD 电表、水表、瓦斯表等。依包装不同尚有 2 种点数可选择: 4 Common x 40 Segment ( 48 LQFP )及 4 Common x 36 Segment ( 44QFP )。 ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● VK2C23 是一款存储器映射和多功能 的 LCD 控制 / 驱动芯片。该芯片的显示字段为 224 点 (56 SEG × 4 COM) 或 416 点 (52 SEG × 8 COM) 。 VK2C23 芯片的软件配置特 性使其适用于多种 LCD 应用,包括 LCD 模块和 显示子系统。 VK2C23 芯片可通过双 线双向 I2C 接口与大多数微处理器或微控制器进 行通信。 VK2C2X 系列为 I2C 介面、 RAM mapping 的 LCD 控制暨驱动 IC ,此系列以先进设计技术降低 IC 耗电、提升抗杂讯及 ESD 防护能力。全系列包含 VK2C22 、 VK2C23 、 VK2C24 等。 VK2C22 已成功获得单相电表客戶的认可及采用, VK2C23 及 VK2C24 适合于点数需求较大的三相电表的应用。 此系列內建显示记忆体及 RC 振荡电路;工作电压范围: 2.4V ~ 5.5V ;提供 2 种图框扫描频率: 80Hz or 160Hz ;可由外挂电阻调整 VLCD 电压,也提供內建可由指令调整 16 阶的 VLCD 电压;提供全屏闪烁功能、有三种频率可选。透过 I2C 介面及多項內置电路, VK2C2X 系列与系统控制晶片的传输只需 2 根信号线,大大省去系统零件及布线、降低客戶系统成本。 产品特性 ★工作电压: 2.4 ~ 5.5V ★内部 32kHz RC 振荡器 ★ Bias : 1/3 或 1/4 ; Duty : 1/4 或 1/8 ★带电压跟随器的内部 LCD 偏置发生器 ★ I2C 总线接口 ★两种可选的 LCD 帧频率: 80Hz 或 160Hz ★多达 52 × 8 位的 RAM 用于存储显示数据 ★显示模式: – 56 × 4 模式: 56 SEG × 4 COM – 56 × 4 模式: 56 SEG × 4 COM ★多种闪烁模式 ★读 / 写地址自动增加 ★内建 16 级 VLCD 电压调整电路 ★低功耗 ★提供 VLCD 引脚来调整 LCD 工作电压 ★采用硅栅极 CMOS 工艺制造 ★封装类型: 48LQFP , 64LQFP VK2C21最佳替代互换HT16C21高抗噪LCD液晶驱动I2C接口 设计开发资料.pdf VK2C22替代取代HT16C22高抗噪LCD液晶驱动IC设计指南.pdf HT16C23完全兼容替代VK2C23高抗扰I2C接口液晶驱动显示IC原厂开发资料.pdf HT16C21替代HT16C22取代HT16C23兼容HT16C24代替VK2C2X系列中文简介代理资料.pdf
个人分类: 液晶显示驱动IC|0 个评论
分享 点阵数字时钟(三)
levifly2008 2017-10-14 21:56
点阵数字时钟(三)
问题出现了,第一反应不应该是逃避,而应该是找到问题所在,这也是用博客日志的形式记录下来自己犯错,查错的目的,告诫自己。 从这张图就明白了,原来问题很好解决,只需要把显示的数据看做两个16位数据,由于自己的原因把高低顺序搞反了就是了,原来在高位的现在依旧高位,是不过硬件的原因它看上去在低位了 。 第一行,就是我准备存在缓冲区里的数据,把点阵里的要显示的内容左对齐的形式存在一个长整型变量里; 第二行,把缓冲区里的高16位与低16交换,得到的就是应该发送的数据的状态,这样看到的效果就会像一开始那样期待的样子了; 现在原理搞懂了,那么就实战一下,测试图像在下面
个人分类: DIY作品|731 次阅读|0 个评论
分享 点阵数字时钟(二)
levifly2008 2017-10-14 21:12
点阵数字时钟(二)
在点亮这个点阵之前,也是全部都不亮,我顿时傻眼了,又是找程序的问题,然后用示波器看波形,也没问题啊,就是不亮,测量单片机的管脚也有输出啊,怎么回事?难不成我把片子焊坏了?还两块板子都焊坏了? 为了验证一下,我又找了第三块板子,只是焊了一个点阵块,结果呢,由于我过于小心,焊接之后依旧不亮,这就不对了,同样的事连续出了三次。直到我无意的按动板子,点阵亮了,这下让我找到了问题,我按了按板子上的所有远见,才发现是这个片子的封装做的太窄了,导致焊接之后,没办法,手头只有一个尖头烙铁,接触不是很好,经过重新补焊之后,终于可以显示了。 这给我折腾的够呛的,很快,第二个问题又来了,显示的数字是不完整的,这个又是个咋回事呢? 就仔细再看原理图呗,找度娘也没有什么发现,只是说这个片子发送的是从高位发送,那我就自己写个简单的测试程序一实验不就直到问题了么? 这个得拿片子来说了,MBI是高位OUT15,低位OUT0,我把显示的点自左向右排列,但是输出数据的片子也这么排列,那就是这的问题了,而且级联的片子还没有从OUT0开始,我晕,这下是不是无法正常显示了都?! 这样说估计说不明白,我把我自己整理的图片剪切上来,留个纪念,也给需要的人提供一些经验吧。 第一行,是我要显示的样子,可惜啊,由于自己经验不足,加上后期查错不认真,导致现在很麻烦。发送的数据是从1-6,那么显示的也应该如此,这就是MBI5026的好处。由于使用两片MBI5026级联,第一片16个输出全占,第二片使用14个,这样正好满足30列的显示,我测试之后发现我把低16位放在了前三位,而高16位放在了后三位,整个看起来就好比一个长整型数据高地位被颠倒了一样。 第二行,是我第一次发送数据后的效果,橙色点标注的是点阵的两端和中间我漏的两个管脚,因为第二片是从OUT15开始连的,连到最后就把OUT1,OUT0落下了,那自己酿的苦果自己偿吧,一开始觉得这样下去无法正常显示了,一度觉得这个板子要废了,我抱着汲取经验教训的态度又研究了一番。 第三行,这个图是我把上图第二行的数据左移了3位后才有的效果,一开始想不明白怎么回事,后来在纸上画了一下,就明白了。前两张图就是的自己在郁闷的状态和晚上熬夜的时候搞的,脑子不清楚的时候还是不要想事情了。 想明白了就开始干吧~!
个人分类: DIY作品|810 次阅读|0 个评论
分享 点阵数字时钟(一)
热度 1 levifly2008 2017-10-14 20:19
点阵数字时钟(一)
一转眼,距离上次我DIY有几年了吧,现在回想,感觉都好久好久以前的事了。我好久没有坐下来写些什么了,这几天一直捣鼓自己的点阵数字钟,所以就想着记录下来,以便以后有个留念吧。 一直喜欢LED,喜欢LED亮的时候的画面,工作以后,结婚之前,自己捣鼓过一个POV,参考国外网友的作品,可以绑在山地车上,整体效果是有了,但还不算完善,之后想完善下去后做成成品,但苦于自己当时仅仅是做着玩,想发展成品需要整合的东西实在太多,就没有继续,就做了几个自己跟骑友玩了,其实在当时还是成本太高了,一个要100多,那会儿一个月工资才那么点儿,谁舍得买?这里就不细说了,回头专门写篇博客细说,再后来,我在的城市空气质量越来越差,周围玩山地车的人也慢慢的不玩了,所以就放弃了这个想法,所以就想用LED再做点儿啥,想做数字时钟,无奈苦于没有整块的时间,之后,就是人生大事了,有了娃,时间一下子被剥夺了…… 终于,孩子上幼儿园啦!我也有了点儿空闲,那么,手头还剩点儿之前DIY的零碎,那么就继续整吧,我陆续添置了其他东西,首先把一直念想的示波器给买了,之前总犹豫要不要买一个,不买自己有时候真需要,索性还是买了,还是偷偷买的 ,不是有句话么:工欲善其事,必先利其器。之前一直在网上用严泽远的东西,之所以买他的东西,是因为他的辉光钟很是精致,也是从他那里感觉到也可以把电路板设计的这么漂亮,也包括外观的设计,从QS30到YS18,辉光管在他的设计下从新恢复了生命力,要说起这个辉光管,我认识它还得从我上大学那会儿说起,记得一年系里要搞一个什么活动,让我们设计自己的作品,实验室的老师找到我们让我们给他做辉光钟,那会儿我早已在《无线电》上看到过别人的作品了,也就是从那时候我才了解有这么种管子,后来我没有去做这个钟,那会儿总觉得这是个为别人做嫁衣的事,也就不去掺和了,把这好事让给一个哥们儿了,结果他自己比着图自己焊了一个,居然还在院里得了一个头等奖,大家可想而知吧,这不明摆着么。 我后来做过的数字钟不是LED数码管,就是拿液晶屏来显示,也是满满的实验室的味道,实在是找不到很满意的设计,后来严同学出了一款点阵数字钟,让我眼前一亮,他用的6mm的5X7的方格点阵,这种点阵本身就是电梯上的楼层显示的那种,显示效果比圆点的点阵好上十倍不止,加上富有艺术的设计,让这个数字钟又一次勾起了我的对她的向往。看了严同学的设计,觉得如果自己动手,那乐趣应该比直接从他手里买更要多的多,效果不敢说多么的好,至少我乐在其中。之后就是疯狂的的找那种点阵,找遍了TB,找遍了电子市场,也难觅到,这事儿就又搁置了。 转眼娃也大了,我的空余时间逐渐增多,工作之余,一次,我在淘宝找东西的时候,无意看到了有5X7的方格点阵,可是尺寸略小,3mm的,找到了总比没有强,简单问了卖家,然后买下20尝试下效果,之后我就是加班画图喽,好几年都不摸这些软件了,现在重新拾起来还真不是容易的,我花了一周的时间重新把以前做过的库元件依次添加,还好之前做过几次板子,有点儿基础,这样,我把点阵的图画的差不多了,开始测试点阵的时候,我从原件盒里拿来,一量,怎么不对劲啊?顿时,想打人的心都有,我的这个怎么跟严泽远的不一样啊,他的7个阳极,5个阴极,我的5个阳极,7个阴极?这可怎么办啊,这不是说我的是跟他反的?我的是共阴极,他的是共阳极? 打开我的淘宝再看,NND,上面的型号跟图片上根本不一致,此时,距离我买这点阵已经过去一月有余,我顿时怒火冲天,联系卖家,卖家也只是轻描淡写的说了几句道歉的话,我想道歉不用,只要给我换货就好,结果,结果,他说没有了~~~,只有这种,此时我才发现我不该如此的信任这里的卖家,由于吃了亏,只能自己咽下去,谁让咱自己不验货呢,真是觉得卖电子产品不会这么差劲,没想到啊~~~,继续的再网上找啊找啊,怎么都找不到同样尺寸的共阳极的5X7方格点阵!我此时此刻才知道严同学为什定制那么多点阵了,因为这个玩意儿,真的不多,只有用到的人定做,我又一次把自己逼到了绝路上。 没办法,既然图也画了,那我就索性画完吧,让后一边继续找着我想要的5X7的点阵,等我板子都打样回来了,点阵还没有着落呢,结果我脑子一热,先拿这个焊上去再说,也许是许久没有用脑子了,居然会有这样的想法,当然结果也很惨,就是自己给自己找不痛快。 问题开始了: 因为我用的是MBI5026,这个片子是台湾一家公司出的,专门用于LED显示屏上的,因为之前拿它做过POV,再加上板子面积太小,不想用那么多74HC595,所以就换成这个了。我还自认为MBI5026输出高电平可以驱动LED阳极呢,真是傻的不行不行,后来一直纠结,是不是时序搞错了?纠结来纠结去,就没仔细去看Datesheet,都搞了几天了,自己焊了两块板子还,关键的关键每块板子都表现不一样,有一块板子是会亮一个点,一块全灭,这下我就糊涂了,到底问题处在硬件还是我的程序有问题? 我又认认真真的看了MBI的文档,才放弃了这个方案,因为人家是要灌电流的,而不是拉电流,所以不会驱动LED阳极,这个判断当我再次从TB上购得我所需的点阵的时候,得以验证。当一个个小点被点亮的时候,我才发现,自己真的要好好反省一下了。 刚刚点亮时,心情五比激动,其实那是在晚上
个人分类: DIY作品|1431 次阅读|1 个评论
分享 单片机_汇编编程_8_并行口驱动数码管显示
chenht7 2017-9-28 16:03
单片机_汇编编程_并行口驱动数码管显示 时间:2017/9/28 # 一、任务描述 通过汇编编程,通过单片机的IO口,直接输出驱动数码管,从而实现在数码管上,依次从0到9进行循环显示。 # 二、任务实现 ## 2.1 硬件连接 目前的硬件线路如下: 主控芯片: STC 89C52 输入引脚: 无 输出引脚: P0.0 - P0.6 驱动共阳数码管 工作频率: 12MHz ## 2.2 分析命题 这次主要的功能如下: 1. 数据有次序的进行显示 -- 涉及到了调用延时的功能 2. 发送的字符串信号是不同的 -- 需要进行数据的查表 ## 2.3 确定算法 该算法的主要实现方式是,先通过将数据写入数据表,然后依次地读取数据表中的数据,将其通过端口,将其发送到共阳数码管中,从而驱动数码管进行对应的显示。 ## 2.4 流程图 ## 2.5 程序 ``` ORG 00H START: MOV R1, #00H; 设置寄存器指向起始处 NEXT: MOV A, R1; 给寄存器赋初值 MOV DPTR, #TABLE; 指向数据表 MOVC A, @A+DPTR; 进行提取数据 MOV P0, A; 数据输出 LCALL DELAY; 进行延时 INC R1; 计数减一 CJNE R1, #10, NEXT; 当计数器的计数满10个,则跳转 LJMP START DELAY: MOV R5, #100; 原先是20,现为了使得显示的更好些,将数值改为100,延时1ms左右 D2: MOV R6, #20 D1: MOV R7, #248 DJNZ R7, $ DJNZ R6, D1 DJNZ R5, D2 RET TABLE:; 针对于共阳发光二极管,单片机的上拉能力弱,但是下拉能力比上拉要强一些 DB0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 END ``` # 三、总结 这个实现的效果,在仿真软件上,貌似效果不怎么样,而在这个实际的开发板上,显示出来的效果还是挺不错的。 # 参考资料 《单片机的编程与汇编程序案例》, https://wenku.baidu.com/view/9018d6795acfa1c7aa00cc58.html
个人分类: 汇编|313 次阅读|0 个评论
分享 单片机_汇编编程_报警产生器
chenht7 2017-9-28 09:43
单片机_汇编编程_报警产生器
单片机_汇编编程_报警产生器 时间:2017/9/28 # 一、任务描述 通过汇编编程,从而控制P1.0口输出1kHz和500Hz的音频信号驱动扬声器,作为报警信号。要求1kHz的信号响100ms,500Hz的信号响200ms,交替进行。P1.7接开关进行控制。当开关合上的时候,报警信号开始响。当开关断开的时候报警信号停止。 # 二、任务实现 ## 2.1 硬件连接 目前的硬件线路如下: 主控芯片: STC 89C52 输入引脚: P1.7 - 开关 输出引脚: P1.0 - 功放 工作频率: 12MHz 其中的功放为,利用LM386来进行搭接的。 ## 2.2 分析命题 这次主要的功能如下: 1. 信号的频率不同 -- 涉及到了调用延时的功能 2. 发出的频率有两种 -- 需要进行两次判断 3. 不同频率的信号是高低电平进行跳变的 -- 需要利用标志位进行取反 ## 2.3 确定算法 影响LED显示的因素有两种,其中最高优先级的是,按键信号。然后次一级的优先级是,标志位。前者影响要不要进行输出动作,而后者则是影响到底是要进行的输出的频率是多少。 而控制频率的算法就是,采用调用延时的次数,来控制总的频率。 ## 2.4 流程图 ## 2.5 程序 ``` FLAG BIT 00H ; 设置标志位 ORG 00H START: JB P1.7, START ; 如果按下,则进行复位,不发信号 JNB FLAG, NEXT ; 判断需要输出高频还是低频 MOV R2, #200 ; 设置计数次数 DV: ; 500Hz CPL P1.0 ; 对P1.0口输出进行取反 LCALL DELY500 ; 长调用DELY500函数 LCALL DELY500 ; 长调用DELY500 DJNZ R2, DV ; R2寄存器减一,如果R2不等于0,则跳转到DV CPL FLAG ; FLAG取反 NEXT: MOV R2, #200 ; 给R2赋计数次数 DV1: ; 1000Hz CPL P1.0 ; P1.0口取反 LCALL DELY500 ; 长调用DELY500函数 DJNZ R2, DV1 ; R2寄存器减一,如果R2不等于0,则跳转到DV1 CPL FLAG ; FLAG取反 SJMP START ; 跳回起始处 DELY500: ; 延时0.5mS MOV R7, #250 ; 设置计数次数 LOOP: NOP DJNZ R7, LOOP RET END ``` # 三、总结 这次主要是设计到了两个判断,以及针对于两个不同的判断情况,从而采用不同延时方式。 # 参考资料 《单片机的编程与汇编程序案例》, https://wenku.baidu.com/view/9018d6795acfa1c7aa00cc58.html
个人分类: 汇编|484 次阅读|0 个评论
分享 08 17 我在电子工程世界安家
热度 1 luqingchun 2017-8-17 11:01
从这个月开始,所有的渠道都已经铺好,开始我的MCU 分销之旅
个人分类: MCU|1007 次阅读|1 个评论
分享 51单片机定时器无限使用
Atle 2017-6-15 15:26
/************************************* *** 定时器完成 *** 两灯不同频率闪 ***************************************/ #includereg52.h #define FOSC (11059200L) #define WANTTIME (1) //单位MS 进中断的时间 #define VTL ((65536-FOSC*WANTTIME/12000)%256) #define VTH ((65536-FOSC*WANTTIME/12000)/256) #define TIMEISUP (1) #define TIMEISNOTUP (0) #define TIMERCOUNT (2) #define TIMER1 (0) #define TIMER2 (1) #define LED1DELAYTIME (100) #define LED2DELAYTIME (300) sbit Led1 =P0^0; sbit Led2 =P0^1; unsigned int Timers ; void LedEffect(); void Init(); //iTimer是定时器数组的下标 //xTime是要定时的时长,单位ms unsigned char xDelay(unsigned char iTimer,unsigned int xTime) { if(Timers ==0) { Timers =xTime; return(TIMEISUP); } return(TIMEISNOTUP); } void main() { Init(); while(1) { LedEffect(); } } void Init() { TMOD=0X01; TL0=VTL; TH0=VTH; ET0=1; TR0=1; EA=1; } void InitT0() interrupt 1 { unsigned char i; TL0=VTL; TH0=VTH; for(i=0;iTIMERCOUNT;i++) if(Timers 0) Timers --; } void LedEffect() { if(xDelay(TIMER1,LED1DELAYTIME)==TIMEISUP) Led1^=1; if(xDelay(TIMER2,LED2DELAYTIME)==TIMEISUP) Led2^=1; }
408 次阅读|0 个评论
分享 最近在学单片机
陈凌 2017-6-11 08:48
最近在学51单片机,蛋酥厚厚一本书啃不进去。看视频倒是很容易懂
个人分类: 学习单片机|215 次阅读|0 个评论
分享 Linux学习日志(17)- 关于Makefile
懒猫爱飞 2017-3-30 17:56
Linux学习日志(17)- 关于Makefile
Makefile 是啥东东,如果在 windows 下开发单片机或其它程序用 IDE 用习惯了,可能对这个 makefile 是一头雾水。 Makefile 是一个文件,它定义了定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,在 windows 下 IDE 开发, IDE 中已隐藏了包含了 makefile 文件,但在 linux 下,我的地盘我做主,编写 makefile 是 linux 世界编程不可回避的话题。 Make 是 20 世纪 70 年代发明的编程项目编译的辅助工具, make 的编译思路很简单,如果源程序发生了改变,并需要重新构建程序或才其它输出文件时, make 会先查看时间截哪些改变了,并按照要求重新构建这些文件,而不会浪费时间重新构建其它文件。 GNU make 是 make 工具的 GNU 版本(关于 GNU 是什么,我觉得学习 linux 人都应该知道 ^_^ ),它已成为工业标准,它属于自由软件,目前非常流行。 小知识 ? GNU 计划,又称革奴计划,是由 Richard Stallman 在 1983 年 9 月 27 日公开发起的。它的目标是创建一套完全自由的操作系统。 Richard Stallman 最早是在 net.unix-wizards 新闻组上公布该消息,并附带《 GNU 宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。为保证 GNU 软件可以自由地“使用、复制、修改和发布”,所有 GNU 软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款, GNU 通用公共许可证( GNU General Public License , GPL )。即“反版权”(或称 Copyleft )概念。 -- 来源 . 百度百科 在终端输入 make 命令就会调用 make 工具, make 会在当前目录按照文件名顺序寻找 makefile 文件,依次按照: GNUmakefile,makefile,Makefile 查找,如果找到其中的任何一个,就读取并按照其中的规则执行,否则报错。 小提示 ! 在网上流传一份《跟我一起写 Makefile 》,作者是:陈皓,很适合新新学习,下面这个网址也可以看看: http://wiki.ubuntu.org.cn/%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile:MakeFile%E4%BB%8B%E7%BB%8D 打铁还要自身硬,想深入学习 linux 还是要学好基本功,好吧,现在跟着一个小程序,总结一下 makefile 。 1 .目标 写一个 hello.c, 使程序输出 hello,Ubuntu!, 创建 Makefile 文件,输入以下内容并保存。 all: gcc hello.c 注意 gcc hello.c 前面是 tab 键空出的缩进,不能用空格键代替。 然后执行命令: make ,生成以下文件: mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ ls -l 总用量 9 -rwxrwxrwx 1 root root 7344 3 月 30 12:47 a.out -rwxrwxrwx 1 root root 82 3 月 30 12:46 hello.c -rwxrwxrwx 1 root root 18 3 月 30 12:47 Makefile 执行命令: ./a.out, 输出以下内容: mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ ./a.out Hello ubuntu! Makefile 的基本语法格式是: target : prerequisites command ? target 是编译目标,在编译的时候输入 make target 就可以执行 target 规则。 Target 既可以是上档文件,也可以是可执行文件,还可以是一个标签,如前面写的 Makefile 中的 all 。 ? prerequisites 是依赖关系文件,即生成 target 所需要的文件或目标。 ? command 是生成 target 所需要的命令 makefile 会根据时间戳来决定哪些文件需要重新编译,对于为个规则来说明一下,如果 prerequisites 中如果有一个以上的文件比 target 文件更新的话,则 command 所定义的命令就会被执行。 再回头看一下 hello.c 的 Makefile 文件内容: all: gcc hello.c 整个 Makefile 只定义了一个目标 all, 也没有任何依赖关系, all 目标对应的命令为 gcc hello.c, 这个目标 all 是一个标签,也是第一个目标,将第一个目标设置为 all 是一个习惯,当然可以改为任何一个标签。终端输入 make ,不指定任何编译目标,默认执行第一个标签的规则,也就是说输入 make 和 make all 实际上是赞同的。 2 .伪目标 假如一个目标名与当前目录下的某一个文件名相同,那么 make 的时候会出现什么情况?好吧,实践出真知,操作一下应知道了 ^_^ mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ cp a.out all mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ ls -l 总用量 16 -rwxrwxrwx 1 root root 7344 3 月 30 13:09 all -rwxrwxrwx 1 root root 7344 3 月 30 12:47 a.out -rwxrwxrwx 1 root root 82 3 月 30 12:46 hello.c -rwxrwxrwx 1 root root 18 3 月 30 12:47 Makefile mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ make make: 'all' is up to date. mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ 把刚才生成的 a.out, 复制一份,命名为 all, 然后再 make 。可以看到提示信息是“ all ”是最新的,根据 make 处理流程,“是最新的”意味着 all 目标对应的规则永远不会被执行,哪怕实际需要编译的文件已经修改过,也不会被重新编译。 如果程序在编写时 Makefile 的时候,一不小心出现这种问题,那么对程序的编译是致命的,针对这种情况, Makefile 有一个解决办法,引入了一个新的目标 — 伪目标。伪目标是一个标签,这个目标只执行命令,不创建目标,避免目标与工作目录下的实际文件名冲突。 伪目标的写法如下所示: .PHONY: 标签 对于前面这个例子,将 Makefile 文件稍微修改一下,在末尾增加一行: .PHONY:all 代码如下所示: all: gcc hello.c .PHONY:all 将 all 设置为伪目标后,尽管当前目录下有同名为 all 文件,但在终端输入 make 命令, all 的命令会被正确执行。 在实际应用中,通常会有一个 clean 目标,这个目标几乎都会被设置为伪目标,用于清除编译产生的中间文件和可执行文件。在进行源文码打包或才发布的时候,先通过 make clean 命令清除,可以得到干净的代码文件。 继续在 hello.c 的 Makefile 文件中增加一个伪目标 clean, 如下所示: .PHONY:clean -rm –v a.out( 注意前面用是的 tab 做的缩进 ) clean 对应的命令是 -rm –v a.out, 就是一个普通的删除命令,加 -v 参数是显示删除列表。完整的 Makefile 如下所示: .PHONY:all clean all: gcc hello.c clean: -rm -v a.out 如果一个 Makefile 文件有多个伪目标,则可以分多行单独声明,也可以将多个目标一并声明,各伪目标之间用空格隔开。 clean 伪目标的命令为 -rm ,如果在 rm 命令前加“ - ”,含义是如果这条命令执行失败, make 将忽略这个错误,继续往下执行;如果不加“ - ”,则 make 停止。一个工程连续两次 make clean 后,那么第二次 clean 的时候,由于相关文件已经不存在,在加了“ - ”的情况下, clean 会提示出错,但被忽略,而不加“ - ”则不忽略。“ - ”的含义不仅仅对 rm 命令有效,对 Makefile 中的所有命令都有效,安等于 make –i 命令。 3 .自定义变量 make 支持在 Makefile 文件中定义变量,合理使用变量,能增加 Makefile 文件的通用性,并简化 Makefile 文件编写。一般的 Makefile 文件编写中,通常会为源文件、可执行文件以及编译参数等分别定义一个变量,并予以赋值,在编译规则中直接引用这些变量。 变量的定义和赋值方法通常如下所示: VAR = value 在用到变量的地方,通过符号“ $ ”和“()”一起来完成变量引用,如 $(VAR) 。 对于 hello.c 的 Makefile 文件,如果定义源文件 SRC 和可执行文件 EXE 两个变量,对 Makefile 文件进行如下修改: # makefile for hello.c EXE = hello SRC = hello.c .PHONY:clean all all: gcc -o $(EXE) $(SRC) clean: -rm -v $(EXE) 使用了自定义变量后,只需要将 EXE 和 SRC 两个变量进行修改,即可将这个 Makefile 文件用于其它文件编译,增强了通用性与可移植性。 如果变量的赋值有多个值,可直接在等号 (=) 后面列出,如下所示: SRC = hello.c test.c tmp.c 赋值除了直接用 = 号外,可以使用追加符号“ += ”进行追加,例如: SRC = hello.c SRC += test.c tmp.c SRC += hello2.c 如果赋值很长可以用换行符号“ \ ”进行换行处理,例如: SRC = hello.c \ Test.c \ Temp.c 可以在 Makefile 中加注释,对文件或者其中一些变量、规则进行说明,有助于文件的阅读与理解,注释行以“ # ”号开始并顶格。 4 . Makefile 变量 Make 本身有一些特殊变量可以在 Makefile 中使用,能进一步简化 makefile 文件的编写。这些特殊变量包括环境变量、自动变量和预定义变量。 环境变量 就是系统的环境。 Makefile 中基本可以直接引用几乎所有的环境变量,比如代表当前登录用户的 USER ,系统外部命令搜索路径 PATH 等,这些变量可以直接以 $(VAR) 的方式引用。 但是 make 对环境变量的处理有一个例外,就是 shell,make 在默认情况下会指定 Shell 为“ /bin/sh ”,而不是使用用户指定的其它用于交互的 shell 。 另外还有一个可以直接引用但需要小心使用的环境变量 -PWD , PWD 的值是 make 开始运行时的路径。但是,它可能与 make 当前正在解释执行的 Makefile 文件所在的路径不一致,不能认为它一定就是 Makefile 所在的路径。 如果在 Makefile 中定义了一个与系统环境变量同名的自定义变量,则自定义会覆盖系统变量的值,这点一定要注意。 自动变量 不用定义,且会随着上下文的不同而发生改变。 Make 的自动变量都是一些比较难记信的符号,都以“ $ ”符号开头。使用了自动变量的 Makefile 文件读起来会显得抽象生涩一些。常用的 make 自动变量如下所示: ? $@ 规则的目标文件名 ? $ 规则的目标的第一个依赖文件名 ? $^ 规则的目标所对应的所有依赖文件的列表,以空格分隔 ? $? 规则的目标对应的依赖文件新于目标文件的文件列表,发空隔分开 ? $(@D) 规则的目标文件的目录部分(如果目标在子目录中) ? $(@F) 规则的目标文件的文件各部分 ( 如果目标在子目录中 ) 在前面例子的基础上增加一个源文件 hello1.c, 更改一下 Makefile 文件,添加一下自动变量, Makefile 文件修改如下所示: 1 # makefile for hello.c 2 EXE = main 3 OBJ = hello.o hello1.o 4 SRC = hello.c hello1.c 5 6 EXE:$(OBJ) 7 gcc -o $(EXE) $^ 8 9 .PHONY:clean 10 11 clean: 12 -rm -v $(EXE) 修改后的 Makefile 增加了以下几点内容: F 增加了目标和依赖关系 F 编译多个 C 文件,多个文件用空格隔开 F 使用了自动变量 第 6 行 EXE:$(OBJ) ,是说可执行文件依赖于目标文件,目标文件有更新,因此才会重新编译生成可执行文件。编译命令也用了自动变量 $^, 在这里对应所有生成的目标文件。可执行文件名不一定要和源文件相同或者有关系,可以任意取,在这个例子中将可执行文件名设置为 main 。这个 Makefile 的 make 结果如下所示: mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ make gcc -o main hello.o hello1.o mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ ls -l 总用量 20 -rwxrwxrwx 1 root root 7344 3 月 30 14:08 hello -rwxrwxrwx 1 root root 90 3 月 30 14:43 hello1.c -rwxrwxrwx 1 root root 1052 3 月 30 14:43 hello1.o -rwxrwxrwx 1 root root 82 3 月 30 12:46 hello.c -rwxrwxrwx 1 root root 1072 3 月 30 14:43 hello.o -rwxrwxrwx 1 root root 7396 3 月 30 15:33 main -rwxrwxrwx 1 root root 147 3 月 30 15:33 Makefile 自动变量 用于定义程序名称及传递给这些程序的参数和标志位等。常见的预定义变量和描述如下所示: ? AR 归档维护程序,默认值为 ar ? AS 汇编程序,默认值为 as ? CC C 语言编译程序,默认值为 cc ? CPP C 语言预处理程序,默认为 cpp ? RM 文件删除程序,默认值为 rm –f ? ARFLAGS 传递给 AR 程序的标志,默认值为 rv ? ASFLAGS 传递给 AS 程序的标志,默认值无 ? CFLAGS 传递给 CC 程序的标志,默认值无 ? CPPFLAGS 传递给 CPP 程序的标志,默认值无 ? LDFLAGS 传递给链接程序的标志,默认值无 利用自动变量,再次修改 Makefile 文件,如下所示: # makefile for hello.c EXE = main OBJ = hello.o hello1.o SRC = hello.c hello1.c CC = gcc CFLAGS = -o LDFLAGS = -L . -lFOO EXE:$(OBJ) # gcc -o $(EXE) $^ $(CC) $(CFLAGS) $(EXE) $^ .PHONY:clean clean: # -rm -v $(EXE) -$(RM) $(OBJ) $(EXE) 再次编译一下,结果如下所示: 由结果可以看出,能过预定义变量传递的参数全部生效了 ^_^ 5 .隐式规则和显式规则 前面修改的 Makefile 文件中 EXE:$(OBJ) , EXE 依赖于 OBJ ,但是整个 Makefile 只定义了 EXE 的生成规则,并没有给出 OBJ 的生成规则,但为什么编译却没有出错呢? 这是因为 make 有一些既定的目标生成规则,称之为隐式规则,例如对于一个 file.o 的文件, make 会优先寻找同名的 file.c 文件,并按照 gcc –c file.c –o file.o 的编译规则生成 file.o 文件。对于不同的编程语言,有不同的隐式规则,所以一般来说,不推荐用隐式规则。 显式规则是用户自定义的规则,在使用隐式规则有隐患的情况下,更应该使用显式规则,明确指定生成规则,例如前面提到的隐式规则,用显式规则来定义如下所示: OBJ:$(SRC) $(CC) –o $(OBJ) –c $^ 如果不用自定义变量,还可以这么写,为称为模式规则: %.o:%.c $(CC) –o $(OBJ) –c $@ 到现在为止,已经得到一个基本比较完整的 Makefile 文件。只要修改文件的头三个变量,就能用于其它工程编译,这也可以说是一个基本 Linux 应用程序 Makefile 文件的框架。 6 . make 命令 一个工程编写了 Makefile 文件后,通常只需要在当前目录下输入 make 命令即可完成编译。然而实际上 make 命令本身可以接受参数的,完整的用法如下所示: make 选项可以指定 make 的工作行为,宏定义可以指定执行 Makefile 的宏值,目标则是 Makefile 中的目标,包含伪目标,这些参数是可选的,各参数之间用空格隔开。 Make 常见参数如下所示: 选项 说明 -C dir 指定 make 开始运行之后的工作目录为 dir ,默认为当前目录 -d 打印除一般处理信息之外的调试信息,例如进行比较的文件的时间,尝试的规则等。 -e 不允许在 makefile 中对环境变量赋新值,即丢弃与环境变量同名的自定义变量 -f file 使用指定文件 file 为 makefile 文件 -i 忽略 makefile 运行时命令产生的错误,不退出 make -I dir 指定 makefile 运行时的包含目录,多个包含目录用空格分隔 -S 执行 makefile 时遇到错误即退出,这是 make 的默认工作方式,无需指定 -v 打印 make 版本号 Makefile 编写上是一个复杂的工作, Makefile 还有很多复杂和灵活的语法,这里不多总结了,以后用到了再记录吧。如果有空想深入了解,可以参看 GNU 的 makefile Manual^_^ 最后,再吼一下俺的口号: 每天进步一点点,开心多一点 ^_^ --2017年3月30日 17:56:27
个人分类: linux学习日志|1007 次阅读|0 个评论
分享 祝电子工程世界鸡年大吉大展宏图
热度 3 woaieew 2017-1-6 10:38
首先:祝电子工程世界鸡年大吉大展宏图! 新的一年又要开始了,回想二十多年的电子电源的学习工作生涯,今天有些感慨,深知知识无限,永远没有止境,唯有不断学习,不断进取。 之前一直从事开关电源的设计,多年来,虽然积累了一些经验,但是知识是不断进步和更新的,还要在电子工程世界里继续吸取营养,不断进步。 2016年的年末注册了电子工程世界,是为了圆二十多年来未实现的一个梦,那就是单片机的学习和应用。虽然在大学里学习过,自己也自学过,始终没有应用到实际的产品设计中。 前不久一个从美国回来一起做太阳能光伏项目的工程师,他用DSP单片机设计的开关电源很成功,我很受启发,更重要的是他也50多了,比我小一岁。他鼓励我继续学习单片机,用于数字电源的开发中。因为他用的是PIC的DSP系列,技术性能很好,在他的建议下,我开始了自学单片机PIC,同时也学习C51,为了获得更多的学习资料和学习机会,我注册了 电子工程世界 ,在这里学到了很多有用的知识,在此对电子工程世界这个平台表示感谢! 新的一年我会跟着电子世界的脚步继续前行,在电子世界的知识海洋里吸取更多的知识营养,再次感谢电子工程世界!
个人分类: 自己的感想|1834 次阅读|3 个评论
分享 单片机同一个引脚产生两种方波,中间间隔1S循环产生
未来星辰 2016-11-22 23:04
如,当P1.2口检测到高电平是,单片机P1.0口输出一种方波,1S后输出另外一种方波(两种方波大小差别较大就行) 当P1.2口检测到低电平是,单片机P1.0无输出。 当P1.3口检测到高电平是,单片机P1.1口输出一种方波,1S后输出另外一种方波(两种方波大小差别较大就行) 当P1.3口检测到低电平是,单片机P1.1无输出。 我试过几种方式都不能成功,包括采用定时器和计数器,中断都试过,仍然不行,求大神帮忙啊,给个可行的方法都行。如有51的c程序更好。 本文来自论坛,点击查看完整帖子内容。
570 次阅读|0 个评论
分享 MSP430(G2553)IAP功能的移植与实现(原创文章,转载须注明出处)
housezhu 2016-11-12 13:00
MSP430(G2553)IAP功能的移植与实现(原创文章,转载须注明出处)
一、 什么是 bootlloader ? 在嵌入式操作系统中, BootLoader 是在 操作系统 内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用 操作系统内核 准备好正确的环境。因此整个系统的加载启动任务就完全由 BootLoader 来完成。 以上是百度百科上对 bootloader 的描述,但是我们这里所说的 bootloader 是为了实现单片机 IAP 功能,所编写的一段引导程序,从而实现我们 APP 的程序数据能够通过串口等通信方式写进 Flash 程序空间最终实现自编程和程序更新的目的,这就是我们这里说的 bootloader 。 二、 程序架构 具有 bootloader 的一个完整的应用系统程序分为两大部分: 1 、 APP 程序:应用系统功能实现层(通俗的讲就是我们自己要写的程序); 2 、 bootloader 引导程序:就是系统启动或复位时的入口程序,主要的功能包括时钟初始化、 Uart 通信初始化、判断是执行 boot 串口升级程序还是跳转执行 APP 程序。 Bootloader 的程序架构如下图所示 : 三、 bootloader 串口升级协议 主机发送数据格式:头码( 80H ) + 长度码 + 负载消息 + 校验和( CRC8 ) ,其中: 头码固定为 80H ,用于界定数据帧开始; 长度码:值为负载消息的总字节数; 负载消息的格式为: CMD+ADDR_L+ADDR_H+data ;其中, CMD 为一个字节的主机命令码; ADDR_L 和 ADDR_H 为 data 写入目标机 Flash 地址的高低字节值; data 为需要写入 Flash 程序空间的数据;检验和为所有负载消息按发送顺序先后对其 CRC8 ( x8+x2+x+1 )计算所得的校验值。 表 1 :主机命令表 命令描述 命令码 Byte-1 Byte-2 Byte-3 …… Byte-n 擦除段 12H ADDR_L ADDR_H X X X 擦除 APP 15H X X X X X 接收编程数据块 10H ADDR_L ADDR_H Data-0 …… Data-n 读取版本号 19H X X X X X 跳转至 APP 1CH X X X X X 注: X 表示没有该字段数据; …… 表示连续的数据。 1、 擦除段:由指定的地址开始擦除目标机 Flash 连续的 512 字节的程序空间。 2、 擦除 APP :擦除目标机的 APP 程序空间 3、 接收编程数据块:将接收到的数据写入目标机指定地址的程序空间 4、 读取版本号:读取目标机当前的 bootloader 的版本号 5、 跳转至 APP :一般用于 APP 程序更新完成后,指示目标机跳转到 APP 程序运行 目标机(从机)回应为单字节回应码,具体含义如下: 表 2 :目标机回应码 回应名称 回应码 具体描述 OK 0x01 命令执行成功 头码错误 0x51 数据帧头码错误 校验错误 0x52 数据帧校验错误 数据帧长度为 0 0x53 数据长度码为 0 负载消息长度超限 0x54 数据帧消息长度超过所允许的最大长度值 未知错误 0x55 协议未知错误 参数错误 0x5C 命令参数错误 命令错误 0x6C 根据协议无法解析该命令 Bootloader 版本号 0 至 255 版本号,不建议存在与以上回应码相重叠的版本号 四、 Bootloader 程序内存空间分布 为实现单片机的 IAP 功能和合理的使用单片机的存储空间,我们需要对单片机的内存(这里的内存指的是单片机上所有可利用的存储资源,包括 RAM 、 Flash )资源进行的合理的规划。以 MSP430G2553 为例,该 Bootloader 对其内存空间规划分布大致分为三个部分: RAM 空间、 Flash 中的 APP 程序空间、 Flash 中的 Bootloader 程序空间。 RAM 空间主要贮存着单片外设模块的寄存器(不可改变)、程序运行空间; Flash 中的 APP 程序空间存储着 APP 的代码数据和 APP 程序中的常量数据、 APP 层中断服务程序向量表、 APP 程序校验值等 Flash 中的 Bootloader 程序空间存储着 Bootloader 程序代码数据和 Boot 层中断向量表等 具体内存空间分配如下表所示: 表 3 :内存分配空间 内存标签 地址 描述 0x0000 外围模块贮存位置 __RAM_Start 0x01FF 0x0200 Boot 层预先定义的变量指定的内存空间 __NonReserve_RAM_Start(Boot) 0x0205 0x0206 Boot 层内存空间 __NonReserve_RAM_Start(App) 0x021F 0x0220 APP 层内存空间 __RAM_End 0x03FF | | | | | | | | | INFOBOOT(Start) 0x1000 时钟模块寄存器校准值、 Bootloader 的程序代码数据空间 INFOBOOT(End) 0x10C0 | | | | | | | | | __Flash_Start(_AppChecksum) 0xC000 APP 程序代码数据检验和存储空间 _App_Start 0xC002 0xC003 APP 程序代码数据存储空间 _App_End 0xFBFF __Boot_Start 0xFC00 Bootloader 程序代码数据空间 __Boot_VectorTable 0xFFDF 0xFFE0 单片机中断向量表 程序复位向量 __Boot_Reset 0xFFFE __Flash_End 0xFFFF 五、 单片机 IAP 升级实例 现在假定单片机正在跑 Bootloader 升级引导程序,主机通过串口更新 APP 程序的基本流程如下: 读取 Bootloader 版本号 擦除 APP 程序空间 发送 APP 程序代码数据 1 发送 APP 程序代码数据 2 (中断向量映射表代码) APP 程序代码数据 CRC 校验值 APP 程序更新完成发送跳转至 APP 命令 现假定 APP 程序编译完成后的 16 进制代码数据如下: @C000 92 DD @c004 A2 D2 60 01 F2 F0 EF 00 29 00 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C F2 D0 10 00 29 00 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C 00 13 A2 D2 60 01 F2 D0 20 00 29 00 F2 E0 10 00 29 00 D2 E3 20 02 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C 92 C3 62 01 00 13 0F 12 0E 12 0D 12 0C 12 0B 12 B1 C0 10 00 0A 00 C2 43 2B 00 B0 12 E0 C0 3B 41 3C 41 3D 41 3E 41 3F 41 00 13 B2 40 DE C0 00 02 D2 D3 02 02 32 C2 03 43 B2 40 0B 5A 20 01 FF 3F D2 B3 03 00 07 24 D2 C3 03 00 D2 42 66 00 21 02 D2 43 22 02 00 13 1F 4C 01 00 0F 93 05 24 1D 53 CD 43 FF FF 1F 83 FB 23 30 41 F2 F0 DF 00 29 00 00 13 00 00 03 00 0C C1 28 C1 20 02 @fbce 30 40 26 C1 30 40 BC C0 30 40 04 C0 30 40 04 C0 30 40 F6 C0 30 40 04 C0 30 40 86 C0 30 40 04 C0 30 40 04 C0 30 40 04 C0 30 40 04 C0 30 40 04 C0 20 C1 q 该段数据分为三个部分:校验值、程序数据代码、中断向量映射表 校验值的地址位置为: 0xC000 ,值为: 92DD ( LSB , 92 为地址空间中的低字节, DD 为地址空间高字节) 同样依次将程序代码数据从地址 0xC004 开始写目标机对应的地址空间,中断向量表程序数据从 0xFBCE 开始写入目标机对应的程序空间。写入成功后发送 APP 跳转命令,程序跳转至 APP 层执行,此时 APP 更新成功。 通信举例: 1、 读取目标机版本号 主机发送: 8001194F 目标机回复: A1 (版本号) 2、 擦除 APP 程序空间 主机发送: 8001156B 目标机回复: 01 ( OK ) 3、 发送程序代码数据 主机发送: 801310DEFB3040F6C0304004C0304086C0304004C029 目标机回复: 10 (写入 Flash 的字节数); 55 (写入失败) 4、 发送程序跳转命令 主机发送: 80011C54 目标机回复: 01 ( OK )
个人分类: MSP430|2122 次阅读|0 个评论
分享 单片机系列(一):三种Uart串口收发处理实现机制
jianchaoyv 2016-10-21 09:36
嵌入式产品中串口Uart通讯是非常普通且常用的功能,具备Uart串口模块的单片机在其中断资源中存在的接收中断、发送中断,一般的思路都是在接收中断中逐个字节进行接收并将接收到数据放置到接收缓冲区,待接收完整的报文后进行整帧解析处理,然后再组发送帧,由发送中断将发送帧逐个字节发送出去。那么在接收多个字节报文时,不可能现总结一下曾经用过的实现方法。 第1种:中断中采用状态机 第2种:双缓冲区+定时扫描 第3种:DMA策略
个人分类: 单片机系列|3 次阅读|0 个评论
分享 MCS51系列单片机实用技术部分课件
vickyinfo 2016-10-12 18:00
MCS51系列单片机实用技术部分课件
个人分类: 课件资料|512 次阅读|0 个评论
分享 单片机知识重建
richthoffen 2016-8-22 21:53
精确延时 delay(int n) {int i;for(i=0;in;i++);} 11.0592M下延时时间为(24+16n)us call stack window-函数调用窗口 disassembly windows-放大镜 watch windows-眼镜-观察变量-输入变量名,单步运行,rst,stop analysis windows(logic analyzer)-只在程序运行调试显示,可以观察变量的时序图-还要再深入 trace windows system viewer windows serial windows--不了解 memory windows 4个不同的存储器显示页 显示内部数据存储器,外部数据存储器,外部程序存储器,不同地址的存储器内容 v:0,large_arrray,languagec_menu,y. 在address框中可以输入地址值和表达式来查看M的内容. view-periodic window update:使在程序执行时M的内容页可以被查看. symbol window 1所有函数或模块的公共符号2当前模块或函数的局部符号3代码行号和已经使用sfr 符号可能指的变量名函数名标号. command window registers windows-sec寄存器,sp sp_max,state寄存器 toolbox debug restore views svcs-software version configure system tool可以控制-第三方软件PC-Lint(需要安装) periserial.interrupt.timer.ioports rst(复位到程序最开始处) stop(停止全速运行) 全速运行 单步执行-有一个enter的直角 进入子函数内部 跳出当前的函数 运行到光标处 peri-ioports-port0,1,2,3 混合编程 void func(void) 转换为FUNC 无参数不含寄存器参数 名字变为大写转入目标文件 void func(char) 转换为_FUNC 带寄存器参数传递 void func(void) reentrant 转换为_?FUNC 函数包含堆栈内参数传递...可能是说有子函数 一般使用固定的cpu寄存器传递参数 #pragma NOREG PARMS:使用固定存储器位置传递参数,且返回值在cpu寄存器中 c编译器 存储模式 small page large
2 次阅读|0 个评论
分享 关于单片机通过串口输出中文/英文的方法
北北 2016-8-17 18:25
关于单片机通过串口输出中文/英文的方法: 本文只讨论STM32和瑞萨R8C系列MCU。 一:对于STM32F103: 1.对目标串口进行初始化配置,比如波特率、数据位等配置。 2.串口输出函数: //发送一个字节数据 void UART1SendByte(unsigned char SendData) { USART_SendData(USART1,SendData); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } 3.重定向函数:(注意在文件中加入头文件:#include stdio.h) // 描述 :重定向c库函数printf到USART1。 int fputc(int ch, FILE *f) { // 将Printf内容发往串口 。 USART_SendData(USART1, (unsigned char) ch); //while (!(USART1-SR USART_FLAG_TXE)); return (ch); } 4.经过以上配置,在main函数中就可以使用printf函数了! 如:printf("\r\n -------系统已启动!------ \r\n"); printf("\r\n --第%d次你好!--", counter); 二:对于瑞萨R8C系列: 1.对目标串口进行初始化配置,比如波特率、数据位等配置。 2.串口输出函数: //发送一个字节数据 void UART2_SendByte8B(u8 dat) { u16 Counter=0; u2tbl = dat; //8位数据位时,将要发送的数值放在发送缓冲寄存器的低8位。 //ti_u2c1 = 0则发送寄存器有数据,发送完毕后置1。 while( (!ti_u2c1) (Counter != 1000) ) { Counter++; } } 3.重定向函数:(注意在文件中加入头文件:#include "stdio.h") //重定向C库函数printf到UART2。 int fputc(int ch, FILE *f) { //将printf内容发往串口。 UART2_SendByte8B((unsigned char) ch); return (ch); } 4.经过以上配置,在main函数中就可以使用printf函数了! 如:printf("\r\n -------系统已启动!------ \r\n"); printf("\r\n --第%d次你好!--", counter); 三:总结: 1.对STM32未观察加入重定向函数且使用pintf后的影响; 2.通过对瑞萨R8C观察,发现加入重定向函数且使用pintf后,ROM被多占用了9.12KB, 所以没特别需要,咱就不要让串口输出中文/英文字符了。 完结-160817
个人分类: MCU|2528 次阅读|0 个评论

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-6-24 21:18 , Processed in 0.083954 second(s), 25 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2019 http://bbs.eeworld.com.cn/

返回顶部