久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
藍(lán)橋杯單片機組省賽源程序 第九屆
[打印本頁]
作者:
黑夜的星光
時間:
2020-10-31 19:37
標(biāo)題:
藍(lán)橋杯單片機組省賽源程序 第九屆
藍(lán)橋杯省賽 第九屆
有需要自己下載吧 今天星期 有點時間 把文件上傳一下 其他的就不多說了
九屆的題難點應(yīng)該就在 LED延時方面吧
其次就是在24C02的讀寫。連續(xù)寫數(shù)據(jù)記著至少延遲1.8幾ms好像,取2ms多次寫就行。其他的沒啥了
單片機源程序如下:
#include "smg.h"
#include "iic.h"
#include "type.h"
#define SYSCLOCK 11059200
sbit S7 = P3^0;
sbit S6 = P3^1;
sbit S5 = P3^2;
sbit S4 = P3^3;
bit Led_flag = 1; //默認(rèn)為正常無閃爍狀態(tài)
bit Star_End=0; //S7的2種模式
u8 ledtimes[4] = {40,40,40,40}; //默認(rèn)LED的流轉(zhuǎn)時間
u8 PWM_RB2; //LED占空比值
u8 Set_mode = 3; //默認(rèn)為數(shù)碼管熄滅,S6的三種模式:1,2,3
u8 Led_mode=1; //LED的四種模式:1,2,3,4
u8 eepromaddder[4] = {0x01,0x02,0x03,0x04}; //24C02的寫入和讀取地址
code u8 Led_Mode12[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //LED模式1,2
code u8 Led_Mode34[4] = {0x7E,0xBD,0xDB,0xE7}; //LED模式3,4
void Delay2ms(); //@12.000MHz
void Init_MCU(void);
u8 PCF8591_Levl(void);
void Init_Time0(u8 ms);
void KeyScan(void);
void Display_SMG(void);
void main(void)
{
u8 i;
u8 rb_levl;
Init_MCU();
Init_Time0(1); //1ms
ledtimes[0] = Read_24C02(0x01);
Delay2ms();
for(i=0;i>4;i++)
{
ledtimes[i] = Read_24C02(eepromaddder[i]);
Delay2ms();
}
while(1)
{
rb_levl = PCF8591_Levl();
KeyScan();
Display_SMG();
}
}
//*===============按鍵函數(shù)=============*//
void KeyScan(void)
{
u8 temp;
if(S7 == 0)//S7
{
delay(200);
if(S7 == 0)
{
Star_End = ~Star_End;
}while(!S7)
{
Display_SMG();
}
}
if(S6 == 0)//S6
{
delay(200);
if(S6 == 0)
{
Set_mode ++;
if(Set_mode > 3) Set_mode = 1;
}while(!S6)
{
if(Set_mode == 3)
{
switch(Led_mode)
{
case 1: Write_24C02(eepromaddder[0],ledtimes[0]); break;
case 2: Write_24C02(eepromaddder[1],ledtimes[1]); break;
case 3: Write_24C02(eepromaddder[2],ledtimes[2]); break;
case 4: Write_24C02(eepromaddder[3],ledtimes[3]); break;
default : break;
}
}
Display_SMG();
}
}
if(S5 == 0)//S5
{
delay(200);
if(S5 == 0)
{
if(Set_mode == 1)
{
Led_mode ++;
if(Led_mode > 4)
Led_mode = 4;
}
else if(Set_mode == 2)
{
ledtimes[Led_mode-1] += 10;
if(ledtimes[Led_mode-1] > 120)
ledtimes[Led_mode-1] = 120;
}
}while(!S5)
{
if(Set_mode == 1)
ledtimes[Led_mode-1] = Read_24C02(eepromaddder[Led_mode-1]);
Display_SMG();
}
}
if(S4 == 0) //S4
{
delay(200);
if(S4 == 0)
{
if(Set_mode == 1)
{
Led_mode --;
if(Led_mode == 0)
Led_mode = 1;
}
else if(Set_mode == 2)
{
ledtimes[Led_mode-1] -= 10;
if(ledtimes[Led_mode-1] < 40)
ledtimes[Led_mode-1] = 40;
}
}while(!S4)
{
if(Set_mode == 1)
ledtimes[Led_mode-1] = Read_24C02(eepromaddder[Led_mode-1]);
if(Set_mode == 3) //非設(shè)置狀態(tài)讀取RB2電壓等級
{
temp = PCF8591_Levl();
Display_SMG_LedLevl(11,temp);
}
Display_SMG();
}
}
}
//*===============數(shù)碼管顯示函數(shù)=============*//
void Display_SMG(void)
{
if(Set_mode == 3) //數(shù)碼管全部熄滅
{
Display_SMG_LedLevl(10,10);
}
else
{
switch(Led_mode)
{
case 1: Display_SMG_Setmode(1,ledtimes[Led_mode-1]*10); break;
case 2: Display_SMG_Setmode(2,ledtimes[Led_mode-1]*10); break;
case 3: Display_SMG_Setmode(3,ledtimes[Led_mode-1]*10); break;
case 4: Display_SMG_Setmode(4,ledtimes[Led_mode-1]*10); break;
default : break;
}
}
}
//*===============初始化MCU=============*//
void Init_MCU(void)
{
Select_573(4);
P0 = 0xFF;
Select_573(5);
P0 = 0x00;
Select_573(6);
P0 = 0x00;
Select_573(0);
}
//*===============RB2的電壓等級==============*//
u8 PCF8591_Levl(void)
{
u8 levl;
u8 temp;
temp = Read_PCF8591(0x03);
switch(temp/64)
{
case 0: levl = 1;PWM_RB2 = 2;break;
case 1: levl = 2;PWM_RB2 = 4;break;
case 2: levl = 3;PWM_RB2 = 6;break;
case 3: levl = 4;PWM_RB2 = 8;break;
default :break;
}
return levl;
}
//*===============初始化定時器0=============*//
void Init_Time0(u8 ms)
{
TMOD = TMOD & 0xF0;
TH0 = (65536 - ms*SYSCLOCK/12/1000) / 256;
TL0 = (65536 - ms*SYSCLOCK/12/1000) % 256;
TR0 = 1;
TF0 = 0;
ET0 = 1;
EA = 1;
}
//*===============中斷響應(yīng)函數(shù)=============*//
//功能1:設(shè)置100HZ的PWM
//功能2:設(shè)置的模式間隔0.8s閃爍
//功能3:設(shè)置LED的流轉(zhuǎn)
//*========================================*//
void InterruptTime0(void) interrupt 1 //中斷:1ms
{
static u8 i=0;
static u16 j=0;
static char cnt=0;
static u16 num=0;
static u8 buff; //定義一個緩沖變量,用來保存上次的Set_mode值
if(Set_mode == 1 || Set_mode == 2) //設(shè)置的模式閃爍
{
j ++;
if(j > 400)
{
j = 0;
Led_flag = ~Led_flag;
}
}
if(Star_End) //上電LED熄滅,需要S7打開LED流轉(zhuǎn)
{
i++;num++;
if(i>10) i=1; //100HZ無閃爍
switch(Led_mode)
{
case 1: if(buff != 1) cnt = 0;
if(num > ledtimes[0]*10) { num = 0; cnt ++;}
if(cnt > 7) cnt = 0;
break;
case 2: if(buff != 2) cnt = 7;
if(num > ledtimes[1]*10) { num = 0; cnt --;}
if(cnt < 0) cnt = 7;
break;
case 3: if(buff != 3) cnt = 0;
if(num > ledtimes[2]*10) { num = 0; cnt ++;}
if(cnt > 3) cnt = 0;
break;
case 4: if(buff != 4) cnt = 0;
if(num > ledtimes[3]*10) { num = 0; cnt --;}
if(cnt < 0) cnt = 3;
break;
default :
break;
}
Select_573(0);
if(i>=PWM_RB2) //PWM調(diào)節(jié)亮度
{
Select_573(4);
P0 = 0xFF;
Select_573(0);
}
else
{
P0 = 0xFF;
Select_573(4);
if(Led_mode == 1 || Led_mode == 2)
P0 = Led_Mode12[cnt];
else if(Led_mode == 3 || Led_mode == 4)
P0 = Led_Mode34[cnt];
Select_573(0);
}
}
buff = Led_mode; //用做比較的緩沖變量,比較按鍵LED模式是否改變,
//若發(fā)生改變,則初始化LED閃爍狀態(tài)
}
void Delay2ms() //@12.000MHz
{
unsigned char i, j;
i = 24;
j = 85;
do
{
while (--j);
} while (--i);
}
復(fù)制代碼
所有程序51hei提供下載:
第九屆.zip
(63.74 KB, 下載次數(shù): 21)
2020-10-31 19:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
dawangsun
時間:
2020-11-1 16:04
keil 5打開編譯都不通過啊
作者:
黑夜的星光
時間:
2020-11-2 13:03
dawangsun 發(fā)表于 2020-11-1 16:04
keil 5打開編譯都不通過啊
是嗎,我看看哈,放了一段時間,可能我發(fā)錯文件了
作者:
黑夜的星光
時間:
2020-11-2 13:11
dawangsun 發(fā)表于 2020-11-1 16:04
keil 5打開編譯都不通過啊
親,我試過了 源碼編譯下載都沒有問題,不知道你說的怎么回事
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品99久久久久久动医院
|
日韩国产中文字幕
|
欧美精品一区在线发布
|
精品视频一区二区三区在线观看
|
欧美一级欧美一级在线播放
|
国产在线精品一区二区三区
|
国产精品视频偷伦精品视频
|
免费99精品国产自在在线
|
一级毛片免费
|
欧美日韩成人在线
|
一二三区av
|
国产一区二区在线视频
|
碰碰视频
|
国外成人免费视频
|
国产在线一区二区
|
国产精品一码二码三码在线
|
五月婷婷 六月丁香
|
婷婷五月色综合
|
欧美日韩精品一区二区天天拍
|
www.久久99
|
国产成人网
|
九九色综合
|
亚洲精品久久久久久下一站
|
欧美激情在线一区二区三区
|
亚洲一区二区三区在线
|
久久小视频
|
久久久久久久电影
|
影音先锋中文字幕在线观看
|
欧美日韩国产精品一区二区
|
亚洲一区 中文字幕
|
精品国产一区二区三区免费
|
毛片a级
|
韩国毛片一区二区三区
|
欧美乱操
|
一区二区不卡视频
|
91精品国产综合久久久久久漫画
|
国产在线高清
|
青青激情网
|
白浆在线
|
一区二区三区视频在线
|
久久精品成人一区
|