main.h
/**
* 51微控制器專案:多功能記錄儀
* 檔名:main.h
*/#ifndef _main_h
#define _main_h
typedef struct msg msg_t;
typedef void (* pfn)(); //定義函式指標型別
void keyaction(uint8_t keycode);
void serial_receive();
void dispmode0();
void dispmode1();
void dispmode2();
void ledupdate();
void led3toggle();
#endif
main.c
/**
* 51微控制器專案:多功能記錄儀
* 工作模式0:自動傳輸模式(上電預設)
* 工作模式1:自動記錄模式
* 使用者操作:
* (1)按鍵s5切換工作模式
* (2)按鍵s4切換顯示模式
* (3)當記錄儀工作在兩種模式下時,只有當使用者傳送字元"aaasss"給微控制器,
* 微控制器才把資料傳送給上位機顯示。
* * 檔名:main.c
*/#include #include #include "stdint.h"
#include "timer.h"
#include "digitaltube.h"
#include "independentkey.h"
#include "serial.h"
#include "i2c.h"
#include "eeprom.h"
#include "pcf8591.h"
#include "onewire.h"
#include "ds18b20.h"
#include "ds1302.h"
#include "main.h"
sbit led_1 = p0^0;
sbit led_2 = p0^1;
sbit led_3 = p0^2;
volatile bit flag200ms = 0, flag300ms = 0, flag1s = 0;
pfn code disptr[3] = ;
uint8_t disptrindex = 0;
bit workingmode = 0; //為0表示自動傳輸模式;為1表示自動記錄模式
msg_t message;
uint8_t serialbuf[7], serialbufindex = 0;
void main()
presec = time.sec;
}} if (flag300ms) else
isshading = 0;
}if (disptrindex == 1) else if (disptrindex == 2)
} if (flag1s)
if (isshading)
if (workingmode)
} }}void keyaction(uint8_t keycode) else
disptr[disptrindex]();
break;
case 5:
workingmode = ~workingmode;
ledupdate();
break; }}
void serial_receive() ", hour, minute, second);
hshi = message.hour >> 4;
hge = message.hour & 0x0f;
mshi = message.minute >> 4;
mge = message.minute & 0x0f;
sshi = message.second >> 4;
sge = message.second & 0x0f;
temshi = message.tempintpart / 10;
temge = message.tempintpart % 10;
humshi = message.humidity / 10;
humge = message.humidity % 10;
restshi = message.restime / 10;
restge = message.restime % 10;
myprintf("",
hshi+'0', hge+'0', mshi+'0', mge+'0', sshi+'0', sge+'0');
//myprintf("", message.tempintpart, message.humidity);
myprintf("",
temshi+'0', temge+'0', humshi+'0', humge+'0');
if (workingmode == 0) \n");
else
myprintf("\n");
} else \n", message.restime);
myprintf("\n", restshi+'0', restge+'0'); //注意要加'0'
}} serialbufindex = 0;
} else
}void serial_transmit()
void dispmode0()
void dispmode1()
void dispmode2()
void ledupdate() else
p2 = (p2 & 0x1f) | 0x80;
p0 = tmp;
p2 &= 0x1f;}/*
void ledupdate()
*/void led3toggle()
void tmr0isr() interrupt 1
if (cnt % 150 == 0)
if (cnt == 500)
}
微控制器多功能電子琴課設 基於51微控制器的電子琴設計
電子琴電路原理圖 電子琴設計元件清單 1.8歐0.25w小喇叭 2.8050三極體 2 3.10k電阻 2 4.30歐姆電阻 5.40腳座 6.stc89c51 7.10uf電容 8.30pf電容 2 9.小按鍵 8 10.自鎖開關 11.dc電源座 12.12m晶振 13.7 9萬用板 14.導線...
51微控制器學習記錄
一 由於位址和資料線有共用部分,用分時方式處理,ale進行位址的鎖存操作。二 要了解相應觸發條件 控制訊號操作 指令的時序 指令時序產生的內外部操作。三 指令的格式一般是 操作碼 運算元 四 與暫存器有關的格式中,一般用幾個bit來 代表是哪組暫存器 五 有些指令後面會加上資料,有些指令功能很複雜,...
51微控制器的復位引腳 51微控制器引腳功能介紹
40只引腳雙列直插封裝 dip 40只引腳按功能分為3類 1 電源及時鐘引腳 vcc vss xtal1 xtal2。2 控制引腳 psen ea ale reset 即rst 3 i o口引腳 p0 p1 p2 p3,為4個8位i o口的外部引腳。2.2.1 電源及時鐘引腳 1.電源引腳 1 vc...