请选择 进入手机版 | 继续访问电脑版

迪文科技论坛

 找回密码
 立即注册
搜索
热搜: T5L 视频屏 DGUS OS
查看: 220|回复: 4

使用OS c语言控制屏幕亮度失败

[复制链接]

2

主题

7

帖子

35

积分

新手上路

Rank: 1

积分
35
发表于 2019-11-28 11:23:39 | 显示全部楼层 |阅读模式
型号: DMT12800K070_A2WTC
  1. //用户数据库要保存数据的位置
  2. //[0x00] 亮度   
  3. //[0x10] 音量

  4. //工程中设置的数据变量
  5. //[0x3300]  亮度   
  6. //[0x3400]  音量
  7. //[0xFFF0]  临时地址,交换数据用

  8. void page(unsigned char page);
  9. void flash(int mod,long addr_flash,int addr, int len);
  10. void Backlight_brightness(unsigned char normal, unsigned char Standby);

  11. int main()
  12. {
  13.         char cur_brightness[4]         = {0};
  14.         char last_brightness[4]        = {0};
  15.         char cur_volume[4]          = {0};
  16.         char last_volume[4]          = {0};
  17.        
  18.         int *p_cur_brightness        = cur_brightness;
  19.         int *p_last_brightness        = last_brightness;
  20.         int *p_cur_volume        = cur_volume;
  21.         int *p_last_volume        = last_volume;

  22. Backlight_brightness(0, 0);
  23. //        flash(0x5A, 0x00, 0xFFF0, 2);        //读取用户数据库中的[亮度],保存到临时地址处
  24. //        read_dgus_vp(0xFFF0, last_brightness, 2);
  25. //        if (*p_last_brightness == 0)        //判断flash内是不是0
  26. //        {
  27. //                //首次烧录程序,nor flash内还没有数据,直接写入默认值(5档[亮度])
  28. //                *p_last_brightness = 5;
  29. //                write_dgus_vp(0xFFF0, last_brightness, 2);
  30. //                flash(0xA5, 0x00, 0xFFF0, 2);
  31. //        }
  32. //        else
  33. //        {
  34. //                //如果不是首次烧录程序,就把数据读取出来给显示[亮度]档位处
  35. //                write_dgus_vp(0x3300, last_brightness, 2);        //将[亮度]写入档位处[0x3300]
  36. //                (*p_last_brightness) = (0x10 * (*p_last_brightness)) + 0x16;
  37. //                //write_dgus_vp(0x0082, last_brightness, 2);        //将[亮度]换算后写入亮度寄存器[0x0082]
  38. //                Backlight_brightness(0, 50);
  39. //        }
  40.        
  41. //        flash(0x5A, 0x10, 0xFFF0, 2);//read_dgus_vp(0x10, last_volume, 4);                        //读取用户数据库中的音量,保存到临时地址处
  42. //        read_dgus_vp(0xFFF0, last_volume, 2);
  43. //        if (*p_last_volume == 0)//判断flash内是不是0
  44. //        {
  45. //                //首次烧录程序,nor flash内还没有数据,直接写入默认值(3档音量)
  46. //                *p_last_volume = 3;
  47. //                write_dgus_vp(0xFFF0, last_volume, 2);
  48. //                flash(0xA5, 0x10, 0xFFF0, 2);
  49. //        }
  50. //        else
  51. //        {
  52. //                //如果不是首次烧录程序,就把数据读取出来给显示[音量]档位处
  53. //                write_dgus_vp(0x3300, last_volume, 2);        //将亮度写入[音量]档位处[0x3300]
  54. //                switch (*p_last_volume)
  55. //                {
  56. //                case 1: *p_last_volume = 0x10; break;
  57. //                case 2: *p_last_volume = 0x20; break;
  58. //                case 3: *p_last_volume = 0x30; break;
  59. //                case 4: *p_last_volume = 0x40; break;
  60. //                case 5: *p_last_volume = 0xFF; break;
  61. //                default:break;
  62. //                }
  63. //                write_dgus_vp(0x00A0, last_volume, 2);        //将亮度换算后写入[音量]寄存器[0x00A0]       
  64. //        }

  65.         page(3);
  66.        
  67.         while (1)
  68.         {
  69. //                read_dgus_vp(0x3300, cur_brightness, 2);        //读取实时亮度
  70. //                if (*p_cur_brightness != *p_last_brightness)
  71. //                {
  72. //                        *p_last_brightness = *p_cur_brightness;        //更新亮度值
  73. //                        write_dgus_vp(0xFFF0, last_brightness, 2);
  74. //                        flash(0xA5, 0x00, 0xFFF0, 2);        //将数据写入用户数据库
  75. //                }
  76.                                
  77. //                read_dgus_vp(0x3400, cur_volume, 2);                //读取实时音量
  78. //                if (*p_cur_volume != *p_last_volume)
  79. //                {
  80. //                        *p_last_volume = *p_cur_volume;                        //更新音量值
  81. //                        write_dgus_vp(0xFFF0, last_volume, 2);
  82. //                        flash(0xA5, 0x10, 0xFFF0, 2);                //将数据写入用户数据库
  83. //                }
  84.         }
  85.        
  86.         return 0;
  87. }
  88. void delayms(char cnt)
  89. {
  90.         int i = 0, j = 0;
  91.        
  92.         for(i = 0; i < cnt; i++)
  93.                 for (j = 0; j < 1000; j++);
  94. }

  95. // 读写FLASH操作
  96. void flash(int mod,long addr_flash,int addr, int len)
  97. {
  98.         /*
  99.         0x08 NOR_FLASH_RW_CMD 4
  100.         D7:操作模式 0x5A=读 0xA5=写,CPU 操作完清零。
  101.         D6:4:片内 Nor Flash 数据库首地址,必须是偶数,0x000000-0x02:7FFE,160KWords。
  102.         D3:2:数据变量空间首地址,必须是偶数。
  103.         D1:0:读写字长度,必须是偶数。
  104.         */
  105.         char rw_flash_cmd[8] = {0}; //数据库读操作
  106.        
  107.         rw_flash_cmd[0] = mod;
  108.         rw_flash_cmd[1] = (unsigned char)(addr_flash >> 16);
  109.         rw_flash_cmd[2] = (unsigned char)(addr_flash >> 8);
  110.         rw_flash_cmd[3] = (unsigned char)(addr_flash & 0xFE);
  111.         rw_flash_cmd[4] = (unsigned char)(addr >> 8);
  112.         rw_flash_cmd[5] = (unsigned char)(addr & 0xFE);
  113.         rw_flash_cmd[6] = (unsigned char)(len >> 8);
  114.         rw_flash_cmd[7] = (unsigned char)(len & 0xFE);
  115.        
  116.         //send_data_com(COM_PORT,rw_flash_cmd,8);        // debug
  117.         write_dgus_vp(0x08, rw_flash_cmd, 4); //启动读Flash
  118.         //等待数据读取OK
  119.         while(1)
  120.     {
  121.                 delayms(20);
  122.                 read_dgus_vp(0x0008,rw_flash_cmd,1);
  123.                 if(rw_flash_cmd[0]==0x00)
  124.                         break;
  125.     }
  126. }
  127. // 切换页面
  128. void page(unsigned char page)
  129. {
  130.         /*
  131.         0x84 PIC_Set 2
  132.         D3:0x5A 表示启动一次页面处理,CPU 处理完清零。
  133.         D2:处理模式。
  134.                         0x01=页面切换(把图片存储区指定的图片显示到当前背景页面)。
  135.                         0x02=不支持。
  136.         D1:D0:图片 ID。
  137.         */
  138.         char cmd[4]={0x5a,0x01,0x00,0x00};
  139.         cmd[3] = page;        // 页面编号
  140.         write_dgus_vp(0x0084,cmd,2);
  141. }

  142. // 调节背光亮度
  143. void Backlight_brightness(unsigned char normal, unsigned char Standby)
  144. {
  145.         /*
  146.                 LED_Config 2
  147.                 触摸屏背光待机设置:
  148.                 D3=开启亮度,0x00-0x64;背光待机控制关闭时,D3 为软件亮度调节接口。
  149.                 D2=关闭亮度 0x00-0x64; D1:0=开启时间/5mS 。
  150.         */
  151.         char cmd[4]={0x64,0x64,0x00,0x00};
  152.         cmd[3] = normal;        // 非待机时亮度
  153.         cmd[2] = Standby;
  154.         write_dgus_vp(0x0082,cmd,2);
  155. }

  156. void Time0_IRQHandler(void)
  157. {
  158. }
  159. void Time1_IRQHandler(void)
  160. {
  161. }
  162. void Time2_IRQHandler(void)
  163. {
  164. }
复制代码
现在使用上述代码无法调节屏幕亮度, 按理说0应该是最暗的, 但是屏幕依旧很亮.
请问是哪里的问题呢?
回复

使用道具 举报

1

主题

4

帖子

104

积分

注册会员

Rank: 2

积分
104
发表于 2019-11-28 19:54:45 | 显示全部楼层
调节亮度D3=0x64代表点了触摸屏的亮度,D2=0x00代表没操作触摸屏几秒时间后触摸屏变暗后的亮度,D1:D0代表等待几秒不操作触摸屏的时间,触摸屏亮度就会变化。例如等10秒后屏幕亮度变最暗,写入顺序是:0x64 0x00 0x07 0xD0
回复

使用道具 举报

0

主题

2

帖子

386

积分

中级会员

Rank: 3Rank: 3

积分
386
发表于 2019-11-28 21:16:08 | 显示全部楼层
参考如下的串口发指令模拟,然后再检查一下C程序的错误试试。
指令示例:
1、当.cfg地址0x05配置开启触摸屏背光待机控制时:
5A A5 07 82 0082 6432 03E8 ,10秒后屏幕背光自动降低为0x32亮度。
5A A5 07 82 0082 2020 **** ,直接指令控制背光亮度为0x20亮度,且背光屏保亮度开启和待机一致。
注意:开启背光待机后,一段时间后第一次物理点击触摸屏是唤醒屏保背光功能,即使开启亮度和待机亮度设置值一样,一段时间后仍旧需要“额外第一次的唤醒触摸点击操作”。
2、当.cfg地址0x05配置关闭触摸屏背光待机控制时:
5A A5 05 82 0082 0A 00 ;接口D3地址0x0A表示亮度值,范围0x00-x64。D2地址0x00表示关闭背光时的亮度,范围0x00-0x64,当CFG文件0x05关闭背光待机控制时,可以写0x00,主要是修改D3字节的数据。
回复

使用道具 举报

2

主题

7

帖子

35

积分

新手上路

Rank: 1

积分
35
 楼主| 发表于 2019-11-29 13:37:21 | 显示全部楼层
Lreamy 发表于 2019-11-28 21:16
参考如下的串口发指令模拟,然后再检查一下C程序的错误试试。
指令示例:
1、当.cfg地址0x05配置开启触摸屏 ...

嗯嗯 多谢指点 我用单片机发送指令是能够实现亮度和音量的调节功能的, 现在就是准备做掉电存储, 让屏幕重新开机之后还能保持之前设置的亮度和音量值, 所以在研究迪文的OS c语言, 这个c代码汇编成asm之后下载到屏幕里 上电执行, 我也是按照他的格式发送的数据, 但是不能设置屏幕的亮度, 不知道是什么原因. 希望您能再帮忙看下
回复

使用道具 举报

2

主题

7

帖子

35

积分

新手上路

Rank: 1

积分
35
 楼主| 发表于 2019-11-29 14:46:30 | 显示全部楼层
baoge11 发表于 2019-11-28 19:54
调节亮度D3=0x64代表点了触摸屏的亮度,D2=0x00代表没操作触摸屏几秒时间后触摸屏变暗后的亮度,D1:D0代表 ...
  1. // 调节背光亮度
  2. void Backlight_brightness(unsigned char normal)
  3. {
  4.         /*
  5.                 LED_Config 2
  6.                 触摸屏背光待机设置:
  7.                 D3=开启亮度,0x00-0x64;背光待机控制关闭时,D3 为软件亮度调节接口。
  8.                 D2=关闭亮度 0x00-0x64; D1:0=开启时间/5mS 。
  9.         */
  10.         char cmd[4]={0x64,0x00,0x00,0x00};
  11.         cmd[0] = normal;        // 非待机时亮度
  12.         //cmd[1] = Standby;
  13.         write_dgus_vp(0x82,cmd,2);
  14. }
复制代码

按照这个终于能调节亮度了 多谢各位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2019-12-15 05:35 , Processed in 0.022896 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表