51study
Hello World
江科大自化協(xié)(AT89C51)
八位數(shù)碼管靜態(tài)顯示
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number];
}
Nixie[2,3];//第二位數(shù)碼管顯示數(shù)字3
LCD1602調(diào)試工具
使用LCD1602液晶屏作為調(diào)試窗口,提供類似printf函數(shù)的功能,可實時觀察單片機(jī)內(nèi)部數(shù)據(jù)的變換情況,便于調(diào)試和演示。
| 函數(shù) | 作用 |
|---|---|
| LCD_Init(); | 初始化 |
| LCD_ShowChar(1,1,'A'); | 顯示一個字符 |
| LCD_ShowString(1,3,"Hello"); | 顯示字符串 |
| LCD_ShowNum(1,9,123,3); | 顯示十進(jìn)制數(shù)字 |
| LCD_ShowSignedNum(1,13,-66,2); | 顯示有符號十進(jìn)制數(shù)字 |
| LCD_ShowHexNum(2,1,0xA8,2); | 顯示十六進(jìn)制數(shù)字 |
| LCD_ShowBinNum(2,4,0xAA,8); | 顯示二進(jìn)制數(shù)字 |
AT89C52(冬令營)
11.0592MHS的延時1ms函數(shù)
void delay_ms(unsigned int n)
{
unsigned char i;
while(n--)
for(i = 0; i < 113; i++);
}
數(shù)碼管顯示
#define DUANXUAN P3
sbit WEI1 = P2^6;
sbit WEI2 = P2^7;
int nums[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
void delay_ms(unsigned int n)//延時1ms函數(shù)
{
unsigned char i;
while(n--)
for(i = 0; i < 113; i++);
}
void display_num(int num)
{
WEI1 = 0;
DUANXUAN = nums[num / 10]; //顯示個位
delay_ms(25);
WEI1 = 1;
WEI2 = 0;
DUANXUAN = nums[num % 10]; //顯示十位
delay_ms(25);
WEI2 = 1;
}
數(shù)碼管陰陽極
共陰極數(shù)碼管:位選高電平有效,段選低電平有效
共陽極數(shù)碼管:位選低電平有效,段選高電平有效
中斷相關(guān)的寄存器
定時/計數(shù)控制寄存器(TCON)
| 定 時器中斷 | 外部中斷 | |||||||
|---|---|---|---|---|---|---|---|---|
| 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| 功能 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
| 詳細(xì) | 定時器1中斷標(biāo)志位 | 打開定時計數(shù)器1 | 定時器0中斷標(biāo)志位 | 打開定時計數(shù)器1 | 外部中斷1標(biāo)志位 | 外部中斷1觸發(fā)方式 | 外部中斷0標(biāo)志位 | 外部中斷0觸發(fā)方式 |
注釋:外部中斷觸發(fā)方式(IT0/IT1)為1時負(fù)跳變觸發(fā),為0時低電平觸發(fā)。
定時器工作方式寄存器(TMOD)
| 定時器1 | 定時器0 | |||||||
|---|---|---|---|---|---|---|---|---|
| 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| 功能 | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
| 決定定時器的開啟方式。當(dāng)其等于0時,定時器完全由TRx決定。當(dāng)其等于1時,定時器由TRx和INTx(外部中斷引腳,高電平)決定 | 選擇頻率的來源。=0時-定時器-12/晶振頻率。=1時-計數(shù)器-外部脈沖頻率。 | M1與M0選擇定時/計數(shù)器的工作方式,詳見下表。定時器0與定時器1一致。 | GATE | C/T | M1 | M0 |
M1與M0(定時計數(shù)器工作方式)
| M1 | M0 | 工作方式 |
|---|---|---|
| 0 | 0 | 方式0:計數(shù)器大小是13bit(Thx與低5bit的Tlx) |
| 0 | 1 | 方式1:計數(shù)器大小是16bit |
| 1 | 0 | 方式2:計數(shù)器大小是8bit |
| 1 | 1 | 方式3:T0分為兩個獨立的計數(shù)器,T1沒有工作方式 |
中斷允許寄存器(IE)
| 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 功能 | EA | ES | ET1 | EX1 | ET0 | EX0 | ||
| 詳細(xì) | 總中斷允許位。=0時CPU屏蔽所有中斷。=1時CPU接收所有中斷。 | 串口中斷允許位。=0時禁止串口中斷。=1時允許串口中斷。 | 定時計數(shù)器中斷1允許位。=0時禁止。=1時允許 | 外部中斷1允許位。=0時禁止。=1時允許 | 定時計數(shù)器中斷0允許位。=0時禁止。=1時允許 | 外部中斷0允許位。=0時禁止。=1時允許 |
中斷地址
| 中斷編號 | 中斷源 | 入口地址 |
|---|---|---|
| 0 | 外部中斷0 | 0003H |
| 1 | 定時計數(shù)器中斷0 | 000BH |
| 2 | 外部中斷1 | 0013H |
| 3 | 定時計數(shù)器中斷1 | 001BH |
| 4 | 串口中斷 | 0023H |
外部中斷的開啟步驟及舉例
1.設(shè)置外部中斷的觸發(fā)方式(IT0/IT1)
2.開啟外部中斷允許位(EX0/EX1)
3.開啟總中斷(EA)
例子:
void INTconfiuration()
{
IT1=0;//設(shè)置外部中斷1的觸發(fā)方式為低電平觸發(fā)
EX1=1;//開啟外部中斷1允許位
EA=1;//開啟總中斷允許位
}
定時計數(shù)器中斷的開啟步驟及舉例
1.選擇工作方式(M0,M1)
2.選擇控制方式(設(shè)置GATE)
3.選擇計數(shù)還是定時模式(設(shè)置C/T)
4.給定時計數(shù)器賦初值(設(shè)置THx和TLx)(x為0或1)
5.開啟定時計數(shù)器中斷允許位
6.開啟總中斷允許位
7開啟定時計數(shù)器(設(shè)置TR1/TR0)
定時/計數(shù)器中斷舉例
void TimeConfiguration()//定時器0對紅綠燈進(jìn)行操作
{
TMOD = 0x01;//定時計數(shù)器0設(shè)置為工作方式1
TL0 = 0x66; //設(shè)置定時器初值
TH0 = 0xFC; //設(shè)置定時器初值 11.0592MHz 延時1ms
ET0 = 1;//開啟定時計數(shù)器0中斷
EA = 1; //開啟總中斷
TR0 = 1;//開啟定時計數(shù)器0
}
中斷函數(shù)舉例(外部中斷/定時計數(shù)器中斷)
void LED_change() interrupt 1 //返回值必須為空
{
//具體代碼~~
}
頻率周期
晶振頻率:fosc=11.0592MHZ
晶振周期:T晶振=1/fosc=1/11.0592MHZ
把晶振周期定義為一個節(jié)拍,記為P,2個節(jié)拍作為狀態(tài)周期S=2P。
機(jī)器周期:芯片內(nèi)部時間的最小單位,其他所有事件的執(zhí)行時間都是它的整數(shù)倍。T機(jī)器=6S=12P=12/11.0592MHZ~~1.085us=1us.
運用舉例:用于計數(shù)器初值的計算:用12MHZ的晶振頻率,對應(yīng)的機(jī)器周期時1us.此時若定時1ms的初值即要運行1000次的機(jī)器周期(計數(shù)1000次)。
AT24C02
通訊接口:I2C總線
容量:256字節(jié)
I2C總線
兩根通信線:SCL(Serial clock),SDA(Serial data)



I2C時序
- 起始條件:SCL高電平,SDA從高到低
- 終止條件:SCL高電平,SDA從低到高

- 發(fā)送一個字節(jié)

-
接受一個字節(jié)(主機(jī)在接收之前釋放SDA線是為了把控制權(quán)交給從機(jī))

-
發(fā)送應(yīng)答:接收完之后發(fā)送應(yīng)答(從機(jī)給主機(jī)發(fā)送是否應(yīng)答,主體是從機(jī))
-
接收應(yīng)答:發(fā)送完之后接收應(yīng)答(主機(jī)給從機(jī)發(fā)送是否應(yīng)答,主體是主機(jī))

I2C數(shù)據(jù)幀

第一個字節(jié)數(shù)據(jù)一定要發(fā)從機(jī)地址和加上讀寫位(找誰)
一個字節(jié)是八位,前七位是地址,最后一位是讀寫標(biāo)志位(W寫是0,R讀是1)
前四位是固定端(A6,A5,A4,A3)(24C02是固定為1010)
后三位可配置(A2,A1,A0)

? 



浙公網(wǎng)安備 33010602011771號