閱讀完全文後,我首先會有乙個大概的框架,分別為三個方面
1.要用的模組
2.介面的顯示
3.細節部分(按鍵&led之類)
首先我貼上stcisp 的範例程式的定時器和smg,自己再稍加修改,完成smg管模組的初始化{顯示1234567)保證smg模組不出錯。
然後我會開始寫按鍵程式,無論是三行**還是狀態機程式,我都會再每個按鍵後面寫乙個led(0x0i),來檢驗按鍵程式是否正確。到這一步我已經確保兩個模組的正確性啦。
再然後,開始寫任務要求的其他模組(讀溫度,讀電壓,讀光敏)用數碼管顯示出來,檢測它的正確性。
隨後就是豐富其他細節邏輯之類。
最後我才完成任務對led,繼電器蜂鳴器之類的要求。(因為之前led做檢測真的是乙個非常好的用途)
#include "stc15f2k60s2.h"
#includetypedef unsigned char u8;
typedef unsigned int u16;
u8 code t_duan=; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
u8 code t_com=; //位碼
u8 smg_count, smg_i, table[8];
u8 key_count;
u8 key_val;
u8 state;
u8 temper;
u8 index;
u8 num;
u8 t[4]=, t_max,t_min;
u8 t_i;
bit baocun;
bit set;
bit key_flag;
bit flag1s;
sbit buzzer = p0^6;
sbit relay = p0^4;
sbit h1 = p3^0;
sbit h2 = p3^1;
sbit h3 = p3^2;
sbit h4 = p3^3;
sbit l1 = p4^4;
sbit l2 = p4^2;
sbit l3 = p3^5;
sbit l4 = p3^4;
u16 index_count;
u16 count;
bit flag_led2;
bit flag;//1000 times counter
u8 keyscan();
void key_cmd();
void timer0init(void); //1毫秒@12.000mhz
void allinit();
void led(u8 dat);
void smg_dis();
void t_cmd();
void led_cmd();
void delet() ;
void tm0_isr() interrupt 1 using 1
if (key_count-- == 0) //1ms * 1000 -> 1s
if (smg_count-- == 0) //1ms * 1000 -> 1s
if(index_count++ == 60000) index_count = 0;
if(index == 0 && index_count%800 == 0)
else if(index == 1 && index_count%400 == 0)
else if(index == 2 && index_count%200 == 0) }
void main()
if(flag1s)
else}}}
void timer0init(void) //1毫秒@12.000mhz
void allinit()
void led(u8 dat)
u8 keyscan()
break;
case 2: if(key == 88) state = 0; break;
} return keyreturn;}
void key_cmd() }
void smg_dis()
table[0] = 0x40;
table[1] = t_duan[index%10];
table[2] = 0x40;
table[3] = 0x00;
table[4] = 0x00;
table[5] = 0x00;
table[6] = t_duan[temper/10%10];
table[7] = t_duan[temper%10];
} else if(set)
}void led_cmd()
else if(flag && flag_led2 == 0)
else if(flag == 0 && flag_led2)
else
if(set)
else
} }
void t_cmd() }
void delet()
/*
程式說明: 單匯流排驅動程式
軟體環境: keil uvision 4.10
硬體環境: ct107微控制器綜合實訓平台(外部晶振12mhz) stc89c52rc微控制器
日 期: 2011-8-9
*/#include "reg52.h"
sbit dq = p1^4; //單匯流排介面
//單匯流排延時函式
void delay_onewire(unsigned int t) //stc89c52rc
}//通過單匯流排向ds18b20寫乙個位元組
void write_ds18b20(unsigned char dat)
delay_onewire(5);
}//從ds18b20讀取乙個位元組
unsigned char read_ds18b20(void)
delay_onewire(5);
} return dat;
}//ds18b20裝置初始化
bit init_ds18b20(void)
unsigned char r_t()
基於15微控制器簡易溫度採集 藍橋杯
在乙個寒假的準備中,15微控制器各個模組應經有了乙個充分的認識,對其內部原理以及程式控制已經熟練掌握,在距離省賽藍橋杯不到10天的時間裡,每天練習一套省賽模擬題,來提高各個模組的綜合應用。此次省賽試題中主要使用了ds1302和ds18b20兩個模組,整套題難度算中上吧。本題難度在於溫度採集時間設定和...
微控制器藍橋杯準備 溫度模組
51微控制器的溫度模組 main.c include reg52.h 標頭檔案 include ds18b20.h 溫度模組驅動 include intrins.h 移位操作標頭檔案 sfr auxr 0x8e unsigned char discode 數碼管顯示位元組碼 unsigned cha...
基於51微控制器的溫度採集系統
下面是一張原理圖 源 如下 include define uint unsigned int define uchar unsigned char include typedef bit bool sbit io p1 1 口線定義 sbit bee p1 0 sbit rs p2 5 sbit r...