找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4199|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

求助大神,c語言沒學(xué)好,單片機課程設(shè)計根本做不到啊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:94164 發(fā)表于 2015-10-31 00:10 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
/************************************************************************
/**單片機單詞測試程序
/**設(shè)計一個以單片機為核心的單詞記憶測試器;
/** 實現(xiàn)單詞的錄入(為使程序具有可演示性,單詞不少于10個);
/**單詞用按鍵控制依次在屏幕上顯示,按鍵選擇認(rèn)識還是不認(rèn)識,
/**也可以直接進入下一個或者上一個;
/**單詞背完后給出正確率。
/*************************************************************************/

#define uchar unsigned char
#define uint  unsigned int

#include <reg52.h>
#include "asc.h"                   //ASCII字模表
#include "12864.h"                //12864液晶屏底層驅(qū)動程序

bit ERROR=1;                        //輸入字符錯誤標(biāo)志位
bit result=0;                          //輸入結(jié)果對錯的標(biāo)志位,為0是正確
bit verify=1;                        //已按了確認(rèn)鍵后清零
sbit ERR=P2^7;
uchar correctNUM;                 //統(tǒng)計測試正確的單詞數(shù),即得分
/*****************************************
/** 存儲要測試的單詞,放在ROM中
/****************************************/

uchar code S[10][5]={                "tree ",    //樹
                                     "rain ",    //雨
                                     "water",  //水
                                     "fly  ",     //飛
                                     "go   ",   //去
                                     "fish ",    //魚
                                     "snow ",  //雪
                                     "eat  ",    //吃
                                     "rice ",    //米
                                     "ice  ",    //冰
                                    } ;

uchar code         SL[10]={4,4,5,3,2,4,4,3,4,3};//存儲各測試單詞的長度

uchar KeyNum[8];                       //儲存輸入的單詞

/*****************************************
/** 存儲鍵盤的字母值 ,放在ROM中
/****************************************/

uchar code tab1[6][5]={{'a','b','c','d','e'},
                            {'f','g','h','i','j'},
                            {'k','l','m','n','o'},
                            {'p','q','r','s','t'},
                                          {'u','v','w','x','y'},
                                          {'z',1,2,3,4}};            
//最后的 1234 鍵盤值為功能鍵, 1表示確定鍵,2表示不認(rèn)識,3表示上一個,4表示下一個                                                         
/*************************************************
** 鍵盤掃描程序

*************************************************/

unsigned char kbscan()          //鍵盤掃描
        {
        uchar hang,lie,key;                    //P1連行,P3連列
        if(P1!=0xFF||P3!=0)
        {
                switch(P1&0xFF)                //P1 掃行
                        {
                       
                            case 0xFE:hang=5;break;//P1.0為第6行
                                case 0xFD:hang=4;break;//P1.1為第5行
                                case 0xFB:hang=3;break;//P1.2為第4行
                                case 0xF7:hang=2;break;//P1.3為第3行
                                case 0xEF:hang=1;break;//P1.4為第2行
                                case 0xDF:hang=0;break;//P1.5為第1行
                        }
                        P1=0;   //P1全低電平
                    P3=0xFF;//P3全高電平
                switch(P3&0xFF)
                        {
                                case 0xFE:lie=4;break; //P1.0為第5列
                                case 0xFD:lie=3;break; //P0.5為第4列
                                case 0xFB:lie=2;break; //P0.6為第3列
                                case 0xF7:lie=1;break; //P0.7為第2列
                                   case 0xEF:lie=0;break; //P0.7為第1列
                        }
                P1=0xFF; //P1全高電平
                P3=0;         //P3全低電平
                while(P1!=0xFF||P3!=0);                  //按鍵松開后才返回值
                key=tab1[hang][lie];
        }
        else
                key='_';
        return (key);
        }

/************************************************************************
/**    主函數(shù)
/**   
/**   
/*************************************************************************/
void main(void)
{   
    uchar hz_Num;                                        //用于計當(dāng)前測試的是第幾個詞,第一個為0
        uchar temp[8];                                  //用于送液晶屏顯示的臨時變量
        uchar iword=0,Nword=0;                  //輸入單詞字母下一個計數(shù)
    LCD12864_init();                           //LCD12864初始化
        ClearLCD();                                //清屏
        en_disp(2,1,11,Asc,"INPUT WORD:",1); //在第2行 第1列
           en_disp(4,1,1,Asc,">",1);                  //在第5行,第2列開始顯示
        en_disp(6,0,8,Asc,"correct:",1);         //在第7行,第1列開始顯示
        en_disp(6,80,5,Asc,"00/10",1);           //在第7行 第81列
        P1=0xFF; //P1全高電平
        P3=0;           //P3全低電平

    while(1)
    {
            KeyNum[iword]=kbscan();                   //掃描鍵盤的輸入值,沒按下時返回下橫線
         hz_disp(0,48,1,hz1+hz_Num*32,1);           //在第1行,第49列開始顯示測試的漢字
         temp[0]=(hz_Num+1)/10+0x30;           //將十進制數(shù)轉(zhuǎn)換為ASCII字符
         temp[1]=(hz_Num+1)%10+0x30;           //算出測試漢字的序號的第一位和第二位
         en_disp(0,20,1,Asc,":",1);        //在第1行 第21列         
         en_disp(0,4,2,Asc,temp,1);        //在第1行 第5列        顯示測試序號



  if(KeyNum[iword]!='_')                      //鍵盤有按鍵按下
  {
         if(KeyNum[iword]==1)             //如果按下了確定鍵
         {
          if(SL[hz_Num]==iword&&verify)   //輸入長度等于測試單詞的長度,則正確 ,verify表示按下了確認(rèn)后有效一次
          {
          correctNUM+=1;
          if(correctNUM>10)
           {
           correctNUM=10; //最多10個正確的
           }
          verify=0;                                           //標(biāo)志位清零
          hz_Num++;                                     //測試下一個單詞
          if(hz_Num==10) hz_Num=0;                   //最多設(shè)10個單詞
          temp[0]=(correctNUM)/10+0x30;           //將十進制數(shù)轉(zhuǎn)換為ASCII字符
          temp[1]=(correctNUM)%10+0x30;           //算出測試漢字的序號的第一位和第二位
          en_disp(6,80,2,Asc,temp,1);               //在第7行 第81列
          iword=0;
          Nword=0;
          en_disp(4,16,8,Asc,"        ",1);            //在第5行,第17列開始顯示
          }
         }
        else if(KeyNum[iword]==2||KeyNum[iword]==4)//如果按下了“不認(rèn)識”或“下一個”鍵 ,直接跳到下一個單詞
        {
          result=0;                                  //跳下一個時錯誤燈滅
          ERROR=0;
          hz_Num++;                                       //測試下一個單詞
          if(hz_Num==10) hz_Num=0;                   //最多設(shè)10個單詞
           iword=0;
          Nword=0;
          en_disp(4,16,8,Asc,"        ",1);           //在第5行,第17列開始顯示
        }
        else if(KeyNum[iword]==3)                  //如果按下了“上一個”鍵 ,直接跳到上一個單詞
        {
          result=0;                                        //跳下一個時錯誤燈滅
          ERROR=0;
                                       //測試下一個單詞
          if(hz_Num==0) hz_Num=10;                           //最多設(shè)10個單詞
                   hz_Num--;   
           iword=0;
           Nword=0;
           en_disp(4,16,8,Asc,"        ",1);                   //在第4行,第16列開始顯示
        }
        else  if(S[hz_Num][iword]==KeyNum[iword])  //輸入的字符與測試的標(biāo)準(zhǔn)字符比較
         { temp[0]=KeyNum[iword];
          ERROR=0;                                            //正確就標(biāo)志位置0
          en_disp(4,Nword+16,1,Asc,temp,1);             //在第5行,第17列開始顯示
          iword++;
         if(iword==8) iword=0;
         Nword=iword*8;       
          verify=1;                               
         }
         else  
         { temp[0]=KeyNum[iword];
          ERROR=1;                                        //錯誤就置1
          en_disp(4,Nword+16,1,Asc,temp,1);            //在第5行,第17列開始顯示
          iword++;
         if(iword==8) iword=0;
         Nword=iword*8;       
         }
         result=ERROR|result;                                //0表示結(jié)果正確
   }
         
          ERR=!result;                                          //錯誤指示燈
    }
}
出現(xiàn)下面的錯誤怎么調(diào)試



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:84495 發(fā)表于 2015-11-1 09:53 | 只看該作者
本文件內(nèi)沒有en-disp函數(shù)吧,需要把包含en-disp的頭文件調(diào)用一下,里面應(yīng)該有這么一句 void en-disp (),修改別人的程序經(jīng)常會遇到這問題,
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表