简述:
这两天在学嵌入式的开发与设计,一切从新开始,从头开始。今天在我的那块实验板上,搞了那个LCD12232点阵的显示。
可是在网上一搜,却没有相关的软件进行简易的计算。每次为了显示一个字,各种算,各种纠结。随想到了自己开发一款小软件。
实验平台:
1.UP-Magic2410
2.模块:LCD12232
LCD12232点阵字库计算器
1.使用说明:
只需要在软件上画出欲显示的图形,下面就将计算出相应的十六进制。挂载进开发板,便可以显示。
2.代码(C#):
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace 点阵生成12232
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
initFrame();
}
int pX = 0; //控件的XY坐标
int pY = 0;
Control pOld = null; //记录控件的老状态
GroupBox groupBoxControl = new GroupBox();
int[,] allData = new int[16,16];
/// <summary>
/// 初始化
/// </summary>
private void initFrame()
{
pX = 15;
pY = 18;
pOld = null;
//this.Size = new System.Drawing.Size(350,500);
createButton();
}
/// <summary>
/// 创建16*16按钮
/// </summary>
private void createButton()
{
groupBoxControl.AutoSize = true;
groupBoxControl.Text = "操作框";
groupBoxControl.Location = new Point(12, 10);
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
allData[i, j] = 0;
Button btnCreate = new Button();
btnCreate.FlatStyle = FlatStyle.Flat;
btnCreate.Text = "0";
btnCreate.Name = i.ToString() + j.ToString(); ;
btnCreate.BackColor = Color.White;
btnCreate.Width = 20;
btnCreate.Height = 20;
btnCreate.Location = new Point(pX, pY);
btnCreate.MouseMove += new MouseEventHandler(mouseMove);
btnCreate.MouseEnter += new EventHandler(mouseEnter);
btnCreate.MouseLeave += new EventHandler(mouseLeave);
pX += 20;
btnCreate.Parent = groupBoxControl;
}
pX = 15;
pY += 20;
}
Controls.Add(groupBoxControl);
}
/// <summary>
/// 切换按钮状态
/// </summary>
private void changeBtnState(Control pControl)
{
if (int.Parse(pControl.Text) == 0)
{
pControl.Text = "1";
pControl.BackColor = Color.Black;
pControl.ForeColor = Color.Red;
}
else
{
pControl.Text = "0";
pControl.BackColor = Color.White;
pControl.ForeColor = SystemColors.ControlText;
}
}
/// <summary>
/// 清除现有状态
/// </summary>
private void clearState()
{
foreach (Control c in groupBoxControl.Controls)
{
if (c.Name != "btnCalc" && c.Name != "btnClear")
{
c.Text = "0";
c.BackColor = Color.White;
c.ForeColor = SystemColors.ControlText;
allData = null;
allData = new int[16,16];
tbxResult.Text = "请重新选择计算";
}
}
}
//计算4个数之间的数
private int getBetweenFour(int i)
{
if(i>=0&&i<4)
return 0;
else if(i>=4&&i<8)
return 1;
else if(i>=8&i<12)
return 2;
else
return 3;
}
//计算最终结果
private string calcResult()
{
string strResult = "" ;
int[,] sum = new int[4,16];
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
foreach (Control c in groupBoxControl.Controls)
{
if (c.Name != "btnCalc" && c.Name != "btnClear")
{
if (c.Name.Equals(i.ToString() + j.ToString()))
{
allData[i, j] = int.Parse(c.Text);
// Console.Write(allData[i, j].ToString());
}
}
}
}
}
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
int x=getBetweenFour(i);
switch (i%4)
{
case 0:
sum[x,j] += allData[i,j];
break;
case 1:
sum[x,j] += allData[i, j] * 2;
break;
case 2:
sum[x,j] += allData[i, j] * 4;
break;
case 3:
sum[x,j] += allData[i, j] * 8;
break;
}
}
}
string[,] tem = new string[4,16];
string[] a = new string[16];
string[] b = new string[16];
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 16; j++)
{
tem[i,j] = sum[i, j].ToString("X");
Console.Write(tem[i, j]);
}
Console.WriteLine();
}
for (int i = 3;i >= 0; i--)
{
for (int j = 0; j < 16; j++)
{
if (i > 1)
a[j] += tem[i, j];
else
b[j] += tem[i, j];
}
}
for (int i = 0; i < 16; i++)
{
strResult += "0x" + b[i] + ",";
}
strResult += "\r\n";
for(int i=0;i<16;i++)
{
strResult += "0x"+a[i]+",";
}
return strResult;
}
void mouseEnter(object sender, EventArgs e)
{
this.Capture = true;
}
void mouseLeave(object sender, EventArgs e)
{
this.Capture = false;
}
void mouseMove(object sender, MouseEventArgs e)
{
Control pControl = sender as Control;
if (pOld!=pControl&&e.Button==MouseButtons.Left)
{
pOld = pControl;
changeBtnState(pControl);
}
}
private void btnCalc_Click(object sender, EventArgs e)
{
tbxResult.Text=calcResult();
}
private void btnClear_Click(object sender, EventArgs e)
{
clearState();
}
private void btnCopy_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(tbxResult.Text))
{
Clipboard.SetText(tbxResult.Text);
MessageBox.Show("数据复制成功");
}
else
{
MessageBox.Show("文本框数据为空");
}
}
}
}
3.功能截图:
4.下载地址:
汗,就在CSDN的资源里,现在估计还在审核。名称:“LCD12232点阵计算器”
点阵显示:
开发板部分相关程序:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include "lcd.h"
unsigned char uptech_logo_for_Gray_LCD_1[]=
{
/*------------------------------------------------------------------------------
每两行一个字符
------------------------------------------------------------------------------*/
0xF0,0x18,0x0C,0xC4,0x76,0x12,0x1A,0xC3,0xC1,0x09,0x33,0x62,0xC6,0x0C,0x18,0xF0,
0x0F,0x18,0x30,0x60,0xC0,0x80,0x80,0x89,0x88,0x80,0x80,0xC0,0x40,0x60,0x38,0x0F,
0x10,0x10,0xF0,0xFF,0xF0,0x90,0x50,0x50,0x60,0x10,0x1C,0x97,0x30,0x60,0xC0,0x80,
0x18,0x0C,0x03,0x7F,0x00,0x03,0x26,0x38,0x2C,0x26,0x23,0x31,0x10,0x1C,0x38,0x20,
0x00,0x80,0xC0,0x60,0xF8,0x0E,0x00,0x08,0x08,0xC8,0xE8,0x28,0x38,0x10,0x00,0x00,
0x00,0x01,0x00,0x00,0x7F,0x01,0x01,0x01,0x01,0x61,0x7F,0x01,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0xE0,0xA0,0xA0,0xBF,0xA4,0xA4,0xA4,0xA4,0xE0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x13,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0x03,0x00,0x00,0x00,0x00,
};
unsigned char uptech_logo_for_Gray_LCD_2[]=
{
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
0x00,0x00,0x00,0x00,0x20,0x21,0x36,0x1C,0xC8,0x18,0x3C,0x64,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x42,0x42,0x62,0x3A,0x02,0xFF,0x02,0x0A,0x12,0x62,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,
0x00,0x00,0x20,0x30,0x1F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,
0x00,0x80,0x81,0x85,0x9D,0x95,0x95,0x95,0x9D,0x81,0xC1,0xFF,0x81,0x81,0x80,0x00,
0x00,0x00,0x00,0x1E,0x12,0x12,0x12,0x12,0x12,0x5E,0x40,0xFF,0x00,0x00,0x00,0x00,
0xE0,0x38,0x0C,0xC6,0x62,0x22,0x43,0x01,0x03,0xE2,0x22,0x6E,0x58,0x30,0xE0,0x80,
0x0F,0x38,0xE0,0xC0,0xC0,0xCC,0xC8,0xC8,0xC8,0xCC,0xC4,0xC0,0xC0,0x60,0x38,0x0F,
};
int main(void)
{
int fd;
int i,j,k;
i=8;
fd=open("/dev/S3C2410_SPI0",O_RDWR);
if(fd < 0){
printf("####spi device open fail####\n");
return (-1);
}
Gray_LCD_Init(fd);
Gray_LCD_Clear(fd);
for(i=8,j=0;i<123;i=i+30,j=j+32)
{
Gray_LCD_Standard_Signal_Word(fd,i,Gary_LCD_Page0 ,uptech_logo_for_Gray_LCD_1+j);
Gray_LCD_Standard_Signal_Word(fd,i,Gary_LCD_Page2 ,uptech_logo_for_Gray_LCD_2+j);
}
close(fd);
return 0;
}
最后总结:
呃,本人亦属初学,代码凌乱的地方也请多多见谅。