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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

藍橋杯第十屆單片機頻率測量與電壓控制-獨家例程

[復制鏈接]
跳轉到指定樓層
樓主

#include<STC15F2K60S2.H>
#include "iic.h"
typedef unsigned int u16;
typedef unsigned char u8;

sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;

u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
u8 code smgduan_Vout[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x8e,0xc1,0xff};// F U  ff  .

u8 change=0;//切換電壓與頻率
u16 F_Hz=0;//頻率值
u16 Vout=0,Vout_RB2=0;//Vout轉換后的電壓值, Vout_RB2滑動變阻器實際電壓值
u16 count_f=0,count_t=0,count_tt=0;//count_f記錄NE555在1s內的次數,count_t定時
bit LED_state=0,SMG_state=0,RB2_change=0;
void Key_Scan();
void Set_Display();
void Frequency_Display();
void Voltage_Display();
void Smg_Display(u8 wei,u8 duan);
void Smg_Vout_Display(u8 wei,u8 duan);
void Delay_ms(u16 ms);
void LED_Display();
void Timer0Init();
void Timer1Init();

void Init()//初始化
{
        P2 = (P2 & 0X1F)|0X80;//打開LED鎖存
        P0=0XFF;                                                        //熄滅
        P2 = P2 & 0X1F;                                //恢復鎖存,避免影響其他位鎖存
        
        P2 = (P2 & 0X1f) | 0xa0;//打開蜂鳴器、繼電器鎖存
        P0 = 0x00;
        P2 = P2 & 0X1f;////恢復鎖存,避免影響其他位
        
        P2 = (P2 & 0X1f) | 0xc0;//打開位選鎖存
        P0 = 0x00;
        P2 = P2 & 0X1f;//恢復鎖存,避免影響其他位
        
        P2 = (P2 & 0X1f) | 0xe0;//打開段選鎖存
        P0 = 0xff;
        P2 = P2 & 0X1f;//恢復鎖存,避免影響其他位
}
void main()
{
        Init();//初始化
  Timer0Init();
        Timer1Init();
        ADC_Init();
        while(1)
        {
                Key_Scan();
                Set_Display();
          LED_Display();
        
        }
}
void Key_Scan()//按鍵掃描
{
        if(S7==0)
        {
                Delay_ms(5);
                if(S7==0)
                {
                        SMG_state=~SMG_state;
                }while(!S7);
        }
//************************        
        if(S6==0)
        {
                Delay_ms(5);
                if(S6==0)
                {
                        LED_state=~LED_state;
                }while(!S6);
        }
//*************************
        if(S5==0)
        {
                Delay_ms(5);
                if(S5==0)
                {
                        RB2_change=~RB2_change;
//                if(RB2_change==1)
//                {
//                        DAC_Read(Vout_RB2);
//                }else{
//                        DAC_Read(102);
//                }
                }while(!S5);
        }
//***************************        
        if(S4==0)
        {
                Delay_ms(5);
                if(S4==0)
                {
                        change++;
                        if(change==2)change=0;
                }while(!S4);
        }
}
void Set_Display()//
{
                if(SMG_state==0)//打開數碼管
                {
                                if(change==0)
                                {
                                                Voltage_Display();//電壓顯示               
                                }else if(change==1)
                                        {
                                                Frequency_Display();//頻率顯示                        
                                        }
                }
        
}
void Voltage_Display()//電壓顯示
{
        Smg_Vout_Display(0,11);
        Smg_Vout_Display(5,(Vout/100)%10);
        Smg_Display(6,(Vout/10)%10);
        Smg_Display(7,Vout%10);                    
}
void Frequency_Display()//頻率顯示
{
                        Smg_Vout_Display(0,10);
                        if(F_Hz>9999)
                        Smg_Display(3,F_Hz/10000);        
                        if(F_Hz>999)
                        Smg_Display(4,F_Hz%10000/1000);        
                        if(F_Hz>99)
                        Smg_Display(5,F_Hz%1000/100);        
                        if(F_Hz>9)
                        Smg_Display(6,F_Hz%100/10);                        
                        Smg_Display(7,F_Hz%10);        
}
void LED_Display()//LED顯示功能
{
        if(LED_state==1)//關閉LED
                {
                                P2 = (P2 & 0X1F)|0X80;
                                P0 = 0xff;//1111 0111
                                P2 = P2 & 0X1F;
                }else//打開LED
                {                                       
                                        if(change==0)//電壓LED
                                        {
                                                        P2 = (P2 & 0X1F)|0X80;
                                                        P0 = 0XFE;//1111 1110
                                                        P2 = P2 & 0X1F;        
                                        }else if(change==1)//頻率LED
                                                {
                                                                P2 = (P2 & 0X1F)|0X80;
                                                                P0 = 0XFD;//
                                                                P2 = P2 & 0X1F;        
                                                }         
        //*************LED電壓**********************************
                                         if(Vout<150 | (250<=Vout && Vout<350))//熄滅
                                         {
                                                        P2 = (P2 & 0X1F)|0X80;
                                                        P0 |=0X04;//1111 1111                 
                                                        P2 = P2 & 0X1F;
                                         }
                                        if(Vout>=350 | (150<=Vout && Vout<250))        //亮
                                        {
                                                        P2 = (P2 & 0X1F)|0X80;
                                                        P0 &= ~0X04;//0000 1011
                                                        P2 = P2 & 0X1F;
                                        }        
                                //*************LED頻率**************************        
                                         if(F_Hz<1000 | (5000<=F_Hz && F_Hz<10000))//熄滅
                                         {
                                                        P2 = (P2 & 0X1F)|0X80;
                                                        P0 = P0 | 0X08;//0000 1000|        
                                                        P2 = P2 & 0X1F;
                                         }
                                        if(F_Hz>=10000 | (1000<=F_Hz && F_Hz<5000))        //亮
                                        {
                                                        P2 = (P2 & 0X1F)|0X80;
                                                  P0 &=0XF7;//1111 0111                                                      
                                                        P2 = P2 & 0X1F;
                                        }        
//******************************************************                                       
                                        if(RB2_change==0)//跟隨,L5熄滅
                                                {
                                                        P2 = (P2 & 0X1F)|0X80;
                                                        P0 = P0 | 0X10;//0001 0000
                                                        P2 = P2 & 0X1F;
                                                }else//不跟隨  L5亮
                                                {                                                
                                                        P2 = (P2 & 0X1F)|0X80;
                                                        P0 = P0 & 0XEF;//1110 1111
                                                        P2 = P2 & 0X1F;
                                                }
                        }        
        
}
void Timer0Init()//計數
{
        //  AUXR &= 0x7F;                //定時器時鐘12T模式
           TMOD|=0x06;//8位重裝載計數
           TL0=0xff;
           TH0=0xff;//1us
           ET0=1;
           TR0=1;
                 TF0 = 0;                //清除TF0標志
            EA=1;
}
void Timer1Init()//定時
{
                //        AUXR &= 0xBF;                //定時器時鐘12T模式
                //        TMOD &= 0x0F;                //設置定時器模式
            TMOD|=0X10;
                        TL1=(65536-50000)%256;//給定時器賦初值,定時50ms
                        TH1=(65536-50000)/256;
                        TF1 = 0;                //清除TF1標志
                        TR1 = 1;                //定時器1開始計時
                        ET1 = 1;    //打開定時器1中斷
            EA=1;
}

void Time0_Service() interrupt 1
{
        count_f++;//累計NE555輸出信號個數
}
void Time1_Service() interrupt 3
{
       TH1=(65536-50000)/256;//50ms
        TL1=(65536-50000)%256;
        count_t++;
        count_tt++;
        if(count_t==20)//每1秒刷新一次頻率數據
        {
                  ET0=0;//關閉定時器,從中取出數值后再打開
                        TR0=0;
                  TR1=0;        
               
                        F_Hz=count_f;//取值
                        TR0=1;
                  TR1=1;
                        ET0=1;               
                        count_f=0;
                        count_t=0;
        }
        if(count_tt==10)//0.5秒刷新一次電壓采集
        {
               
            Vout_RB2=ADC_Read();        
       Vout=Vout_RB2*1.963125;               
                                count_tt=0;
        }
}

全部資料51hei下載地址:
第十屆藍橋杯單片機設計與開發項目省賽程序試題.pdf (251.64 KB, 下載次數: 20)
10、第十屆頻率測量與電壓控制.zip (270.48 KB, 下載次數: 33)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产传媒| 精品中文字幕一区二区三区 | 99久久免费精品国产男女高不卡 | 在线观看黄色电影 | 欧美精品在欧美一区二区 | 日韩欧美1区2区 | 精品国产乱码久久久久久图片 | 一区二区三区免费网站 | 精品国产青草久久久久福利 | 亚洲一区视频在线 | 一区二区三区精品视频 | 五月婷婷导航 | 国产精品久久久久一区二区三区 | 亚洲一二三区在线观看 | h视频免费看| 国产精品视频播放 | 国产一区三区在线 | 国产精品一区二区久久久久 | 一区二区视频免费观看 | 免费永久av | 日批av| av在线免费观看网站 | 日韩精品免费在线 | 91视频电影 | 欧美日韩成人在线 | 国产精品一区2区 | 亚洲高清中文字幕 | 日韩精品中文字幕在线 | 日韩在线小视频 | 黄色毛片一级 | 日韩欧美一区在线 | 亚洲免费在线观看视频 | 免费在线观看一区二区 | 成人欧美一区二区三区黑人孕妇 | 国产欧美一区二区三区日本久久久 | 精品视频在线观看 | 亚洲精品电影 | 国产精品99视频 | 久久成人一区 | 日韩高清国产一区在线 | 欧美13videosex性极品 |