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

📄 lcd7.cpp

📁 LCD source code, for microcontroller AT89s51
💻 CPP
字号:
// lcd7.cpp : implementation file
//

#include "stdafx.h"
#include "timectrl.h"
#include "lcd7.h"

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

/////////////////////////////////////////////////////////////////////////////
// Clcd7


Clcd7::Clcd7()
{
	// Set initial values
	gap		= 1;
	width	= 0;
	oldnum = num = 0;

	low		= 0;
	high	= 9;
	firstpaint = true;
	seg1= seg2= seg3= seg4= seg5= seg6= seg7 = false;

	fg = RGB(0, 0, 0);
	bg = RGB(100,100,100);
}

Clcd7::~Clcd7()
{
}


BEGIN_MESSAGE_MAP(Clcd7, CWnd)
	//{{AFX_MSG_MAP(Clcd7)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// Clcd7 message handlers

void Clcd7::OnPaint() 

{
	RECT rc; GetClientRect(&rc);

	if(firstpaint)
		{	
		firstpaint = false;
		if(width == 0)
			width = rc.right / 4;

		GetParent()->PostMessage(WM_TCHANGE, GetDlgCtrlID(), 0);
		}

	CPaintDC dc(this); // device context for painting

	// Delimit number
	if(num < low)
		{
		num = high;
		GetParent()->PostMessage(WM_UNDERFLOW , GetDlgCtrlID() , 0);
		}

	if(num > high)
		{
		num = low;
		GetParent()->PostMessage(WM_OVERFLOW, GetDlgCtrlID() , 0);
		}

	// Start from all reset
	seg1 = seg2 = seg3 = seg4 = seg5 = seg6 = seg7 = false;

	// Coding of segments:
	//				  1
	//			 ---------
	//		4	|    3    | 6
	//			 ---------
	//		5	|         | 7
	//			 ---------
	//               2

	// Set the ones that need to be set:
	switch(num)
		{
		case 0: seg1 = seg2 = seg4 = seg5 = seg6 = seg7 = true;	break;
		case 1:	seg6= seg7 = true; break;
		case 2: seg1 = seg6 = seg3 = seg5 = seg2 = true; break;
		case 3: seg1 = seg6 = seg3 = seg7 = seg2 = true; break;
		case 4: seg4  = seg3 = seg6 = seg7 = true;	break;
		case 5: seg1  = seg4 = seg3 = seg7 = seg2 = true; break;
		case 6: seg1 = seg4  = seg5 = seg2 = seg7 = seg3 = true; break;
		case 7: seg1  = seg6  = seg7 = true; break;
		case 8: seg1 = seg2 = seg3 = seg4 = seg5 = seg6 = seg7 = true; break;
		case 9: seg1 = seg3 = seg4 = seg6 = seg7 = seg2 = true; break;
		case 10: seg1 = seg4 = seg5 = seg3 = seg6 = seg7 = true; break;  // A
		case 11: seg4 = seg5 = seg2 = seg3 = seg7 = true; break;  // b
		case 12: seg3 = seg5 = seg2 = true; break;  // c
		case 13: seg3 = seg5 = seg2 = seg7 = seg6 = true; break;  // d
		case 14: seg1 = seg4 = seg3 = seg5 = seg2 = true; break;  // e
		case 15: seg1 = seg4 = seg3 = seg5 = true; break;  // f
	}

	//P2N("seg=%d seg2=%d seg3=%d\r\n", seg1, seg2, seg3);

	int vhalf = rc.bottom / 2;
	
	CBrush Brush(fg);
	CBrush Wrush(bg);
	CPen	nullpen(PS_NULL, 0, RGB(0,0,0));

	CBrush *old = (CBrush*) dc.SelectObject(&Brush);
	CPen   *oldp = (CPen*) dc.SelectObject(&nullpen);

	//dc.SetPolyFillMode(WINDING);

	POINT poly[6];

	///////////////////////////////////////////////////
	///    0---------------------------1
	//        3--------------------2
	//

	poly[0].x = 0;						poly[0].y = 0;
	poly[1].x = rc.right;				poly[1].y = 0;
	poly[2].x = rc.right - (width);		poly[2].y = width;
	poly[3].x = width;					poly[3].y = width;

	if(seg1)
		dc.SelectObject(&Brush);
	else
		dc.SelectObject(&Wrush);

	dc.Polygon(poly, 4);
	
	///////////////////////////////////////////////////
	//        0--------------------1
	///    3---------------------------2
	
	poly[0].x = (width );				poly[0].y = rc.bottom - (width );
	poly[1].x = rc.right - (width);		poly[1].y = rc.bottom - (width );
	poly[2].x = rc.right;				poly[2].y = rc.bottom ;
	poly[3].x = 0;						poly[3].y = rc.bottom ;

	if(seg2)
		dc.SelectObject(&Brush);
	else
		dc.SelectObject(&Wrush);

	dc.Polygon(poly, 4);

	///////////////////////////////////////////////////
	//        0--------------------1
	///    5---------------------------2
	///        4--------------------3
	// 
	poly[0].x = width ;					poly[0].y = vhalf - width/2 + gap;
	poly[1].x = rc.right - width;		poly[1].y = vhalf - width/2 + gap;
	poly[2].x = rc.right;				poly[2].y = vhalf;
	poly[3].x = rc.right - width;		poly[3].y = vhalf + width/2 + gap;
	poly[4].x = width;					poly[4].y = vhalf + width/2 + gap;
	poly[5].x = 0;						poly[5].y = vhalf + gap;
	
	if(seg3)
		dc.SelectObject(&Brush);
	else
		dc.SelectObject(&Wrush);
	
	dc.Polygon(poly, 6);

	//////////////////////////////////////////////////
	//	 0
	//  |  3
	//  | |
	//  |  2
	//   1
		
	poly[0].x = 0;						poly[0].y = gap;
	poly[1].x = 0;						poly[1].y = vhalf;
	poly[2].x = width;					poly[2].y = vhalf - (width/2);
	poly[3].x = width;					poly[3].y = width + gap;

	if(seg4)
		dc.SelectObject(&Brush);
	else
		dc.SelectObject(&Wrush);

	dc.Polygon(poly, 4);

	poly[0].y += vhalf + gap;
	poly[1].y += vhalf -  gap;
	poly[2].y += vhalf -  gap - width/2;
	poly[3].y += vhalf - width/2 + gap;

	if(seg5)
		dc.SelectObject(&Brush);
	else
		dc.SelectObject(&Wrush);

	dc.Polygon(poly, 4);

	//////////////////////////////////////////////////
	//	        3
	//      0  |
	//       | |
	//      1  | 
	//          2
		
	poly[0].x = rc.right - (width);			poly[0].y = (width)  + gap;
	poly[1].x = rc.right - (width);			poly[1].y = vhalf - (width/2);
	poly[2].x = rc.right;					poly[2].y = vhalf - gap ;
	poly[3].x = rc.right;					poly[3].y = gap;

	if(seg6)
		dc.SelectObject(&Brush);
	else
		dc.SelectObject(&Wrush);

	dc.Polygon(poly, 4);

	poly[0].y += vhalf - width/2 + gap;
	poly[1].y += vhalf - width/2 - gap;
	poly[2].y += vhalf; 
	poly[3].y += vhalf;

	if(seg7)
		dc.SelectObject(&Brush);
	else
		dc.SelectObject(&Wrush);

	dc.Polygon(poly, 4);

	dc.SelectObject(old);
	dc.SelectObject(oldp);

	if(oldnum != num)
		{
		GetParent()->PostMessage(WM_TCHANGE, GetDlgCtrlID(), 0);
		}
	oldnum = num;

	// Just for testing
	//dc.SetBkMode(TRANSPARENT );
	//CString str; str.Format("%d", num);
	//rc.bottom = rc.bottom / 2;
	//dc.DrawText(str, &rc, DT_CENTER | DT_SINGLELINE | DT_VCENTER);
	
	// Do not call CWnd::OnPaint() for painting messages
}

void Clcd7::OnLButtonDown(UINT nFlags, CPoint point) 

{
	SetCapture();
	CWnd::OnLButtonDown(nFlags, point);
}

void Clcd7::OnMouseMove(UINT nFlags, CPoint point) 

{
	if(nFlags & MK_LBUTTON  )
		{
		if(abs(point.x - oldpoint.x) > 10)
			{
			if(point.x > oldpoint.x)
				num++;
			else
				num--;

			// Limit it
			//if(num > high) 
			//	{
			//	num = low;
			//	}

			//if(num < low) 
			//	{
			//	num = high;
			//	}

			Invalidate();
			oldpoint = point;
			}
		}

	CWnd::OnMouseMove(nFlags, point);
}

void Clcd7::OnLButtonUp(UINT nFlags, CPoint point) 
{
	ReleaseCapture();	
	CWnd::OnLButtonUp(nFlags, point);
}

void Clcd7::SetMinMax(int minn, int maxx)

{
	low = minn;
	high = maxx;

	if(num < low) num = low;
	if(num > high) num = high;

	if(::IsWindow(m_hWnd))
		Invalidate();
}

void Clcd7::SetFgColor(COLORREF col)

{
	fg = col;

	if(::IsWindow(m_hWnd))
		Invalidate();
}

void Clcd7::SetBgColor(COLORREF col)

{
	bg = col;

	if(::IsWindow(m_hWnd))
		Invalidate();
}

⌨️ 快捷键说明

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