找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1638|回复: 0
收起左侧

51单片机简易计算器程序报错

[复制链接]
ID:265513 发表于 2017-12-22 23:15 | 显示全部楼层 |阅读模式
课设做的很简单的计算器,基本运算都有,可报错

单片机源程序如下:
  1. //----------------------------------------------------------------------------
  2. // C main line
  3. //----------------------------------------------------------------------------

  4. #include <m8c.h>        // part specific constants and macros
  5. #include "PSoCAPI.h"    // PSoC API definitions for all User Modules

  6. #include "Shuzi.h"
  7. #include "Character.h"
  8. #include "Define.h"


  9. void Delayms(void){
  10.         unsigned int n = 0x00;
  11.         for(n=2000;n>0;n--);
  12. }

  13. void Delays(unsigned int n){
  14.         unsigned int m = 0x00;
  15.         while(n--){
  16.                 for(m=0;m<500;m++){
  17.                         ;
  18.                 }
  19.         }
  20. }

  21. //向上边LCD还是向下边LCD写数据/命令
  22. void LCD_Write(unsigned char chn,unsigned char CMD_DAT,unsigned char dat){
  23.         unsigned char n = 0x00;
  24.        
  25.         if(CMD_DAT == COMMAND){
  26.                 LCD_RS_OUT0;
  27.         }else{
  28.                 LCD_RS_OUT1;
  29.         }
  30.        
  31.         LCD_DATA_PORT = dat;
  32.        
  33.         LCD_WR_OUT0;
  34.         LCD_RD_OUT0;
  35.        
  36.         if (chn == LCD_UP){//选择上边LCD
  37.                 LCD_CS1_OUT0;
  38.         }else{
  39.                 if(chn == LCD_DOWN){//选择下边LCD
  40.                         LCD_CS2_OUT0;
  41.                 }else{//选择两个LCD
  42.                         LCD_CS1_OUT0;
  43.                         LCD_CS2_OUT0;
  44.                 }
  45.         }
  46.         for(n=0;n<10;n++);
  47.        
  48.         LCD_RD_OUT1;
  49.         for(n=0;n<10;n++);
  50.        
  51.         //LCD_WR_OUT1;
  52.        
  53.         if (chn == LCD_UP){//选择上边LCD
  54.                 LCD_CS1_OUT1;
  55.         }else{
  56.                 if(chn == LCD_DOWN){//选择下边LCD
  57.                         LCD_CS2_OUT1;
  58.                 }else{//选择两个LCD
  59.                         LCD_CS1_OUT1;
  60.                         LCD_CS2_OUT1;
  61.                 }
  62.         }
  63.        
  64.         LCD_RD_OUT0;
  65.         for(n=0;n<10;n++);
  66.        
  67. }


  68. //在com,seg上写一个字节的数据
  69. void Draw_Line(unsigned char chn,unsigned char pg,unsigned char seg,unsigned char dat1,unsigned char dat2,unsigned char CNT){
  70.         unsigned char n = 0x00;
  71.         //unsigned char m = 0x00;
  72.        
  73.         seg = seg +4;
  74.        
  75.         LCD_Write(chn,COMMAND,(0xb0 | pg ));// 写 pg 地址
  76.         LCD_Write(chn,COMMAND,(0x10 | (((seg >> 4) & 0x0f))));// 写 seg 高4位地址
  77.         LCD_Write(chn,COMMAND,(0x00 | ((seg & 0x0f))));// 写 seg 低4位地址
  78.        
  79.         for(n=0;n<CNT;n++){
  80.                 LCD_Write(chn,DATA,dat1);
  81.                 n++;
  82.                 if(n<CNT){
  83.                         //for(m=0;m<5;m++);
  84.                         LCD_Write(chn,DATA,dat2);
  85.                         //for(m=0;m<5;m++);
  86.                 }
  87.         }

  88. }

  89. //清除LCD上所有的数据,使之显示空白
  90. void Clear_LCD(unsigned char chn){
  91.         unsigned int n = 0x00;
  92.        
  93.         for(n=0;n<LCD_HEIGHT_PAGE;n++){
  94.                 Draw_Line(chn,n,0x00,0x00,0x00,LCD_WIDTH);
  95.         }
  96. }

  97. //初始化LCD
  98. void LCD_Init(void){
  99.        
  100.         LCD_RST_OUT0;
  101.         Delays(50);
  102.         LCD_RST_OUT1;
  103.         Delays(50);
  104.        
  105.         //LCD_Write(LCD_TWO,COMMAND,0xa0);//
  106.         LCD_Write(LCD_TWO,COMMAND,0xc0);
  107.        
  108.         LCD_Write(LCD_TWO,COMMAND,0xa1);//
  109.         //LCD_Write(LCD_TWO,COMMAND,0xc8);
  110.        
  111.        
  112.         LCD_Write(LCD_TWO,COMMAND,0xf8);
  113.         LCD_Write(LCD_TWO,COMMAND,0x00);
  114.         LCD_Write(LCD_TWO,COMMAND,0xa2);
  115.         Delays(10);
  116.         LCD_Write(LCD_TWO,COMMAND,0x2c);
  117.         Delays(10);
  118.         LCD_Write(LCD_TWO,COMMAND,0x2e);
  119.         Delays(10);
  120.         LCD_Write(LCD_TWO,COMMAND,0x2f);
  121.         Delays(10);
  122.         LCD_Write(LCD_TWO,COMMAND,0x24);
  123.         Delays(10);
  124.         LCD_Write(LCD_TWO,COMMAND,0x81);
  125.         LCD_Write(LCD_TWO,COMMAND,41);// 41 = 9.0V
  126.         Delays(10);
  127.         LCD_Write(LCD_TWO,COMMAND,0x40);
  128.        
  129.         Clear_LCD(LCD_UP);
  130.         Clear_LCD(LCD_DOWN);
  131.        
  132.         LCD_Write(LCD_TWO,COMMAND,0xaf);
  133.        
  134.         Delays(10);
  135.        
  136. }

  137. //清除数字区
  138. void Clear_Num(unsigned char pg,unsigned char seg,unsigned char length){
  139.        
  140.         Draw_Line(LCD_UP,pg,seg,0x00,0x00,length);
  141.         Draw_Line(LCD_UP,pg+1,seg,0x00,0x00,length);
  142.        
  143. }
  144. //冀雅测试画面
  145. void Show_Test(unsigned char chn){
  146.         unsigned char n = 0x00;
  147.         unsigned char m = 0x00;
  148.        
  149.         for(n=0;n<TEST_CNT;n++){
  150.                 for(m=0;m<LCD_HEIGHT_PAGE;m++){
  151.                         Draw_Line(chn,m,0x00,TEST_CODE[n*2],TEST_CODE[n*2+1],LCD_WIDTH);
  152.                 }
  153.                 Delays(TEST_DELAY_VALUE);
  154.         }
  155.        
  156. }
  157. //显示框屏
  158. void Show_Kuang(unsigned char chn){
  159.         unsigned char n = 0x00;
  160.        
  161.         Draw_Line(chn,0,0x00,0x01,0x01,LCD_WIDTH);
  162.         Draw_Line(chn,(LCD_HEIGHT_PAGE - 1),0x00,0x80,0x80,LCD_WIDTH);
  163.         for(n=0;n<LCD_HEIGHT_PAGE;n++){
  164.                 Draw_Line(chn,n,0,0xff,0xff,0x01);
  165.                 Draw_Line(chn,n,(LCD_WIDTH - 1),0xff,0xff,0x01);
  166.         }
  167. }
  168. //显示冀雅模块汉字
  169. void Show_Hanzi(unsigned char chn,unsigned char pg,unsigned char seg,unsigned char color){
  170.         unsigned int n = 0x0000;
  171.         unsigned int m = 0x0000;
  172.         unsigned int k = 0x0000;
  173.        
  174.         for(k=0;k<4;k++){
  175.                 for(n=0;n<2;n++){
  176.                         for(m=0;m<16;m++){
  177.                                 if(color == BLACK){
  178.                                         Draw_Line(chn,pg+n,seg+k*16+m,JIYA[k*32+n*16+m],0x00,0x01);
  179.                                 }else{
  180.                                         Draw_Line(chn,pg+n,seg+k*16+m,~JIYA[k*32+n*16+m],0x00,0x01);
  181.                                 }
  182.                         }
  183.                 }
  184.         }
  185. }


  186. //显示+-*/ 标志触摸区
  187. //         ADD_FUHAO                0
  188. //        MIN_FUHAO                1
  189. //         MUL_FUHAO                2
  190. //         DIV_FUHAO                3
  191. void Show_Fuhao(unsigned char chn,unsigned char witch,unsigned char pg,unsigned char seg){
  192.         unsigned char n = 0x00;
  193.         unsigned char m = 0x00;
  194.        
  195.         if(witch != 0xff){//如果不是清屏命令
  196.                 for(n=0;n<2;n++){
  197.                         for(m=0;m<17;m++){
  198.                                 Draw_Line(chn,pg+n,seg+m,YUN_SUN_CODE[witch*34+n*17+m],0x00,0x01);
  199.                         }
  200.                 }
  201.         }else{
  202.                 for(n=0;n<2;n++){
  203.                         Draw_Line(chn,pg+n,seg,0x00,0x00,17);
  204.                 }
  205.         }
  206. }


  207. //显示单一字符,数字,或者+-*/=C功能按键符号
  208. void Show_Sig_Char(unsigned char chn,unsigned char pg,unsigned char seg,unsigned char num){
  209.         unsigned char n = 0x00;
  210.         unsigned char m = 0x00;
  211.        
  212.         if(num < 10){//如果是数字
  213.                 for(n=0;n<2;n++){
  214.                         for(m=0;m<9;m++){
  215.                                 Draw_Line(chn,pg+n,seg+m,MID_NUM_CODE[num*18+n*9+m],0x00,0x01);
  216.                         }
  217.                 }
  218.         }else{
  219.                 switch(num){
  220.                         case 'C':
  221.                                         Show_CLR_CAL_FUHAO(chn,CLR_FUHAO,pg,seg);
  222.                         break;
  223.                         case '=':
  224.                                         Show_CLR_CAL_FUHAO(chn,CAL_FUHAO,pg,seg);
  225.                         break;
  226.                         case '+':
  227.                                         Show_Fuhao(chn,ADD_FUHAO,pg,seg);
  228.                         break;
  229.                         case '-':
  230.                                         Show_Fuhao(chn,MIN_FUHAO,pg,seg);
  231.                         break;
  232.                         case '*':
  233.                                         Show_Fuhao(chn,MUL_FUHAO,pg,seg);
  234.                         break;
  235.                         case '/':
  236.                                         Show_Fuhao(chn,DIV_FUHAO,pg,seg);
  237.                         break;
  238.                                
  239.                         default:
  240.                                
  241.                         break;
  242.                 }
  243.         }
  244.        
  245. }

  246. //显示数字,long型数据,最多可显示10位数字
  247. void Show_Num(unsigned char chn,unsigned char pg,unsigned char seg,unsigned long num){
  248.         unsigned long dat[10];
  249.         unsigned long tmp = 0x00000000;
  250.         unsigned char dispay_on = 0x00;
  251.        
  252.         unsigned char n = 0x00;
  253.         unsigned char m = 0x00;
  254.         unsigned char k = 0x00;
  255.        
  256.         tmp = num;
  257.         dat[0] = tmp / 1000000000;
  258.         dat[1] = (num - dat[0] * 100000000) / 100000000;
  259.         dat[2] = (num - dat[0] * 1000000000 - dat[1] * 100000000) / 10000000;
  260.         dat[3] = (num - dat[0] * 1000000000 - dat[1] * 100000000 - dat[2] * 10000000) / 1000000;
  261.         dat[4] = (num - dat[0] * 1000000000 - dat[1] * 100000000 - dat[2] * 10000000 - dat[3] * 1000000) / 100000;
  262.         dat[5] = (num - dat[0] * 1000000000 - dat[1] * 100000000 - dat[2] * 10000000 - dat[3] * 1000000 - dat[4] * 100000) / 10000;
  263.         dat[6] = (num - dat[0] * 1000000000 - dat[1] * 100000000 - dat[2] * 10000000 - dat[3] * 1000000 - dat[4] * 100000 - dat[5] * 10000) / 1000;
  264.         dat[7] = (num - dat[0] * 1000000000 - dat[1] * 100000000 - dat[2] * 10000000 - dat[3] * 1000000 - dat[4] * 100000 - dat[5] * 10000 - dat[6] * 1000) / 100;
  265.         dat[8] = (num - dat[0] * 1000000000 - dat[1] * 100000000 - dat[2] * 10000000 - dat[3] * 1000000 - dat[4] * 100000 - dat[5] * 10000 - dat[6] * 1000 - dat[7] * 100) / 10;
  266.         dat[9] = num % 10;
  267.        
  268.         for(n=0;n<10;n++){//显示10个数字
  269.                 if(dat[n] != 0x00){//数字不等于0,需要显示
  270.                         dispay_on = 0xff;
  271.                         Show_Sig_Char(chn,pg,seg+n*9,dat[n]);
  272.                 }else{
  273.                         if(dispay_on != 0x00){//已经有不为0的数字了,需要继续显示
  274.                                 Show_Sig_Char(chn,pg,seg+n*9,dat[n]);
  275.                         }else{
  276.                                 if(n == 9){
  277.                                         Show_Sig_Char(chn,pg,seg+n*9,dat[n]);
  278.                                 }
  279.                         }
  280.                 }
  281.                
  282.         }
  283.        
  284. }


  285. //显示输入的数字,最多5个数字
  286. void Show_Input_Num(unsigned char pg,unsigned char seg,unsigned char dat[5]){
  287.         unsigned char n = 0x00;
  288.         unsigned char dispay_on = 0x00;
  289.        
  290.         for(n=0;n<5;n++){
  291.                 if(dat[n] != 0x00){//数字不等于0,需要显示
  292.                         dispay_on = 0xff;
  293.                         Show_Sig_Char(LCD_UP,pg,seg+n*9,dat[n]);
  294.                 }else{
  295.                         if(dispay_on != 0x00){//已经有不为0的数字了,需要继续显示
  296.                                 Show_Sig_Char(LCD_UP,pg,seg+n*9,dat[n]);
  297.                         }
  298.                 }
  299.         }
  300.        
  301. }
  302. //开始SEG = 30
  303. //
  304. void Show_First_Num(unsigned char num){
  305.         if(num > 9){
  306.                
  307.         }
  308. }


  309. //显示计算器界面,下边的屏幕
  310. void Show_CAL_GUI(void ){
  311.         unsigned char n = 0x00;
  312.        
  313.         for(n=0;n<16;n++){
  314.                 Show_Sig_Char(LCD_DOWN,CAL_POSITION_GUI[n*2],CAL_POSITION_GUI[n*2+1],TP_KEY_CODE[n]);
  315.                
  316.         }
  317.        
  318. }

  319. const unsigned int MUL_CODE[]={
  320.         10000,1000,100,10,1,
  321. };
  322. //计算输入值
  323. unsigned long CAL_Input_Num(unsigned char num[5]){
  324.         unsigned long tmpl = 0x00;
  325.         unsigned long dt = 0x00;
  326.         unsigned char n = 0x00;
  327.        
  328.         tmpl = 0x00000000;
  329.        
  330.         for(n=0;n<5;n++){
  331.                 dt = num[n];
  332.                 dt = dt * MUL_CODE[n];
  333.                 tmpl = tmpl + dt;
  334.         }
  335.        
  336.         return tmpl;
  337.        
  338. }

  339. //显示 作者
  340. void Show_Author(unsigned char pg,unsigned char seg){
  341.         unsigned char n = 0x00;
  342.         unsigned char m = 0x00;
  343.         unsigned char k = 0x00;
  344.        
  345.         for(k=0;k<6;k++){
  346.                 for(n=0;n<2;n++){
  347.                         for(m=0;m<16;m++){
  348.                                 Draw_Line(LCD_UP,pg+n,seg+k*16+m,AUTHOR_CODE[k*32+n*16+m],0x00,0x01);
  349.                         }
  350.                 }
  351.         }
  352.        
  353. }

  354. //显示 冀雅
  355. void Show_Jiya(unsigned char pg,unsigned char seg){
  356.         unsigned char n = 0x00;
  357.         unsigned char m = 0x00;
  358.         unsigned char k = 0x00;
  359.        
  360.         for(k=0;k<2;k++){
  361.                 for(n=0;n<2;n++){
  362.                         for(m=0;m<16;m++){
  363.                                 Draw_Line(LCD_UP,pg+n,seg+k*16+m,JIYA[k*32+n*16+m],0x00,0x01);
  364.                         }
  365.                 }
  366.         }
  367.        
  368. }
  369. //显示 计算器
  370. void Show_Jisuanqi(unsigned char pg,unsigned char seg){
  371.         unsigned char n = 0x00;
  372.         unsigned char m = 0x00;
  373.         unsigned char k = 0x00;
  374.        
  375.         for(k=0;k<3;k++){
  376.                 for(n=0;n<2;n++){
  377.                         for(m=0;m<16;m++){
  378.                                 Draw_Line(LCD_UP,pg+n,seg+k*16+m,JISUANQI_CODE[k*32+n*16+m],0x00,0x01);
  379.                         }
  380.                 }
  381.         }
  382.        
  383. }
  384. //显示 参数错误
  385. void Show_Err_Tips(unsigned char pg,unsigned char seg){
  386.         unsigned char n = 0x00;
  387.         unsigned char m = 0x00;
  388.         unsigned char k = 0x00;
  389.        
  390.         for(k=0;k<4;k++){
  391.                 for(n=0;n<2;n++){
  392.                         for(m=0;m<16;m++){
  393.                                 Draw_Line(LCD_UP,pg+n,seg+k*16+m,ERROR_TIPS[k*32+n*16+m],0x00,0x01);
  394.                         }
  395.                 }
  396.         }
  397.        
  398. }
  399. //在上边屏幕显示冀雅LOGO
  400. void Show_Logo(void ){
  401.        
  402.         Show_Jiya(0,8);//显示冀雅
  403.         Show_Jisuanqi(3,0);//显示计算器
  404.        
  405. }


  406. //计算器测试
  407. void Caculate_Test(void ){
  408.         unsigned char Loop = 0x01;
  409.         unsigned char key = 0x00;
  410.         unsigned char Input_Num_Cnt = 0x00;
  411.         unsigned char Input_NUM[5];
  412.         unsigned char Fuhao = 0xff;
  413.         unsigned char n = 0x00;
  414.         unsigned char tmpm = 0x00;
  415.         unsigned char last_key = 0xff;
  416.         unsigned long rslt = 0x00;
  417.        
  418.         First_NUM = 0x00000000;
  419.         Second_NUM= 0x00000000;

  420.         for(n=0;n<5;n++){
  421.                 Input_NUM[n] = 0x00;
  422.         }
  423.        
  424.         Clear_LCD(LCD_UP);//清屏上边的屏幕
  425.         Clear_LCD(LCD_DOWN);//清屏下边的屏幕
  426.        
  427.         Show_Logo();//显示冀雅LOGO
  428.         Show_CAL_GUI();//显示下边屏幕的数字排列和符号标示
  429.        
  430.        
  431.         Input_Num_Cnt = 0x00;
  432.         while(Loop == 0x01){//进入有条件无限循环
  433.                 key = TP_Scan();//扫描按键
  434.                 if(key != 0xff){//如果有按键按下
  435.                         switch(key){//判断按下的是哪个按键
  436.                                 case '+':
  437.                                                         Show_Fuhao(LCD_UP,ADD_FUHAO,2,55);
  438.                                                         Fuhao = '+';
  439.                                                        
  440.                                                         Input_Num_Cnt = 0x00;
  441.                                                         for(n=0;n<5;n++){
  442.                                                                 Input_NUM[n] = 0x00;
  443.                                                         }
  444.                                                        
  445.                                 break;
  446.                                 case '-':
  447.                                                         Show_Fuhao(LCD_UP,MIN_FUHAO,2,55);
  448.                                                         Fuhao = '-';
  449.                                                        
  450.                                                         Input_Num_Cnt = 0x00;
  451.                                                         for(n=0;n<5;n++){
  452.                                                                 Input_NUM[n] = 0x00;
  453.                                                         }
  454.                                                        
  455.                                 break;
  456.                                 case '*':
  457.                                                         Show_Fuhao(LCD_UP,MUL_FUHAO,2,55);
  458.                                                         Fuhao = '*';
  459.                                                        
  460.                                                         Input_Num_Cnt = 0x00;
  461.                                                         for(n=0;n<5;n++){
  462.                                                                 Input_NUM[n] = 0x00;
  463.                                                         }
  464.                                                        
  465.                                 break;
  466.                                 case '/':
  467.                                                         Show_Fuhao(LCD_UP,DIV_FUHAO,2,55);
  468.                                                         Fuhao = '/';
  469.                                                        
  470.                                                         Input_Num_Cnt = 0x00;
  471.                                                         for(n=0;n<5;n++){
  472.                                                                 Input_NUM[n] = 0x00;
  473.                                                         }
  474.                                                        
  475.                                 break;
  476.                                 case 'C':
  477.                                                         for(n=0;n<5;n++){//数据清零
  478.                                                                 Input_NUM[n] = 0x00;
  479.                                                         }
  480.                                                         First_NUM = 0x00000000;
  481.                                                         Second_NUM= 0x00000000;
  482.                                                         Input_Num_Cnt = 0x00;
  483.                                                         Fuhao = 0xff;
  484.                                                        
  485.                                                         Clear_Num(0,80,45);//清除第一个数字
  486.                                                         Clear_Num(3,80,45);//清除第二个数字
  487.                                                         Clear_Num(6,36,90);//清除计算结果
  488.                                                         Show_Fuhao(LCD_UP,0xff,2,55);//清除符号区
  489.                                                         Clear_Num(6,20,9);//清除 " = "
  490.                                                        
  491.                                 break;
  492.                                 case '=':
  493.                                                         //Second_NUM = CAL_Input_Num(Input_NUM);
  494.                                                         Show_Sig_Char(LCD_UP,6,20,'=');
  495.                                                        
  496.                                                         switch(Fuhao){//根据符号做出不同处理;
  497.                                                                 case '+':
  498.                                                                                         rslt = First_NUM + Second_NUM;
  499.                                                                                        
  500.                                                                 break;
  501.                                                                 case '-':
  502.                                                                                         rslt = First_NUM - Second_NUM;
  503.                                                                                        
  504.                                                                 break;
  505.                                                                 case '*':
  506.                                                                                         rslt = First_NUM * Second_NUM;
  507.                                                                                        
  508.                                                                                        
  509.                                                                 break;
  510.                                                                 case '/':
  511.                                                                                 if(Second_NUM != 0x00){       
  512.                                                                                         rslt = First_NUM / Second_NUM;
  513.                                                                                 }else{//有错误
  514.                                                                                         Clear_LCD(LCD_UP);//
  515.                                                                                         for(n=0;n<3;n++){
  516.                                                                                                 Show_Err_Tips(3,32);//显示参数错误
  517.                                                                                                 Delays(100);
  518.                                                                                                 Clear_LCD(LCD_UP);//
  519.                                                                                                 Delays(100);
  520.                                                                                         }
  521.                                                                                         Loop = 0x00;//从此函数返回去
  522.                                                                                        
  523.                                                                                 }
  524.                                                                                        
  525.                                                                 break;
  526.                                                                 default:
  527.                                                                                 /*
  528.                                                                                 Clear_LCD(LCD_UP);//
  529.                                                                                 for(n=0;n<3;n++){
  530.                                                                                         Show_Err_Tips(3,32);//显示参数错误
  531.                                                                                         Delays(100);
  532.                                                                                         Clear_LCD(LCD_UP);//
  533.                                                                                         Delays(100);
  534.                                                                                 }
  535.                                                                                 Loop = 0x00;//从此函数返回去
  536.                                                                                 */
  537.                                                                 break;
  538.                                                         }
  539.                                                         Show_Num(LCD_UP,6,36,rslt);//显示计算结果
  540.                                                        
  541.                                                         //重新初始化所有参数
  542.                                                         Input_Num_Cnt = 0x00;
  543.                                                         for(n=0;n<5;n++){
  544.                                                                 Input_NUM[n] = 0x00;
  545.                                                         }
  546.                                                         First_NUM = 0x00000000;
  547.                                                         Second_NUM= 0x00000000;
  548.                                                         Input_Num_Cnt = 0x00;
  549.                                                         Fuhao = 0xff;
  550.                                                        
  551.                                                                                                
  552.                                 break;
  553.                                
  554.                                 default://输入的是0——9数字
  555.                                                 if(last_key == '='){//如果按数字时,之前有计算结果显示,则清除之,再正常显示
  556.                                                         for(n=0;n<5;n++){//数据清零
  557.                                                                 Input_NUM[n] = 0x00;
  558.                                                         }
  559.                                                         First_NUM = 0x00000000;
  560.                                                         Second_NUM= 0x00000000;
  561.                                                         Input_Num_Cnt = 0x00;
  562.                                                         Fuhao = 0xff;
  563.                                                        
  564.                                                         Clear_Num(0,80,45);//清除第一个数字
  565.                                                         Clear_Num(3,80,45);//清除第二个数字
  566.                                                         Clear_Num(6,36,90);//清除计算结果
  567.                                                         Show_Fuhao(LCD_UP,0xff,2,55);//清除符号区
  568.                                                         Clear_Num(6,20,9);//清除 " = "
  569.                                                 }//完成准备工作
  570.                                                
  571.                                                
  572.                                                
  573.                                                 if(Fuhao == 0xff){//输入第一个数据
  574.                                                         //判断输入的数据
  575.                                                         if(Input_Num_Cnt < 5){//输入的不够5个数字
  576.                                                                 for(n=0;n<4;n++){
  577.                                                                         Input_NUM[n] = Input_NUM[n+1];
  578.                                                                 }
  579.                                                                 Input_NUM[4] = key;
  580.                                                                 Input_Num_Cnt++;
  581.                                                         }
  582.                                                         Show_Input_Num(0,80,Input_NUM);
  583.                                                         First_NUM = CAL_Input_Num(Input_NUM);
  584.                                                        
  585.                                                 }else{//输入第二个数据
  586.                                                        
  587.                                                         if(Input_Num_Cnt < 5){//输入的不够5个数字
  588.                                                                 for(n=0;n<4;n++){
  589.                                                                         Input_NUM[n] = Input_NUM[n+1];
  590.                                                                 }
  591.                                                                 Input_NUM[4] = key;
  592.                                                                 Input_Num_Cnt++;
  593.                                                         }
  594.                                                        
  595.                                                         Show_Input_Num(3,80,Input_NUM);
  596.                                                         Second_NUM = CAL_Input_Num(Input_NUM);
  597.                                                        
  598.                                                 }
  599.                                                
  600.                                 break;
  601.                         }
  602.                        
  603.                         last_key = key;//记录最后一次的按键
  604.                        
  605.                 }
  606.                
  607.                
  608.                
  609.         }
  610.        
  611.        
  612. }

  613. void Start_LED(void ){
  614.         unsigned char n = 0x00;
  615.        
  616.         for(n=0;n<1;n++){
  617.                 OPEN_LED;
  618.                 Delays(100);
  619.                 CLOSE_LED;
  620.                 //Delays(100);
  621.         }
  622. }
  623. void main(void)
  624. {
  625.         // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
  626.         // Insert your main routine code here.
  627.         unsigned char n = 0x00;
  628.         unsigned char Flash_CNT= 50;
  629.         unsigned char Wait_LED = 0x00;
  630.        
  631.         unsigned char Pre_Key = 0x00;
  632.         unsigned char Valid_Key;
  633.         unsigned char Valid_CNT = 0x00;
  634.         unsigned char KEY_STATE[SENSOR_CNT];
  635.        
  636.         for(n=0;n<SENSOR_CNT;n++){
  637.                 KEY_STATE[n] = KEY_RELEASE;
  638.                 Valid_Key = 0x00;
  639.         }
  640.        
  641.         LCD_Init();//初始化LCD
  642.         Delays(5);
  643.        
  644.         Capsense_Init();//初始化Capsense
  645.        
  646.         Start_LED();
  647.        
  648.         /*
  649.         for(n=0;n<2;n++){
  650.                 Show_Test(LCD_TWO);
  651.                 Clear_LCD(LCD_TWO);
  652.             Show_Kuang(LCD_TWO);
  653.                 Delays(TEST_DELAY_VALUE);
  654.                 Clear_LCD(LCD_TWO);
  655.                 Show_Hanzi(LCD_TWO,1,32,BLACK);
  656.                 Show_Hanzi(LCD_TWO,5,32,WHITE);
  657.                 Delays(TEST_DELAY_VALUE);
  658.                
  659.         }
  660.         */
  661.        
  662.         while(1){
  663.                
  664.                 Caculate_Test();
  665.                
  666.         }
  667. }

复制代码

所有资料51hei提供下载:
Calcu.rar (3.72 KB, 下载次数: 5)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表