|
|

楼主 |
发表于 2019-12-9 16:44:46
|
显示全部楼层
我的问题已经解决,实时调节屏幕亮度和音量并掉电保存,代码如下:
- //用户数据库要保存数据的位置
- //[0x2000] 亮度
- //[0x4000] 音量
- //工程中设置的数据变量
- //[0x3300] 亮度
- //[0x3400] 音量
- void delayms(char cnt);
- void page(unsigned char page);
- void flash(int mod,long addr_flash,int addr, int len);
- void Backlight_brightness(unsigned char normal);
- void volume_Set(int volume);
- int main()
- {
- char cur_brightness[4] = {0, 0, 0, 0};
- char last_brightness[4] = {0, 0, 0, 0};
- char cur_volume[4] = {0, 0, 0, 0};
- char last_volume[4] = {0, 0, 0, 0};
- page(3);
-
- flash(0x5A, 0x2000, 0x3300, 2); //亮度
- flash(0x5A, 0x4000, 0x3400, 2);
-
- // read_dgus_vp(0x3300, last_brightness, 2);
- // if ((last_brightness[1] != 1) && (last_brightness[1] != 2) && (last_brightness[1] != 3) && (last_brightness[1] == 4) && (last_brightness[1] == 5)) //判断flash内是不是0
- // {
- // last_brightness[1] = 4;//首次烧录程序,nor flash内还没有数据,直接写入默认值(5档[亮度])
- // wirte_dgus_vp(0x3300, last_brightness, 1);
- // flash(0xA5, 0x2000, 0x3300, 2); //将0xAAAA处的数据写入flash
- // Backlight_brightness(0x64); //默认最大亮度
- // }
- // else
- // {
- // write_dgus_vp(0x3300, last_brightness, 1); //如果不是首次烧录程序,就将[亮度]写入档位处[0x3300]
- // Backlight_brightness(0x10 * last_brightness[1] + 0x16);//根据档位换算亮度
- // }
- while (1)
- {
- /****************亮度**************/
- read_dgus_vp(0x3300, cur_brightness, 1); //读取实时亮度
- if (cur_brightness[1] != last_brightness[1])
- {
- flash(0xA5, 0x2000, 0x3300, 2); //将数据写入用户数据库
- last_brightness[1] = cur_brightness[1];
- cur_brightness[1] = 0x10 * cur_brightness[1] + 0x16;
- Backlight_brightness(cur_brightness[1]);//更新亮度值
- write_dgus_vp(0xBB00, last_brightness, 1);
- }
-
- /***************音量***************/
- read_dgus_vp(0x3400, cur_volume, 1); //读取实时音量
- if (cur_volume[1] != last_volume[1])
- {
- flash(0xA5, 0x4000, 0x3400, 2); //将数据写入用户数据库
- last_volume[1] = cur_volume[1];
- cur_volume[1] = 0x30 * cur_volume[1] + 0xF;
- volume_Set(cur_volume[1]);//更新亮度值
- write_dgus_vp(0xCC00, last_volume, 1);
- }
- }
-
- return 0;
- }
- void delayms(char cnt)
- {
- int i = 0, j = 0;
-
- for(i = 0; i < cnt; i++)
- for (j = 0; j < 1000; j++);
- }
- //改变音量 [1~256]
- void volume_Set(int volume)
- {
- /*
- D3:本次播放的起始段,0x00-0xFF 。
- D2:本次播放段数,0x01-0xFF,DGUS 处理后清零。
- D1:播放音量,单位为 1/256。
- D0:实时返回的播放进度(剩余播放段数目 0x00-0xFF)。
- D3、D2 同时写 0x00 停止音乐播放。
- */
- char cmd[4]={0x0,0x0,0x00,0x00};
- cmd[2] = volume;
- write_dgus_vp(0xA0,cmd,2);
- }
- // 读写FLASH操作
- void flash(int mod,long addr_flash,int addr, int len)
- {
- /*
- 0x08 NOR_FLASH_RW_CMD 4
- D7:操作模式 0x5A=读 0xA5=写,CPU 操作完清零。
- D6:4:片内 Nor Flash 数据库首地址,必须是偶数,0x000000-0x02:7FFE,160KWords。
- D3:2:数据变量空间首地址,必须是偶数。
- D1:0:读写字长度,必须是偶数。
- */
- unsigned char rw_flash_cmd[8] = {0};
- unsigned char RW_Flash_Flag[2] = {0};
-
- rw_flash_cmd[0] = mod;
- rw_flash_cmd[1] = (unsigned char)(addr_flash >> 16);
- rw_flash_cmd[2] = (unsigned char)(addr_flash >> 8);
- rw_flash_cmd[3] = (unsigned char)(addr_flash & 0xFE);
- rw_flash_cmd[4] = (unsigned char)(addr >> 8);
- rw_flash_cmd[5] = (unsigned char)(addr & 0xFE);
- rw_flash_cmd[6] = (unsigned char)(len >> 8);
- rw_flash_cmd[7] = (unsigned char)(len & 0xFE);
-
- //send_data_com(COM_PORT,rw_flash_cmd,8); // debug
- write_dgus_vp(0x0008, rw_flash_cmd, 4); //启动读Flash
- //等待数据读取OK
- // do
- // {
- // delayms(20);
- // read_dgus_vp(0x0008,RW_Flash_Flag,1);
- // }
- // while(RW_Flash_Flag[0] == rw_flash_cmd[0]); //判断falsh操作是否完成 如果是5A说明没有操作完成,就等完成之后再进行后面的
- while(1)
- {
- //delayms(20);
- read_dgus_vp(0x0008, rw_flash_cmd, 1);
- if(rw_flash_cmd[0] == 0x00)
- break;
- }
- }
- // 切换页面
- void page(unsigned char page)
- {
- /*
- 0x84 PIC_Set 2
- D3:0x5A 表示启动一次页面处理,CPU 处理完清零。
- D2:处理模式。
- 0x01=页面切换(把图片存储区指定的图片显示到当前背景页面)。
- 0x02=不支持。
- D1:D0:图片 ID。
- */
- char cmd[4]={0x5a,0x01,0x00,0x00};
- cmd[3] = page; // 页面编号
- write_dgus_vp(0x84,cmd,2);
- }
- // 调节背光亮度
- void Backlight_brightness(unsigned char normal)
- {
- /*
- LED_Config 2
- 触摸屏背光待机设置:
- D3=开启亮度,0x00-0x64;背光待机控制关闭时,D3 为软件亮度调节接口。
- D2=关闭亮度 0x00-0x64; D1:0=开启时间/5mS 。
- */
- char cmd[4]={0x64,0x64,0x00,0x00};
- cmd[0] = normal; // 非待机时亮度
- //cmd[1] = Standby;
- write_dgus_vp(0x82,cmd,2);
- }
- void Time0_IRQHandler(void)
- {
- }
- void Time1_IRQHandler(void)
- {
- }
- void Time2_IRQHandler(void)
- {
- }
复制代码 |
|