嵌入式LCD12232点阵研究

来源:互联网 发布:介绍云计算的ppt 编辑:程序博客网 时间:2024/06/05 00:22

简述:

这两天在学嵌入式的开发与设计,一切从新开始,从头开始。今天在我的那块实验板上,搞了那个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;}


最后总结:

呃,本人亦属初学,代码凌乱的地方也请多多见谅。

原创粉丝点击