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

📄 seg7dlg.cpp

📁 12864 avr驱动程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// SEG7Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "SEG7.h"
#include "SEG7Dlg.h"
#include "inirw.h"
#include "SETDLG.h"
#include "ABOUTDLG.h"

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


extern CString AppPath; //全局变量用以保存应用程序路径


CUSTOM_INIRW inifile; //声明INI文件的操作类

BOOL segstatus[8]= ////8段数码管的设置状态
{
 false,false,false,false,false,false,false,false
};

char segname[8][2]= //可变的段名字列表
{
 "a","b","c","d","e","f","g","h"
};

const char pinnametab[8]= //不可变的管脚索引名字列表
{
  'a','b','c','d','e','f','g','h'
};

const unsigned char pinpowertab[8]= //各个管脚的权
{
  0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
};

const unsigned char radixtab[3]=
{
  16, 2, 10
};

const int  seglocation[8][4]= //8段数码管的绘制坐标
{
	//x1,  y1,  x2,  y2
	{ 40,  30, 160,  50},
	{150,  40, 170, 150},
	{150, 150, 170, 260},
	{ 40, 250, 160, 270},
	{ 30, 150,  50, 260},
	{ 30,  40,  50, 150},
	{ 40, 140, 160, 160},
	{180, 260, 200, 280},
	
}; //8段数码管的位置参数

const int namelocation[8][2]=
{   // x,   y
	{ 95,  30},
	{155,  85},
	{155, 197},
	{ 96, 250},
	{ 35, 197},
	{ 35,  85},
	{ 95, 140},
    {185, 260},
};

const char *binformattab[8]= //二进制补足数据表格
{
 "0000000",
 "000000",
 "00000",
 "0000",
 "000",
 "00",
 "0",
 "",
};

const char *decformattab[3]=
{
  "  ",
  " ",
  "",
};

const char *hexformattab[2]=
{
  "0",
  "",
};

const char numdatatab[10]= //数字0-9的掩码
{
  0x3F,
  0x06,
  0x5B,
  0x4F,
  0x66,
  0x6D,
  0x7D,
  0x07,
  0x7F,
  0x6F,
};

const char *numnote[10]=
{
 "0",
 "1",
 "2",
 "3",
 "4",
 "5",
 "6",
 "7",
 "8",
 "9",
};


const chdatatab[18]=
{
  0x77, //'A
  0x7C, //'b
  0x39, //'C
  0x58, //'c
  0x5E, //'d
  0x79, //'E
  0x71, //'F
  0x76, //'H
  0x74, //'h
  0x38, //'L
  0x37, //'N
  0x54, //'n
  0x5C, //'o
  0x73, //'P
  0x50, //'r
  0x78, //'t
  0x3E, //'U
  0x40, // '-
};

const char *chnote[18]=
{
  "A",
  "b",
  "C",
  "c",
  "d",
  "E",
  "F",
  "H",
  "h",
  "L",
  "N",
  "n",
  "o",
  "P",
  "r",
  "t",
  "U",
  "-",
};

const int CHK_ICON_X=185;
const int CHK_ICON_Y=30; //绘制检测结果图标的位置坐标

unsigned char CSEG7Dlg::CreateLedData(void)
{
  unsigned char tmp=0;
  UpdateData(true);
  if(segstatus[0] != 0)tmp |= pinpowertab[a_index];
  if(segstatus[1] != 0)tmp |= pinpowertab[b_index];
  if(segstatus[2] != 0)tmp |= pinpowertab[c_index];
  if(segstatus[3] != 0)tmp |= pinpowertab[d_index];
  if(segstatus[4] != 0)tmp |= pinpowertab[e_index];
  if(segstatus[5] != 0)tmp |= pinpowertab[f_index];
  if(segstatus[6] != 0)tmp |= pinpowertab[g_index];
  if(segstatus[7] != 0)tmp |= pinpowertab[h_index];  //创建数据
  if(ledak_index == 1 )
  {
    tmp = ~tmp; //共阳极
  }
  return tmp;
}

void CSEG7Dlg::FormatData(CString& buf, unsigned int Radix)
{
  if(check_uppercase)
  {
   buf.MakeUpper();
  }
  switch(Radix)
  {
	  case HEX:		  
		  buf = lag_hex_leader_ch + hexformattab[buf.GetLength()-1] + buf + lag_hex_end_ch + lag_separator_ch ;
		  break;
	  case BIN:
		  buf = lag_bin_leader_ch+ binformattab[buf.GetLength()-1] + buf + lag_bin_end_ch + lag_separator_ch ;
		  break;
	  case DEC:
		  buf = decformattab[buf.GetLength()-1] + lag_dec_leader_ch + buf + lag_dec_end_ch + lag_separator_ch  ;
		  break; 
  } //switch

}


/////////////////////////////////////////////////////////////////////////////
void CUSTOM_INIRW::InitFile() //重载初始化INI文件的内容
{
	CString filebuf; //初始化文件,并写入内容
    filebuf="[SETUP]\r\n";
    filebuf+="LanguageTotal=4\r\n";	
	filebuf+="LastLanguage=0\r\n";
	filebuf+="LastAK=0\r\n";
    filebuf+="LastPinValue=255\r\n";
    filebuf+="LastPinA=0\r\n";
    filebuf+="LastPinB=1\r\n";
    filebuf+="LastPinC=2\r\n";
    filebuf+="LastPinD=3\r\n";
    filebuf+="LastPinE=4\r\n";
    filebuf+="LastPinF=5\r\n";
    filebuf+="LastPinG=6\r\n";
    filebuf+="LastPinH=7\r\n\r\n";
    filebuf+="[Language0]\r\n";
    filebuf+="Title=C 语言\r\n";
    filebuf+="StartCharacter=\r\n";  
    filebuf+="SeparatorCharacter=,\r\n";
	filebuf+="DefaultRadix=2\r\n"; //十进制
    filebuf+="HexLeaderCharacter=0x\r\n";
    filebuf+="HexEndCharacter=\r\n";
    filebuf+="BinLeaderCharacter=0B\r\n";
    filebuf+="BinEndCharacter=\r\n";
    filebuf+="DecLeaderCharacter=\r\n";
    filebuf+="DecEndCharacter=\r\n";
    filebuf+="NoteLeaderCharacter=/*\r\n";
    filebuf+="NoteEndCharacter=*/\r\n\r\n";
    filebuf+="[Language1]\r\n";
    filebuf+="Title=PIC ASM\r\n";
    filebuf+="StartCharacter=RETLW\r\n";  
    filebuf+="SeparatorCharacter=\r\n";
	filebuf+="DefaultRadix=0\r\n"; //十六进制
    filebuf+="HexLeaderCharacter=0x\r\n";
    filebuf+="HexEndCharacter=\r\n";
    filebuf+="BinLeaderCharacter=B'\r\n";
    filebuf+="BinEndCharacter='\r\n";
    filebuf+="DecLeaderCharacter=D'\r\n";
    filebuf+="DecEndCharacter='\r\n";
    filebuf+="NoteLeaderCharacter=;\r\n";
    filebuf+="NoteEndCharacter=\r\n\r\n";
    filebuf+="[Language2]\r\n";
    filebuf+="Title=51 ASM\r\n";
    filebuf+="StartCharacter=DB\r\n";  
    filebuf+="SeparatorCharacter=\r\n";
	filebuf+="DefaultRadix=0\r\n"; //十六进制
    filebuf+="HexLeaderCharacter=0x\r\n";
    filebuf+="HexEndCharacter=\r\n";
    filebuf+="BinLeaderCharacter=0B\r\n";
    filebuf+="BinEndCharacter=\r\n";
    filebuf+="DecLeaderCharacter=D'\r\n";
    filebuf+="DecEndCharacter='\r\n";
    filebuf+="NoteLeaderCharacter=;\r\n";
    filebuf+="NoteEndCharacter=\r\n\r\n";
    filebuf+="[Language3]\r\n";
    filebuf+="Title=EMC ASM\r\n";
    filebuf+="StartCharacter=RETL\r\n"; 
	filebuf+="DefaultRadix=0\r\n"; //十六进制
    filebuf+="SeparatorCharacter=\r\n";
    filebuf+="HexLeaderCharacter=0x\r\n";
    filebuf+="HexEndCharacter=\r\n";
    filebuf+="BinLeaderCharacter=B'\r\n";
    filebuf+="BinEndCharacter='\r\n";
    filebuf+="DecLeaderCharacter=\r\n";
    filebuf+="DecEndCharacter=\r\n";
    filebuf+="NoteLeaderCharacter=;\r\n";
    filebuf+="NoteEndCharacter=\r\n";

	try
	{
	  CFile file(GetIniFileName(),CFile::modeWrite);
	  file.Write(filebuf,filebuf.GetLength()); //内容写入文件
	  file.Close(); //关闭文件
	}
	catch(...)
	{
		AfxMessageBox(_T("创建文件失败"));
		exit(0);
	}
}
/////////////////////////////////////////////////////////////////////////////
BOOL CSEG7Dlg::ReadConfig(const char* ConfigFile) //读取配置文件,并初始化配置数据
{
   //读取管脚配置
   a_index=inifile.ReadKeyValue("SETUP","LastPinA"); //
   b_index=inifile.ReadKeyValue("SETUP","LastPinB"); //
   c_index=inifile.ReadKeyValue("SETUP","LastPinC"); //
   d_index=inifile.ReadKeyValue("SETUP","LastPinD"); //
   e_index=inifile.ReadKeyValue("SETUP","LastPinE"); //
   f_index=inifile.ReadKeyValue("SETUP","LastPinF"); //
   g_index=inifile.ReadKeyValue("SETUP","LastPinG"); //
   h_index=inifile.ReadKeyValue("SETUP","LastPinH"); //

   segname[0][0]=pinnametab[a_index];
   segname[1][0]=pinnametab[b_index];
   segname[2][0]=pinnametab[c_index];
   segname[3][0]=pinnametab[d_index];
   segname[4][0]=pinnametab[e_index];
   segname[5][0]=pinnametab[f_index];
   segname[6][0]=pinnametab[g_index];
   segname[7][0]=pinnametab[h_index];
   
   //LED类型配置(共阴极,共阳组)
   ledak_index=inifile.ReadKeyValue("SETUP","LastAK");
   if(ledak_index>1)
   {
     AfxMessageBox(_T("读取配置文件错误,请删除配置文件(LED.INI)!"));
	 exit(0);
   }   


   //语言配置数据
   long i;
   i=inifile.ReadKeyValue("SETUP","LanguageTotal"); //读取语言数据
   CString language("Language");
   CString title;
   char buf[10];
   for(long j=0;j<i;j++) //读取语言选项
   {
	 inifile.ReadKeyValue(language+ _itoa(j,buf,10), "Title", title);
	 if(title.GetLength()==0)
	 {
      AfxMessageBox(_T("读取配置文件错误,请删除配置文件(LED.INI)!"));
	  exit(0);
	 }
     combo_language.AddString(title);
   }
   language_index=inifile.ReadKeyValue("SETUP", "LastLanguage"); //读取当前语言选项索引  
   
    _itoa(language_index,language.GetBufferSetLength(5) ,10);
    language="Language"+language; //获取当前语言项的段名
    inifile.ReadKeyValue(language, "StartCharacter",lag_start_ch); //语言起始字符
	inifile.ReadKeyValue(language, "SeparatorCharacter",lag_separator_ch); //数据分隔符
	inifile.ReadKeyValue(language, "HexLeaderCharacter",lag_hex_leader_ch); //十六进制数据头
	inifile.ReadKeyValue(language, "HexEndCharacter",lag_hex_end_ch); //十六进制数据尾
	inifile.ReadKeyValue(language, "BinLeaderCharacter",lag_bin_leader_ch); //二进制数据头
	inifile.ReadKeyValue(language, "BinEndCharacter",lag_bin_end_ch); //二进制数据尾
	inifile.ReadKeyValue(language, "DecLeaderCharacter",lag_dec_leader_ch); //十进制数据头
	inifile.ReadKeyValue(language, "DecEndCharacter",lag_dec_end_ch); //十进制数据尾
	inifile.ReadKeyValue(language, "NoteLeaderCharacter",lag_note_leader_ch); //注释头
	inifile.ReadKeyValue(language, "NoteEndCharacter",lag_note_end_ch); //注释尾
	opt_radix=inifile.ReadKeyValue(language, "DefaultRadix"); //语言默认基数
	if(opt_radix>2)
	{
      AfxMessageBox(_T("读取配置文件错误,请删除配置文件(LED.INI)!"));
	  exit(0);
	}
    UpdateData(false);//更新数据到控件
    return true;
}
////////////////////////////////////////////////////////////////////////////
BOOL CSEG7Dlg::CheckPinErr(void) //检测管脚是否有错误,有错返回TRUE,否则FALSE
{
  UINT i,j;
  UINT CHK[8];
  UpdateData(true); //读取变量
  CHK[0]=a_index; //初始化缓冲变量
  CHK[1]=b_index;
  CHK[2]=c_index;
  CHK[3]=d_index;
  CHK[4]=e_index;
  CHK[5]=f_index;
  CHK[6]=g_index;
  CHK[7]=h_index;  

  CClientDC dc(this); // 注意此处不能选用CPaintDC(专为OnPaint使用)否则可能绘制不上去  
  dc.FillSolidRect (CHK_ICON_X, CHK_ICON_Y, 32, 32, GetSysColor(COLOR_3DFACE));//清除老图标

 for(j=0;j<=6;j++)
 {
   for(i=j+1;i<=7;i++)
   {
    if(CHK[i]==CHK[j])
	{
	  dc.DrawIcon(CHK_ICON_X,CHK_ICON_Y,AfxGetApp()->LoadIcon(IDI_CHECKERROR));
	  //dc.SetTextColor (RGB(255,0,0));
	  //dc.TextOut(53,280,_T("管脚配置错误"),12);
	  //lab_pinset=_T("管脚配置错误");
	  //PinErrFlag=true;
	  Button_Auto.EnableWindow(false);
	  Button_Mal.EnableWindow (false);
	  UpdateData(false);
      return true;
	}
   }
 }
  dc.DrawIcon(CHK_ICON_X,CHK_ICON_Y,AfxGetApp()->LoadIcon(IDI_CHECKRIGHT));
  //dc.SetTextColor (RGB(0,0,255));
  //dc.TextOut(53,280,_T("管脚配置正确"),12);
  //lab_pinset=_T("管脚配置正确");
  //PinErrFlag=false
  Button_Mal.EnableWindow (true);
  Button_Auto.EnableWindow(true);
  UpdateData(false);
  return false;
}

//////////////////////////////////////////////////////////////////////////////
void CSEG7Dlg::ReDrawSeg(long i)
{
	//CBrush SolidBrush(RGB(255,0,0)); //创建实心的填充画刷
	//CBrush NullBrush(RGB(255,255,255));
	//CPen pen(PS_SOLID,1,RGB(0,0,255)); //创建蓝色实心画笔,线宽为1

	CClientDC dc(this); // 注意此处不能选用CPaintDC(专为OnPaint使用)否则可能绘制不上去	
	dc.SelectObject(&pen_blue); //设置画笔
	dc.SetBkMode(TRANSPARENT); //透明文字背景

	  if(segstatus[i]) //不用再循环,因为此时i就代表了所点击的段
	  {
	    dc.SelectObject(&brush_red); //设置画刷
		dc.SetTextColor(RGB(255,255,255)); //设置白色字体		
	  }
	  else
	  {
        dc.SelectObject(&brush_white); //设置画刷
		dc.SetTextColor(RGB(255,0,0)); //设置红色字体
		
	  }
	  dc.Ellipse(*((CRect*)seglocation[i])); //画对应的圆
	  dc.TextOut(namelocation[i][0],namelocation[i][1],segname[i],1);
}
/////////////////////////////////////////////////////////////////////////////
// CSEG7Dlg dialog

CSEG7Dlg::CSEG7Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSEG7Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSEG7Dlg)
	a_index = 0; //各个COMBO的索引值
	b_index = 1; 
	c_index = 2;
	d_index = 3;
	e_index = 4;
	f_index = 5;
	g_index = 6;
	h_index = 7;
	language_index = 0;
	ledak_index = 0;
	note_string = _T("Note:"); //注释框
	output_string = _T(""); //输出框为空
	opt_radix = 0; //选中16进制
	check_selectall = 2;  //灰色,因为设置了数字0-9为选中状态
	check_uppercase = FALSE;
	//}}AFX_DATA_INIT
	check_char[0] = TRUE; //选中数字0-9
	check_char[1] = FALSE;
	check_char[2] = FALSE;
	check_char[3] = FALSE;
	check_char[6] = FALSE;
	check_char[7] = FALSE;
	check_char[8] = FALSE;
	check_char[10] = FALSE;
	check_char[11] = FALSE;
	check_char[14] = FALSE;
	check_char[17] = FALSE;
	check_char[18] = FALSE;
	check_char[4] = FALSE;
	check_char[5] = FALSE;
	check_char[9]= FALSE;
	check_char[12] = FALSE;
	check_char[13] = FALSE;
	check_char[15] = FALSE;
	check_char[16] = FALSE;

	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	
}

void CSEG7Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSEG7Dlg)
	DDX_Control(pDX, IDC_EDIT_OUTPUT, edit_output);
	DDX_Control(pDX, IDC_EDIT_NOTE, edit_note);
	DDX_Control(pDX, IDC_BTN_SET, Button_Set);
	DDX_Control(pDX, IDC_BTN_AUTO, Button_Auto);
	DDX_Control(pDX, IDC_BTN_CLEAR, Button_Clear);
	DDX_Control(pDX, IDC_BTN_COPY, Button_Copy);
	DDX_Control(pDX, IDC_BTN_MAL, Button_Mal);
	DDX_Control(pDX, IDC_BTN_RESET_PIN, Button_ResetPin);
	DDX_Control(pDX, IDC_BTN_SAVE, Button_Save);
	DDX_Control(pDX, IDC_BTN_SAVE_PIN, Button_SavePin);
	DDX_Control(pDX, IDC_COMBO10, combo_language);
	DDX_Control(pDX, IDC_COMBO9, combo_ledak);
	DDX_Control(pDX, IDC_COMBO8, combo_h);
	DDX_Control(pDX, IDC_COMBO7, combo_g);
	DDX_Control(pDX, IDC_COMBO6, combo_f);
	DDX_Control(pDX, IDC_COMBO5, combo_e);

⌨️ 快捷键说明

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