在单片机编程中如何记住led的状态(亮度),只靠标志位

tianqi911 2018-06-13 12:47:40
有一个单片机问题,单按键,短按就是开,然后短按一次进入一个状态(一种亮度);长按2秒或以上就关机;

问题来了,再短按,开机还是长按结束之前的状态(亮度是之前的)。不使用rom,flash什么的,就是靠程序。

高人指点下吧,给点思路也是好的。
搞了一天了,没实现。


...全文
1210 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianqi911 2018-06-25
  • 打赏
  • 举报
回复
用case if-else 加标志位实现了。就是状态机。不用存储功能。就到哪一档了,靠标志位记住pwm的参数。
of123 2018-06-15
  • 打赏
  • 举报
回复
如果你坚持不能用 Flash 或 EPROM 这一类非易失性存储器的话,那就在关机时不要使芯片下电,仅仅关掉 LED 等显示性外设。 常见的设备关机时是使芯片下电的,轻触开机仅仅是采用上电自锁机制,保持供电。
of123 2018-06-15
  • 打赏
  • 举报
回复
看了好多遍,总算把楼主的问题看明白了。 楼主讨论的,实际上是关机(下电)后信息的保留问题。从信息论的角度看,其实他要保留的只不过是 1 bit 信息。 但是,这信息必须保留在非易失性存储器中。因为重新上点后,无论易失性存储器、寄存器还是程序状态,全都复位了。也就是说,无法保持原有的信息。你必须借助 Flash 或 EEPROM 这一类非易失性存储器保存最新的状态。 你可以在长按 2 秒的事件处理流程中,加入信息保存的操作。 如果你的芯片中集成的是 NOR Flash,那它是块擦除、字节写的。你可以用 2 比特表示当前的状态。 11 Null,也就是尚未写入信息。 01 初始状态。 00 高亮状态。 使用 2-bit,是因为我们需要附加的信息,即最后写入信息的位置。 每次写入时,找到 2-bit 序列的第一个 11,写入你的当前状态。当一块已经写满时,擦除块,在最低地址的最前 2-bit 写入状态。 上电后,查找最后一个不是 11 的 2-bit 单元。这就是你要找到的最新的关机前状态。 当然,你也可以选择每次都可能需要擦除块的方案,记录永远写在块的固定位置,例如开头。这样,你可以用 1-bit 信息:1 表示初始状态,0 表示高亮状态。 当你要写入时,如果新状态与原来写入的状态相同,就什么都不做。(其实上一个方案也可以这样做。) 如果原来是 1,现在要写 0,就直接写入。 如果原来是 0,现在要写 1,就擦除块。不用写,擦后就是 1。 此方案擦除的概率较高,会缩短 Flash 的寿命,同时也会使完成保存关机的时间加长。
笨狗先飞 2018-06-14
  • 打赏
  • 举报
回复
如果关机只是休眠模式的话,状态记在内存里就可以了, 如果关机会掉电的话,没有eeprom flashrom这些存储器的话,记忆肯定是丢失了.
of123 2018-06-14
  • 打赏
  • 举报
回复
我控制循环切换的方法,就是与 1 异或,自动从 1 变 1,再从 1 变 0。都不用标志变量,直接对控制寄存器中的位异或。
dceacho 2018-06-14
  • 打赏
  • 举报
回复
楼主问题没说明白 两个问题,你现在想要解决哪一个? 1. PWM控制LED亮度 2.掉电存储
tianqi911 2018-06-14
  • 打赏
  • 举报
回复
使用PWM做。
ckc 2018-06-13
  • 打赏
  • 举报
回复
关机的时候单片机是什么状态?如果是掉电之类的状态ram不丢数据的,那就用一个状态标记一下就行了 如果关机的时候ram丢 数据,那就只能写到eeprom之类的东西里
fly 100% 2018-06-13
  • 打赏
  • 举报
回复
用pwm控制的亮度?
第一章:AVR单片机C语言程序设计概述 1.1 AVR单片机简介 1.2 AVR Studio+WinAVR开发环境安装及应用 1.3 AVR-GCC程序设计基础 1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 断服务程序 1.8 GCC在AVR单片机应用系统开发的优势 第二章:PROTEUS操作基础 2.1 PROTEUS操作界面简介 2.2 仿真电路原理图设计 2.3 元件选择 2.4 仿真运行 2.5 PROTEUS与AVR Studio的联合调试 2.6 PROTEUS在AVR单片机应用系统开发的优势 第三章:基础程序设计 3.1 闪烁的LED 3.2 左右来回的流水灯 3.3 花样流水灯 3.4 LED模拟交通灯 3.5 单只数码管循环显示0~9 3.6 8只数码管滚动显示单个数字 3.7 8只数码管显示多个不同字符 3.8 K1~K4控制LED移位 3.9 数码管显示4×4键盘矩阵按键 3.10 数码管显示拨码开关编码 3.11 继电器控制照明设备 3.12 开关控制报警器 3.13 按键发音 3.14 INT0断计数 3.15 INT0及INT1断计数 3.16 TIMER0控制单只LED闪烁 3.17 TIMER0控制的流水灯 3.18 TIMER0控制数码管扫描显示 3.19 TIMER1控制交通指示灯 3.20 TIMER1与TIMER2控制十字路口秒计时显示屏 3.21 用工作于计数方式的T/C0实现100以内的按键计数 3.22 用定时器设计的门铃 3.23 报警器与旋转灯 3.24 100000秒以内的计时程序 3.25 用TIMER1输入捕获功能设计的频率计 3.26 用工作于异步模式的T/C2控制的可调式数码管电子钟 3.27 TIMER1定时器比较匹配断控制音阶播放 3.28 用TIMER1输出比较功能调节频率输出 3.29 TIMER1控制的PWM脉宽调制器 3.30 数码管显示两路A/D转换结果 3.31 模拟比较器测试 3.32 EEPROM读写与数码管显示 3.33 Flash程序空间的数据访问 3.34 单片机与PC机双向串口通讯仿真 3.35 看门狗应用 第四章:硬件应用 4.1 74HC138与74HC154译码器应用 4.2 74HC595串入并出芯片应用 4.3 用74LS148与74LS21扩展断 4.4 62256扩展内存 4.5 用8255实现接口扩展 4.6 可编程接口芯片8155应用 4.7 可编程外围定时计数器8253应用 4.8 数码管BCD解码驱动器7447与4511应用 4.9 8×8LED点阵屏显示数字 4.10 8位数码管段位复用串行驱动芯片MAX6951应用 4.11串行共阴显示驱动器MAX7219与7221应用 4.12 16段数码管演示 4.13 16键解码芯片74C922应用 4.14 1602字符液晶测试程序 4.15 1602液晶显示DS1302实时时钟 4.16 1602液晶工作于四位模式实时显示当前时间 4.17 2×20串行字符液晶演示 4.18 LGM12864液晶显示程序 4.19 PG160128A液晶图文演示 4.21 TG126410液晶串行模式演示 4.21 用带SPI接口的MCP23S17扩展16位通用IO端口 4.22 用TWI接口控制MAX6953驱动4片5×7点阵显示器 4.23 用TWI接口控制MAX6955驱动16段数码管显示 4.24 用DAC0832生成多种波形 4.25 用带SPI接口的数模转换芯片MAX515调节LED亮度 4.26 正反转可控的直流电机 4.27正反转可控的步进电机 4.28 DS18B20温度传感器测试 4.29 SPI接口温度传感器TC72应用测试 4.30 SHT75温湿度传感器应用 4.31 用SPI接口读写AT25F1024 4.32 用TWI接口读写24C04 4.33 MPX4250压力传感器测试 4.34 MMC存储卡测试 4.35 红外遥控发射与解码仿真 第五章:综合设计 5.1 多首电子音乐的选播 5.2 电子琴仿真 5.3 普通电话机拨号键盘应用 5.4 手机键盘仿真 5.5 数码管模拟显示乘法口诀 5.6 用DS1302与数码管设计的可调电子钟 5.7 用DS1302与LGM12864设计的可调式文电子日历 5.8 用PG12864LCD设计的指针式电子钟 5.9 高仿真数码管电子钟 5.10 1602LCD显示的秒表 5.11 用DS18B20与MAX6951驱动数码管设计的温度报警器 5.12 用1602LCD与DS18B20设计的温度报警器 5.13 温控电机在L298驱动下改变速度与方向运行 5.14 PG160128文显示日期时间及带刻度显示当前温度 5.15 液晶屏曲线显示两路模数转换结果 5.16 用74LS595与74LS154设计的16×16点阵屏 5.17 用8255与74LS154设计的16×16点阵屏 5.18 8×8LED点阵屏仿电梯数字滚动显示 5.19 用内置EEPROM与1602液晶设计的MD5加密电子密码锁 5.20 12864LCD显示24C08保存的开机画面 5.21 12864LCD显示EPROM27C256保存的开机画面 5.22 IIC-AT24C1024×2硬字库应用 5.23 SPI-AT25F2048硬件字库应用 5.24 带液晶显示的红外遥控调速仿真 5.25 能接收串口信息的带英文硬字库的80×16点阵显示屏 5.26 用AVR与1601LCD设计的计算器 5.27 电子秤仿真设计 5.28 模拟射击训练游戏 5.29 PC机通过485远程控制单片机 5.30 用IE访问AVR+RTL8019设计的以太网应用系统

27,517

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧