標題:
藍橋杯單片機組省賽源程序 第十屆
[打印本頁]
作者:
黑夜的星光
時間:
2020-10-31 19:46
標題:
藍橋杯單片機組省賽源程序 第十屆
第十屆
大多數(shù)人說 難點在NE555.
其實仔細看過15的數(shù)據(jù)手冊 應該就很清楚NE555用的是計數(shù)器0來開展計數(shù)的,所以難就難在他很新。
其次就是DA的輸出吧 。用到了 PCF8591寄存器的第7位,輸出寫入0x41
其他就是邏輯問題了�?傮w不是多難。。。。。
代碼自行下載 哈哈。
單片機源程序如下:
#include "pcf8591.h"
#include "smg.h"
#include "timer.h"
#include "type.h"
#include "led.h"
sbit S7 = P3 ^ 0;
sbit S6 = P3 ^ 1;
sbit S5 = P3 ^ 2;
sbit S4 = P3 ^ 3;
bit flag_S7 = 1;
bit flag_S6 = 1;
bit flag_S5 = 1;
bit flag_S4 = 1;
u32 F_count; //頻率計數(shù)值
u32 F_count_buff; //頻率計數(shù)緩沖值
u8 V_date;
float V_date_buff;
bit flag_50ms;
void Init_MCU(void);
void KeyScan(void);
void DisplaySMG(void);
void main(void)
{
Init_MCU();
Init_Timer0();
Init_Timer1(5); //定時器設(shè)置為5ms
while(1)
{
if(flag_50ms) //電壓數(shù)據(jù)刷新時間 50ms
{
flag_50ms = 0;
if(flag_S5)
{
V_date = 2*255/5;
Write_RB2();
}
else
{
V_date = Read_RB2();
Write_RB2();
}
}
DisplaySMG();
DisplayLED();
KeyScan();
}
}
//-------------------------------------------
//初始化外設(shè)
//-------------------------------------------
void Init_MCU(void)
{
Select_573(4);
P0 = 0xFF;
Select_573(5);
P0 = 0x00;
Select_573(0);
P0 = 0xFF;
}
//-------------------------------------------
//按鍵功能
//-------------------------------------------
void KeyScan(void)
{
if(S7 == 0 || S6 == 0 || S5 == 0 || S4 == 0)
{
delay(200);
if(S7 == 0) //數(shù)碼管顯示功能控制
{
flag_S7 = ~flag_S7;
}
while(!S7)
{
DisplaySMG();
}
if(S6 == 0) //LED 指示燈功能控制
{
flag_S6 = ~flag_S6;
}
while(!S6)
{
DisplaySMG();
}
if(S5 == 0) //輸出模式切換
{
flag_S5 = ~flag_S5;
} while(!S5)
{
DisplaySMG();
}
if(S4 == 0) //顯示界面切換
{
flag_S4 = ~flag_S4;
}
while(!S4)
{
DisplaySMG();
}
}
}
//-------------------------------------------
//數(shù)碼管顯示函數(shù)
//-------------------------------------------
void DisplaySMG(void)
{
if(!flag_S7)
{
Select_573(6);
P0 = 0x00;
Select_573(7);
P0 = 0xFF;
Select_573(0);
}
else
{
if(flag_S4)
{
// V_date = Read_RB2();
V_date_buff = V_date;
V_date_buff = (V_date_buff * 5.0) / 255 * 100; //D/A值轉(zhuǎn)換
Dispaly_V_SMG((u16)V_date_buff);
}
else
Dispaly_F_SMG(F_count_buff);
}
}
//-------------------------------------------
//中斷服務(wù)函數(shù)
//-------------------------------------------
void InterruptTime0(void) interrupt 1
{
F_count ++;
}
void InterruptTime1(void) interrupt 3
{
static u8 t;
t++;
if(t % 10 == 0)
flag_50ms = 1;
if(t >= 20) //頻率數(shù)據(jù)刷新時間 100ms
{
F_count_buff = F_count * 10;
F_count = 0;
t = 0;
}
}
復制代碼
全部代碼51hei下載地址:
第十屆.zip
(64.84 KB, 下載次數(shù): 25)
2020-10-31 19:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1