久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1913|回復: 1
打印 上一主題 下一主題
收起左側

基于51單片機籃球計分器12864顯示仿真及源程序

[復制鏈接]
跳轉到指定樓層
樓主
一、系統方案
1、本設計采用51單片機作為主控器。
2、比分液晶12864顯示。
3、主客隊加減分、節數、24秒、復位等功能。


二、硬件設計
原理圖如下:
三、單片機軟件設計
1、首先是系統初始化
  void Timer_0()interrupt 1
{
        TL0 = 0x00;        
        TH0 = 0xDC;               
        Count++;
        if(Count==100)
        {
                Count=0;
                Attack_Time--;
                Time_sec--;
                if(Attack_Time==0)
                {
                        if(BF_flag==0){BF();BF();BF();BF();BF();}

                        Attack_Time=24;
                        BF_flag=0;
                }
                if(Time_sec==0)
                {

                        Time_sec=59;
                        Time_min--;
                        if(Time_min==0)
                        {
                                Time_min=11;
                        }
                }
        }
}
2、液晶顯示程序
void busy12864()
{
        lcdDat=0xff;    //口線置1,防止干擾
        rs=0; rw=1;           //置“命令、讀”模式
        //en=1; while(lcdDat&0x80); en=0;//忙等待
}
/** 寫命令 參數:comDat為要發送的命令 **/
void WriteCom(uchar comDat)
        {  
    busy12864();                     //忙,則等待
        rs=0;rw=0;                                //置“命令、寫”模式
    lcdDat=comDat;en=1;en=0;//送出命令,并使之有效
}
/** 寫數據 參數:dat為要發送的數據 **/
void WriteDat(uchar dat){  
    busy12864();                           //忙,則等待
        rs=1;rw=0;                                  //置“數據、寫”模式
    lcdDat=dat;en=1;en=0;        //送出數據,并使之有效
}


/******** 任意尺寸點陣顯示函數 ***********|
|參數:顯示位置:row頁數,col列號,                  |
|           字符大小:x橫向像素,y縱向頁數          |
|           顯示內容:tab字模表          ******/
void showXY(uchar row,uchar col,uchar x,uchar y,uchar *tab){
        uchar i,j;
        bit right;
        if(col<64){right=0;}
        else {col-=64;right=1;}        
        for(i=0;i<y;i++){
                if(right)cs1=1,cs2=0;
                else  cs1=0,cs2=1;
                WriteCom(addX0+row+i);
                WriteCom(addY0+col);   
                for(j=0;j<x;j++){
                        if(col+j<64)WriteDat(tab[i*x+j]);
                        else if(right==0)
                                {                 
                                 cs1=1,cs2=0;                 
                                 WriteCom(addX0+row+i);         
                                 WriteCom(addY0+(col+j-64));
                                 WriteDat(tab[i*x+j]);
                         }                                                
                }
        }
}

/* 返回一個8*16字符索引位置 */                                       
uchar enN(uchar *s){
        uchar i;
        for(i=0;zm8x16_index[ i]!=0;i++)
                if(zm8x16_index[ i]==s[0])break;
        return i;        
}
/* 返回一個16*16字符索引位置 */
uchar cnN(uchar *s){
        uchar i;
        for(i=0;zm16x16_index[ i]!=0;i+=2)
                if(zm16x16_index[ i]==*s&&zm16x16_index[i+1]==*(s+1))break ;
        return i/2;
}
/* 顯示中英文字符串 */
void showStr(uchar row,uchar col,uchar *s)
{
         uchar i;
         for(i=0;s[ i]!=0;i++){
                 if(s[ i]<0x80){      
                        showXY(row,col,8,2,zm8x16_Table[enN(&s[ i])]);
                        col+=8;
                }else{                        
                        showXY(row,col,16,2,zm16x16_Table[cnN(&s[ i])]);     
                        col+=16;i+=1;               
                }
                if(col>120)
                {         
                        col=0;
                        row+=2;
                }
         }
}
3、按鍵程序
void Select()
{
        if(K1==0)
        {
                delay_ms(5);
                if(K1==0)
                {
                        while(!K1);
                        BF_flag++;
                        A_Team++;
                        if(A_Team==999)
                        {
                                A_Team=0;
                        }
                         BF();
                }
        }

        if(K2==0)
        {
                delay_ms(5);
                if(K2==0)
                {
                        while(!K2);

                        A_Team--;
                        if(A_Team==0)
                        {
                                A_Team=999;
                        }
                        BF();
                }
        }

        if(K3==0)
        {
                delay_ms(5);
                if(K3==0)
                {
                        while(!K3);
                        BF_flag++;
                        B_Team++;        
                        if(B_Team==999)
                        {
                                B_Team=0;
                        }
                        BF();
                }
        }        

        if(K4==0)
        {
                delay_ms(5);
                if(K4==0)
                {
                        while(!K4);
                        B_Team--;
                        if(B_Team==0)
                        {
                                B_Team=999;
                        }
                        BF();
                }
        }        

        if(K5==0)
        {
                delay_ms(5);
                if(K5==0)
                {
                        while(!K5);
                        TR0=0;BF();
                        A_Team=0,B_Team=0;BF_flag=0;
                        Time_min=12,Time_sec=0;
                        Screenings=1;
                        Attack_Time=24;
                        Display();

                }
        }        

        if(K6==0)
        {
                delay_ms(5);
                if(K6==0)
                {
                        while(!K6);        BF();
                        Attack_Time=24;BF_flag=0;
                }
        }        
        if(K7==0)
        {
                delay_ms(5);
                if(K7==0)
                {
                        while(!K7); BF();
                        Screenings++;
                        Attack_Time=24;BF_flag=0;
                        Time_min=11,Time_sec=59;
                        if(Screenings==5)
                        {
                                Screenings=1;        
                        }
                }
        }               
        if(K8==0)
        {
                delay_ms(5);
                if(K8==0)
                {
                        BF();
                        while(!K8);
                        BF_flag=0;
                        T_Count++;
                        if(T_Count==1)
                        {
                                Time_min=11;Attack_Time=23;
                                Time_sec=59;                        
                                TR0=1;        
                                T_Count=2;
                        }
                        if(T_Count==3)
                        {
                                TR0=0;        

                        }
                        if(T_Count==4)
                        {
                                TR0=1;        
                                T_Count=2;
                        }
                }
        }
}
4、核心算法程序
void main()
{

        Init12864();//初始化
        EA=1;ET0=1;
        Timer0Init();
        while(1)
        {

                Select();
                Display();
                if(Time_min==0&&Time_sec==0&&Screenings==4&&Attack_Time==0)//比賽打完
                {
                        BF();BF();BF();BF();BF();BF();BF();BF();
                }
        }
}

四、 proteus仿真設計
Proteus軟件是一款應用比較廣泛的工具,它可以在沒有硬件平臺的基礎上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達到我們設定的目的,避免我們搭建實物的時候,如果當初選擇的方案有問題,我們器件都已經焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設計之初,就使用該軟件進行模擬仿真,測試,選擇滿足我們設計的最優方案。最后根據測試沒問題的仿真圖紙,焊接實物,調試,最終完成本設計的作品。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1086484 發表于 2023-12-27 19:20 | 只看該作者
樓主能分享壓縮包給我們學習一下嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产一区二区三区 | 91亚洲视频在线 | 中文字幕在线第二页 | 超碰男人天堂 | 午夜视频在线免费观看 | 亚洲欧美一区二区三区国产精品 | 成人精品鲁一区一区二区 | 国产成年人小视频 | 亚洲国产高清免费 | 在线中文字幕av | 国产精品国产三级国产a | 国产激情一区二区三区 | 成人免费大片黄在线播放 | 国产精品久久久久久久久免费 | 精品国产一区二区三区av片 | 久久综合久久综合久久综合 | 欧美一区二区三区在线看 | 精品一区二区三区在线播放 | 欧美精品第三页 | 亚洲 欧美 在线 一区 | 久久精品91久久久久久再现 | 午夜在线电影网 | 欧美片网站免费 | 在线看日韩av | 国产精品99久久久久久宅男 | 人人看人人爽 | 亚洲欧美在线视频 | 国产成人免费视频网站高清观看视频 | 天天操天天射综合网 | 91在线免费视频 | 亚洲午夜精品 | 亚洲免费福利视频 | 成人福利在线 | 天天射影院 | 久久亚 | 国产真实精品久久二三区 | 亚洲在线一区二区 | 午夜色婷婷 | 亚洲国产成人精品女人 | 成人不卡视频 | 国产精品一区二区三区四区五区 |