51微控制器專案 多功能記錄儀

2021-07-02 06:43:15 字數 3100 閱讀 6953

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...