当前位置:编程学习 > C/C++ >>

基于mini2440简单计算器的实现(裸机代码)

基于mini2440简易计算器使用的是数组实现,并非逆波兰式,因此功能不够强大,仅供驱动学习,以及C语言基础编程学习之用.有时间读者可以用逆波兰式来实现强大功能计算器,原理也很简单,建议读《c程序设计第二版》里面有算法的代码.读者自行研究.此程序基于电子相册的改进,触摸屏,LCD,字符现实,数字输入等等.

主函数部分:


[cpp]
#include "def.h"  
#include "option.h"  
#include "2440addr.h"  
#include "profile.h"  
 
 
extern U32 X,Y; 
 
extern void BMP_display(int x0,int y0,int x1,int y1,const U8 *bmp); 
 
extern void CLK_init(void); 
extern void LCD_IO_init(void); 
extern void LCD_POWER(void); 
extern void LCD_init(void); 
extern void LCD_on(void); 
extern void LCD_off(void); 
extern void Tc_calibrate(void); 
extern void input(void); 
extern void Touch_Init(void); 
extern void word(int x,int y,char* string); 
 
extern unsigned char gImage[];  //extern声明引用外部数组  
 
void Main(void) 

 
    rGPBCON=(1<<0); 
    rGPBDAT=(0<<0);//关闭蜂鸣器  
 
    CLK_init(); 
    LCD_POWER(); 
    LCD_IO_init(); 
    LCD_init(); 
    LCD_on(); 
    Touch_Init(); 
    MMU_Init(); //初始化MMU,解决中断向量表入口地址与内存地址之间不一致问题,进行地址的重映射  
     
    BMP_display(0, 0, 320,240, gImage); //显示图片  
     
    while(1) 
    {  
        Tc_calibrate(); 
        input(); 
    } 
     

#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "profile.h"


extern U32 X,Y;

extern void BMP_display(int x0,int y0,int x1,int y1,const U8 *bmp);

extern void CLK_init(void);
extern void LCD_IO_init(void);
extern void LCD_POWER(void);
extern void LCD_init(void);
extern void LCD_on(void);
extern void LCD_off(void);
extern void Tc_calibrate(void);
extern void input(void);
extern void Touch_Init(void);
extern void word(int x,int y,char* string);

extern unsigned char gImage[]; //extern声明引用外部数组

void Main(void)
{

    rGPBCON=(1<<0);
    rGPBDAT=(0<<0);//关闭蜂鸣器

    CLK_init();
 LCD_POWER();
    LCD_IO_init();
    LCD_init();
    LCD_on();
 Touch_Init();
 MMU_Init(); //初始化MMU,解决中断向量表入口地址与内存地址之间不一致问题,进行地址的重映射
 
    BMP_display(0, 0, 320,240, gImage); //显示图片
 
    while(1)
    {
     Tc_calibrate();
  input();
    }
 
}计算器的输入及其计算部分,结合触摸屏,利用数组实现字符和数字的存储等:


[cpp] view plaincopyprint?#include "def.h"  
#include "2440addr.h"  
 
#define touch_p  (X>0&&X<80&&Y>198&&Y<240)  
#define touch_0  (X>80&&X<160&&Y>198&&Y<240)  
#define touch_e  (X>160&&X<240&&Y>198&&Y<240)  
#define touch_a  (X>240&&X<320&&Y>198&&Y<240)  
 
#define touch_1  (X>0&&X<80&&Y>156&&Y<198)  
#define touch_2  (X>80&&X<160&&Y>156&&Y<198)  
#define touch_3  (X>160&&X<240&&Y>156&&Y<198)  
#define touch_s  (X>240&&X<320&&Y>156&&Y<198)  
 
#define touch_4  (X>0&&X<80&&Y>113&&Y<156)  
#define touch_5  (X>80&&X<160&&Y>113&&Y<156)  
#define touch_6  (X>160&&X<240&&Y>113&&Y<156)  
#define touch_m  (X>240&&X<320&&Y>113&&Y<156)  
 
#define touch_7  (X>0&&X<80&&Y>72&&Y<113)  
#define touch_8  (X>80&&X<160&&Y>72&&Y<113)  
#define touch_9  (X>160&&X<240&&Y>72&&Y<113)  
#define touch_d  (X>240&&X<320&&Y>72&&Y<113)  
 
#define touch_c  (X>241&&X<320&&Y>44&&Y<73)  
 
#define white 0xffffff  
#define B_off rGPBDAT=(0<<0) //关闭蜂鸣器  
#define B_on  rGPBDAT=(1<<0) //开启蜂鸣器  
 
extern U32 X,Y; 
extern unsigned char gImage[];  //extern声明引用外部数组  
 
extern Draw_REC(int x,int y,int x1,int y1,U32 color); 
extern void BMP_display(int x0,int y0,int x1,int y1,const U8 *bmp); 
extern void Draw_ASCII(U32 x,U32 y,U32 color,const unsigned char ch[]); 
extern void word(int x,int y,char* string); 
extern void Main(void); 
 
char op,opf;//用于何种元算的分拣操作符  
int Num1,Num2;//参与运算两个数  
int F1,F2;//答案  
char num[10000];//用于显示的字符数组  
int num1[100],num2[100];//保存输入数字的数组  
int n[100],t[100]; //提取答案的各个位  
int n1=0,n2=0;//用于输入数字分拣操作符  
int len=0,len1=0;//用于计算答案的位数  
int i=0,j=0,k=0,a=0; 
 
/********************************** 
*清除各个标志函数
**********************************/ 
void Clear_f(void) 

    int b=0,c=0; 
     
    for(c=0;c<10000;c++) 
    { 
        num[c]=' '; 
    } 
    for(b=0;b<100;b++) 
    { 
        num1[b]=0; 
        num2[b]=0; 
        n[b]=0; 
        t[b]=0; 
    } 
    op=0;opf=0; 
    Num1=0;Num2=0; 
    F1=0;F2=0; 
    n1=0;n2=0; 
    len=0;len1=0; 
    i=0;j=0;k=0;a=0; 

/********************************** 
*四则运算函数
******************

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,