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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

第六屆藍橋杯決賽-智能物料傳送系統單片機源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:492026 發表于 2020-7-25 17:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、注意點
程序已經上傳;
有漏洞歡迎私聊指教,一起進步
二、主函數:
#include<STC15F2K60S2.H>
#include "intrins.h"
#include "iic.h"
#define uchar unsigned char
#define uint unsigned int        

#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();}
sbit TX = P1^0;  //發射引腳
sbit RX = P1^1;  //接收引腳

uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
uchar yi,er,san,si,wu ,liu,qi,ba;
bit flag_S5,flag_S4,flag_led;
uchar zhuangtai,dianya,huowu_lei,flag_S6,S7_choose;
uint tt,aa;
uchar huowu_1,huowu_2,huowu_time1,huowu_time2;
unsigned int intr = 0;
bit s_flag;
unsigned int distance;
unsigned int t = 0;
void send_wave(void);
void Timer0Init(void)        ;
void Timer1Init(void);
void flash_led();
void dianya_panduan();
void delayms(int ms);
void allinit();
void mode_1();
void mode_2();
void mode_3();
void chaosheng();
void display1(uchar yi,uchar er);
void display2(uchar san,uchar si);
void display3(uchar wu,uchar liu);
void display4(uchar qi,uchar ba);
void keyscan();
void tingzhi_led();
void main()
{
        Timer0Init();
  Timer1Init();

        EA = 1;
        ET0 = 1;  //打開定時器0中斷
        
        allinit();
        yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11;
        if(EEPROM_read(0x40)!=20)
        {
                EEPROM_write(0x40,20);
                delayms(2);
                EEPROM_write(0x55,2);
                delayms(2);
                EEPROM_write(0x56,4);
                delayms(2);
        }
        huowu_1=EEPROM_read(0x55);
        delayms(2);
        huowu_2=EEPROM_read(0x56);
        delayms(2);
        huowu_time1=huowu_1;
        huowu_time2=huowu_2;
        while(1)
        {
                keyscan();
                dianya=AD_read(0x03);
                dianya_panduan();
                //數據處理  
    chaosheng();
                tingzhi_led();
                mode_1();
                mode_2();
                mode_3();
                display1(yi,er);
                display2(san,si);
                display3(wu,liu);
                display4(qi,ba);
                EEPROM_write(0x55,huowu_1);
                delayms(2);
                EEPROM_write(0x56,huowu_2);
                delayms(2);
        }
}
void mode_3()
{
        if((S7_choose==2)|(S7_choose==1))
        {
        yi=3;er=11;san=11;
        si=huowu_1/10;wu=huowu_1%10;
        liu=11;
        qi=huowu_2/10;ba=huowu_2%10;}
        else if(S7_choose==3){yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11;S7_choose=0;}
}
void chaosheng()
{
        if(s_flag) // 200毫秒更新一次數據
        {
                s_flag = 0;
                send_wave();  //發送方波信號
                TR1 = 1;  //啟動計時
                while((RX == 1) && (TF1 == 0)) //等待收到脈沖
                {
                        if((TH1==0x80)|(TH1==0xA0))
                        {
                                display1(yi,er);
                                display2(san,si);
                                display3(wu,liu);
                                display4(qi,ba);
                        }
                }
                TR1 = 0;  //關閉計時               
               
                if(TF1 == 1)//發生溢出
                {
                        TF1 = 0;
                        distance = 99;  //無返回
                }
                else
                {               
                        t = TH1;// 計算時間  
                        t <<= 8;
                        t |= TL1;
                        distance = (unsigned int)(t*0.017);  //計算距離        
                        distance = distance/12;
                        //t*340   // t/1000000*340/2*100
                }
                TH1 = 0;
                TL1 = 0;
        }
        if(distance<=30) huowu_lei=1;
        else if(distance>30) huowu_lei=2;
}
void dianya_panduan()
{
        if(zhuangtai==3) {flash_led();}
        if((dianya>0)&&(dianya<51))
        {if(S7_choose==0){P2=0x80;P0=0xfe;yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11;}zhuangtai=1;}
        else if((dianya>=51)&&(dianya<204))
        {zhuangtai=2;
         if(!flag_S5){P2=0x80;P0=0xfd;}}
        else if(dianya==0)
        {P2=0x80;P0=0xff;yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11;zhuangtai=1;}
        else if(dianya>=204)
        {zhuangtai=3;}
}
void mode_1()
{
        if(zhuangtai!=1)
        {yi=1;er=11;san=11;si=distance/10;wu=distance%10;liu=11;qi=11;ba=huowu_lei;}
}
void mode_2()
{
        if((zhuangtai==2)&&(flag_S4==1))
        {
        yi=2;er=11;san=11;si=11;wu=11;liu=11;
        if(huowu_lei==1){qi=huowu_time1/10;ba=huowu_time1%10;}
        else if(huowu_lei==2){qi=huowu_time2/10;ba=huowu_time2%10;}
  }
}
void flash_led()
{
        if(flag_led){P2=0x80;P0=0xfb;}
        else if(!flag_led){P2=0x80;P0=0xff;}
}
void tingzhi_led()
{
        if(flag_S5)
        {
  if(flag_led){P2=0x80;P0=0xf7;}
        else if(!flag_led){P2=0x80;P0=0xff;}
        }
}
void Timer0Init(void)                //2毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設置定時器模式
        TL0 = 0x9A;                //設置定時初值
        TH0 = 0xA9;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
}

void Timer1Init(void)                //2毫秒@11.0592MHz
{
        AUXR |= 0x40;                //定時器時鐘1T模式
        TMOD &= 0x0F;                //設置定時器模式
}

//定時器0中斷服務函數
void isr_timer_0(void)  interrupt 1  //默認中斷優先級 1
{
        TL0 = 0x9A;                //設置定時初值
        TH0 = 0xA9;                //設置定時初值

        if(++intr == 100)
        {
                s_flag = 1;
                intr = 0;
  }
        tt++;
        if(tt==250)
        {tt=0;flag_led=~flag_led;}
        aa++;
        if(aa==1000)
        {aa=0;
         if((flag_S4==1)&&(flag_S5==0))
                {
                P2=0xa0;P0=0x10;
         if(huowu_lei==1){huowu_time1--;if(huowu_time1==0){huowu_time1=0;flag_S4=0;        P2=0xa0;P0=0x00;}}
         else if(huowu_lei==2){huowu_time2--;if(huowu_time2==0){huowu_time2=0;flag_S4=0;        P2=0xa0;P0=0x00;}}
    }
        }
        if(flag_S5){P2=0xa0;P0=0x00;}
}

//TX引腳發送40KHz方波信號驅動超聲波發送探頭
//使用軟件延時注意RC振蕩器頻率
void send_wave(void)
{
        unsigned char i = 8;  //發送8個脈沖
        
        do
        {
                TX = 1;
                somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;               
                TX = 0;
                somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;               
        }
        while(i--);
}


void delayms(int ms)
{
        int i,j;
        for(i=ms;i>0;i--)
                for(j=845;j>0;j--);
}

void allinit()
{
        P2=0XA0;
        P0=0X00;//關閉蜂鳴器,繼電器
        
        P2=0X80;
        P0=0XFF;//關閉LED燈
        
        P2=0XC0;
        P0=0XFF;//選擇所有數碼管
        P2=0XFF;
        P0=0XFF;//關閉所有數碼管
}

void display1(uchar yi,uchar er)
{
                P2=0XC0;//打開位選573   U8
                P0=0X01;//選擇第一個數碼管
                P2=0XFF;//打開段選573   U7
                P0=tab[yi];
                delayms(1);
               
                P2=0XC0;//打開位選573   U8
                P0=0X02;//選擇第二個數碼管
                P2=0XFF;//打開段選573   U7
                P0=tab[er];
                delayms(1);
}        

void display2(uchar san,uchar si)
{
                P2=0XC0;//打開位選573   U8
                P0=0X04;//選擇第三個數碼管
                P2=0XFF;//打開段選573   U7
                P0=tab[san];
                delayms(1);
               
                P2=0XC0;//打開位選573   U8
                P0=0X08;//選擇第四個數碼管
                P2=0XFF;//打開段選573   U7
                P0=tab[si];
                delayms(1);
}

void display3(uchar wu,uchar liu)
{
                P2=0XC0;//打開位選573   U8
                P0=0X10;//選擇第一個數碼管
                P2=0XFF;//打開段選573   U7
                P0=tab[wu];
                delayms(1);
               
                P2=0XC0;//打開位選573   U8
                P0=0X20;//選擇第一個數碼管
                P2=0XFF;//打開段選573   U7
                P0=tab[liu];
                delayms(1);
}

void display4(uchar qi,uchar ba)
{
                P2=0XC0;//打開位選573   U8
                P0=0X40;//選擇第一個數碼管
                P2=0XFF;//打開段選573   U7
                P0=tab[qi];
                delayms(1);
               
                P2=0XC0;//打開位選573   U8
                P0=0X80;//選擇第一個數碼管
                P2=0XFF;//打開段選573   U7
                P0=tab[ba];
                delayms(1);
}
void keyscan()
{
        if(P30==0)
        {
                delayms(5);
                if(!P30)
                {
                        if(S7_choose==1)
                        {huowu_1++;if(huowu_1==11){huowu_1=0;}}
                        else if(S7_choose==2)
                        {huowu_2++;if(huowu_2==11){huowu_2=0;}}
                }
                while(!P30);
        }
        if(P31==0)
        {
                delayms(5);
                if(!P31)
                {
                        if(zhuangtai==1)
                        {
                                if(flag_S6==0){flag_S6=1;S7_choose=1;}
                                else if(flag_S6==1){flag_S6=2;S7_choose=2;}
                                else if(flag_S6==2){flag_S6=0;S7_choose=3;}
                        }
                }
                while(!P31);
        }
        if(P32==0)
        {
                delayms(5);
                if(!P32)
                {
                        if(flag_S4==1) flag_S5=~flag_S5;
                }
                while(!P32);
        }
        if(P33==0)
        {
                delayms(5);
                if(!P33)
                {
                        if(zhuangtai==2) {flag_S4=1;aa=990;huowu_time1=huowu_1;huowu_time2=huowu_2;}
                        else if((zhuangtai==1)|(zhuangtai==3)) flag_S4=0;
                }
                while(!P33);
        }
}

智能物料傳送系統.zip

71.19 KB, 下載次數: 23, 下載積分: 黑幣 -5

第六屆藍橋杯.pdf

338.43 KB, 下載次數: 17, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜tv免费观看 | 黄 色 毛片免费 | 亚洲精品久久久久久一区二区 | 国产一区 | 成人在线视频看看 | 国产麻豆乱码精品一区二区三区 | 污免费网站 | 日韩一区二区视频 | 久久久久久国产 | 欧美一级做性受免费大片免费 | 99久久99久久精品国产片果冰 | 日韩一二区 | 国产一区二区高清在线 | 国产精品色综合 | 蜜臀网站| 伦理午夜电影免费观看 | 亚洲精彩视频在线观看 | 91天堂网 | 欧美中文字幕 | 毛片一区二区三区 | 久久久久久国产精品 | 三级成人在线 | 91综合网| 亚洲午夜精品视频 | 欧美精品在线观看 | 日韩成人在线网址 | 国产精品1区| 国产视频精品在线观看 | 欧美一级二级视频 | 免费三级黄 | 日本特黄特色aaa大片免费 | 成人免费视频网址 | 成人亚洲 | 久草新视频 | 日本中出视频 | 激情 一区 | 国产在线一区二区三区 | 亚洲天堂免费在线 | 国产第一亚洲 | 精品日韩一区二区 | 久久精品国产99国产精品亚洲 |