⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 backlightdlg.cpp

📁 wince ARM9下的LCD背光灯调节程序
💻 CPP
字号:
// BackLightDlg.cpp : implementation file
//

#include "stdafx.h"
#include "BackLight.h"
#include "BackLightDlg.h"
#include "s2410.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

unsigned char Brightness;
volatile IOPreg *v_pIOCreg = (IOPreg *)IOP_BASE;
volatile PWMreg *v_pPWMreg = (PWMreg *)PWM_BASE;
volatile INTreg *v_pINTreg = (INTreg *)INT_BASE;
//   v_pIICreg->rIICCON  = 0x6f;   
/////////////////////////////////////////////////////////////////////////////
// CBackLightDlg dialog

CBackLightDlg::CBackLightDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CBackLightDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBackLightDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CBackLightDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBackLightDlg)
	DDX_Control(pDX, IDC_SLIDER1, m_slider);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CBackLightDlg, CDialog)
	//{{AFX_MSG_MAP(CBackLightDlg)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSlider1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBackLightDlg message handlers

BOOL CBackLightDlg::OnInitDialog()
{
		 HKEY hk;
     DWORD dwStatus;
     DWORD  dwValue, dwSize ,type;
   
	HANDLE hStr;
	DWORD dwBytesRead;
    unsigned char wch[1];

	unsigned int TmpTCON;
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen
    
	m_slider.SetRange(0,100,true);  //范围
	m_slider.SetTicFreq(10);        //刻度    没起作用

 	
	dwStatus = RegOpenKeyEx(HKEY_CURRENT_USER,_T("ControlPanel\\Backlight"), 0, 0, &hk);
	dwStatus = RegQueryValueEx(hk,_T("Brightness"),NULL,&type,(BYTE*)&dwValue,&dwSize );
	RegCloseKey( hk ); 
	//读取注册表中的初始值,确定slider位置
/*	hStr = CreateFile( TEXT("BAK1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
   if ( hStr == INVALID_HANDLE_VALUE )
   {
     CloseHandle( hStr ); 
	 // MessageBox(_T("CreateFile INVALID_HANDLE_VALUE "),_T(""),MB_OK);
   }

	ReadFile( hStr,wch,sizeof(wch), &dwBytesRead, NULL );
	Brightness = wch[0]/2;
    v_pPWMreg->rTCMPB0 = Brightness ;
    CloseHandle( hStr );
*/
	Brightness = dwValue/2;
	v_pPWMreg->rTCMPB0 = Brightness ;
	m_slider.SetPos(Brightness*2);
	
	// TODO: Add extra initialization here  m_Slider.SetRange(-100,100);
 /***********************2410**************************************/

//v_pINTreg->rINTMSK |= BIT_TIMER0;
//v_pINTreg->rSRCPND |= BIT_TIMER0; //Clear pending bit 
//v_pINTreg->rINTPND |= BIT_TIMER0;//INT_TIMER0 

//v_pIOCreg->rGPBCON &= ~3;
//v_pIOCreg->rGPBCON |= 2;   //GPB0  AS TOUT0
// v_pPWMreg->rTCFG0 |= 24; // prescaler value = 24 + 1 和触摸屏保持一致

//v_pPWMreg->rTCFG0 &= ~0xff ;
//v_pPWMreg->rTCFG0 |= 0x0f ;//Prescaler 0 == 254
                           //Timer input clock Frequency = PCLK / {prescaler value+1} / {divider value}=PCLK/(254+1)/
                           //{prescaler value} = 0~255
                           //{divider value} = 2, 4, 8, 16
//v_pPWMreg->rTCFG1 = 0x01;  //Select MUX input for PWM Timer0.  1/4

//v_pPWMreg->rTCNTB0 = 51 ;
//v_pPWMreg->rTCMPB0 = 25;
/*
TmpTCON = v_pPWMreg->rTCON;
TmpTCON &= ~0x0f;
TmpTCON |= 0x0a;  //Interval mode(auto reload) ,manual update Update TCNTB0 & TCMPB0 
v_pPWMreg->rTCON = TmpTCON;

TmpTCON = v_pPWMreg->rTCON;
TmpTCON &= ~0x0f;
TmpTCON |= 0x09;  //Interval mode(auto reload) ,manual update Update TCNTB0 & TCMPB0 ,configure the inverter bit
v_pPWMreg->rTCON = TmpTCON;
*/

/***************************************************************/
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CBackLightDlg::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	HANDLE hStr;
	DWORD dwWritten,dwBytesRead;
    unsigned char wch[1];
	unsigned char red[1];

	 HKEY hk;
     DWORD dwStatus;
     DWORD  dwValue, dwSize ,type;
    const BYTE* lpData;
	int i ;
	// TODO: Add your control notification handler code here

    UpdateData(TRUE);
    i=m_slider.GetPos();
    UpdateData(FALSE);
  	
    dwStatus = RegOpenKeyEx(HKEY_CURRENT_USER,_T("ControlPanel\\Backlight"), 0, 0, &hk);
    
    lpData = (BYTE* ) &i;
    RegSetValueEx(hk,_T("Brightness"), 0,REG_DWORD,lpData, sizeof(REG_DWORD) ); 
    //得到新值存入注册表
/*   hStr = CreateFile( TEXT("BAK1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
   if ( hStr == INVALID_HANDLE_VALUE )
   {
     CloseHandle( hStr ); 
	 // MessageBox(_T("CreateFile INVALID_HANDLE_VALUE "),_T(""),MB_OK);
   }
   wch[0] = i;       //写常数命令
   WriteFile( hStr, wch, 1, &dwWritten, NULL ); 

   ReadFile( hStr,red,sizeof(red), &dwBytesRead, NULL );
   Brightness = red[0]/2;
   v_pPWMreg->rTCMPB0 = Brightness ;
   CloseHandle( hStr );
*/
	dwStatus = RegQueryValueEx(hk,_T("Brightness"),NULL,&type,(BYTE*)&dwValue,&dwSize );
    v_pPWMreg->rTCMPB0 = dwValue/2 ;
   //更新slider位置
  	RegCloseKey( hk ); 

	SetDlgItemInt( IDC_STATIC1 ,dwValue); //i * 2 );  //数据显示 dwValue ); //
	*pResult = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -