一、設(shè)計目的
1、學(xué)習(xí)并掌握定時器/計數(shù)器的工作原理;
2、學(xué)習(xí)并掌握定時器/計數(shù)器控制程序設(shè)計方法;
3、學(xué)習(xí)并掌握矩陣鍵盤工作原理與程序設(shè)計方法;
4、學(xué)習(xí)并掌握顯示程序設(shè)計;
二、實驗設(shè)備
1、計算機;
2、單片機開發(fā)板;
3、Keil C51編程軟件;
4、Proteus仿真軟件;
三、設(shè)計內(nèi)容
1、功能
必須使用定時器完成以下功能。
功能1:4位數(shù)碼管顯示“分鐘.秒”
功能2:K1設(shè)置鍵、K2加1鍵、K2減1鍵
(1)正常情況:顯示“分鐘.秒”
(2)按下K1:第一次按下調(diào)整分鐘狀態(tài)、第二次按下調(diào)整秒狀態(tài)、第三次按下正常顯示狀態(tài)
(3)按下K2:分鐘或秒加1
(4)按下K3:分鐘或秒減1
選做功能:鬧鐘功能(請先完成功能1和功能2并提交后,選做)
(1)當(dāng)?shù)竭_設(shè)定好的時間,蜂鳴器奏樂、LED閃爍報警;
(2)按下K4:停止報警,正常顯示;
(3)鬧鐘時間可調(diào);
(4)按下K1:第一次按下調(diào)整分鐘狀態(tài)、第二次按下調(diào)整秒狀態(tài)、第三次按下調(diào)整鬧鐘分鐘狀態(tài)、第四次按下調(diào)整鬧鐘秒狀態(tài)、第五次按下正常顯示狀態(tài)
(5)按下K2:按一下分鐘或秒加1
(6)按下K3:按一下分鐘或秒減1
2、硬件電路原理圖
3、設(shè)計程序(5號、宋體、單倍行距、分兩欄,要求程序設(shè)計規(guī)范化,添加必要的說明和注釋)
3.1必做題程序
仿真原理圖如下
單片機源程序如下:
/*****************************************
* 實 驗 名 :4*4矩陣按鍵實驗
* 實驗說明 :采用循環(huán)方式實現(xiàn):數(shù)碼管顯示電子表:分鐘、秒,用3個按鍵實現(xiàn)調(diào)整
* 按鍵1:設(shè)置、確定
* 按鍵2:加1
* 按鍵3:減1
*****************************************/
#include
#include
#define FOSC 11059200L //晶振設(shè)置,默認使用11.0592M Hz
//#define FOSC 12000000L //晶振設(shè)置,使用12M Hz
//#define FOSC 24000000L //晶振設(shè)置,使用24M Hz
#define TIME0_MS 50 //設(shè)定定時時間50ms
//IO接口定義
#define LED_PORT P0 //數(shù)碼管的段碼顯示控制接口
#define KEY_PORT P1 //鍵盤控制接口
sbit wela_1 = P2^4; //數(shù)碼管個位顯示控制口
sbit wela_2 = P2^5; //數(shù)碼管十位顯示控制口
sbit wela_3 = P2^6; //數(shù)碼管百位顯示控制口
sbit wela_4 = P2^7; //數(shù)碼管千位顯示控制口
//全局變量定義
unsigned char count; //定時計數(shù)次數(shù)
unsigned char key_value;//鍵值
unsigned char qian,bai,shi,ge; //數(shù)碼管顯示的4位數(shù)字
unsigned char state=0; //狀態(tài)變量,反映當(dāng)前狀態(tài):0-正常顯示,1-調(diào)分鐘,2-調(diào)秒
unsigned char miao,fen; //分鐘、秒
//LED顯示字模 0-F 共陽模式
unsigned code table[]= {0Xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
/*****************************************
* 函 數(shù) 名 :Delayms
* 函數(shù)功能 :實現(xiàn) ms級的延時
* 輸 入 :ms
* 輸 出 :無
*****************************************/
void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<114;j++);
#elif FOSC ==12000000L
for(j=0;j<123;j++);
#elif FOSC ==24000000L
for(j=0;j<249;j++);
#else
for(j=0;j<114;j++);
#endif
}
/*****************************************
* 函 數(shù) 名 :Timer0Init
* 函數(shù)功能 :定時器0初始化
* 輸 入 :無
* 輸 出 :無
*****************************************/
void Timer0Init()
{
TMOD=0x01; //設(shè)置定時器0工作方式為1
TH0=(65536-FOSC/12/1000*TIME0_MS)/256; //設(shè)置定時器初值高8位
TL0=(65536-FOSC/12/1000*TIME0_MS)%256; //設(shè)置定時器初值低8位
ET0=1; //開啟定時器0中斷
TR0=1; //開啟定時器0
EA=1; //開總中斷
}
/*****************************************
* 函 數(shù) 名 :LEDdisplay
* 函數(shù)功能 :4位數(shù)碼管顯示函數(shù),循環(huán)顯示各個位上的數(shù)據(jù)
* 輸 入 :num要顯示的數(shù)據(jù)
* 輸 出 :無
*************************************/
void LEDdisplay()
{
wela_1 = 1; //關(guān)閉所有數(shù)碼管
wela_2 = 1;
wela_3 = 1;
wela_4 = 1;
wela_4=0; //顯示千位,千位數(shù)碼管的位控制為0
LED_PORT=table[qian]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT = 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_4=1; //熄滅千位
wela_3=0; //顯示百位,百數(shù)碼管的位控制為0
LED_PORT=table[bai]& 0x7F ; //取table數(shù)組中的段碼送段碼顯示控制接口 0x7f實現(xiàn)顯示小數(shù)點
Delayms(1); //延時幾毫秒
LED_PORT = 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_3=1; //熄滅百位
wela_2=0; //顯示十位,十位數(shù)碼管的位控制為0
LED_PORT=table[shi]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT = 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_2=1; //熄滅十位
wela_1=0; //顯示個位,個位數(shù)碼管的位控制為0
LED_PORT=table[ge]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT = 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_1=1; //熄滅個位
}
/*****************************************
* 函 數(shù) 名 :KeyScan
* 函數(shù)功能 :4*4鍵盤掃描
* 輸 入 :無
* 輸 出 :num 獲取的鍵值,若沒有鍵值則返回 0xff
*************************************/
unsigned char KeyScan()
{
unsigned chartemp,num;
num = 0xff;
//************************************
KEY_PORT=0xfe; //P3口:1111 1110 行0為低電平(0)
temp=KEY_PORT; //讀取P3口,送temp
temp=temp&0xf0; //temp高四位不變(保存列值),低四位清零
while(temp!=0xf0) //temp高四位不等于1111,說明列線中有0,說明有鍵按下
{
Delayms(5); //延時消抖
temp=KEY_PORT; //再次讀取P3口,送temp
temp=temp&0xf0; //temp高四位不變,低四位清零
while(temp!=0xf0) //temp高四位不等于1111,說明列線中有0,說明確實有鍵按下
{
temp=KEY_PORT; //讀取P3口,送temp
switch(temp)
{
case0xee:num=1; //高四位:1110(列0=0),低四位:1110(行0=0),說明行0與列0交叉位置按鍵按下
break;
case0xde:num=2; //高四位:1101(列1=0),低四位:1110(行0=0),說明行0與列1交叉位置按鍵按下
break;
case0xbe:num=3; //高四位:1011(列2=0),低四位:1110(行0=0),說明行0與列2交叉位置按鍵按下
break;
case0x7e:num=4; //高四位:0111(列3=0),低四位:1110(行0=0),說明行0與列3交叉位置按鍵按下
break;
}
while(temp!=0xf0) //temp高四位不等于1111,說明列線中有0,說明有鍵按下沒松開(釋放)
{
temp=KEY_PORT; //讀取P3口,送temp
temp=temp&0xf0; //temp高四位不變(保存列值),低四位清零
}
}
}
//************************************
KEY_PORT=0xfd; //P3口:1111 1101 行1為低電平(0)
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case0xed:num=5; //高四位:1110(列0=0),低四位:1101(行1=0),說明行1與列0交叉位置按鍵按下
break;
case0xdd:num=6; //高四位:1101(列1=0),低四位:1101(行1=0),說明行1與列1交叉位置按鍵按下
break;
case0xbd:num=7; //高四位:1011(列2=0),低四位:1101(行1=0),說明行1與列2交叉位置按鍵按下
break;
case0x7d:num=8; //高四位:0111(列3=0),低四位:1101(行1=0),說明行1與列3交叉位置按鍵按下
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
//***********************************
KEY_PORT=0xfb; //P3口:1111 1011 行2為低電平(0)
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case0xeb:num=9; //高四位:1110(列0=0),低四位:1011(行2=0),說明行2與列0交叉位置按鍵按下
break;
case0xdb:num=10; //高四位:1101(列1=0),低四位:1011(行2=0),說明行2與列1交叉位置按鍵按下
break;
case0xbb:num=11; //高四位:1011(列2=0),低四位:1011(行2=0),說明行2與列2交叉位置按鍵按下
break;
case0x7b:num=12; //高四位:0111(列3=0),低四位:1011(行2=0),說明行2與列3交叉位置按鍵按下
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
//************************************
KEY_PORT=0xf7; //P3口:1111 0111 行3為低電平(0)
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case0xe7:num=13; //高四位:1110(列0=0),低四位:0111(行3=0),說明行3與列0交叉位置按鍵按下
break;
case 0xd7:num=14; //高四位:1101(列1=0),低四位:0111(行3=0),說明行3與列1交叉位置按鍵按下
break;
case0xb7:num=15; //高四位:1011(列2=0),低四位:0111(行3=0),說明行3與列2交叉位置按鍵按下
break;
case0x77:num=16; //高四位:0111(列3=0),低四位:0111(行3=0),說明行3與列3交叉位置按鍵按下
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
//************************************
return num;
}
/*****************************************
* 函 數(shù) 名 :Key1
*************************************/
void Key3() //key3減1鍵
{
if(state==1) //狀態(tài)為1,調(diào)分鐘狀態(tài)
if(fen==0) //分鐘值為0,則減1為59
fen=59;
else //分鐘值不為0,則減1
fen--; //因此,分鐘的變化規(guī)律是0,59,...,1,0,59,...
if(state==2) //狀態(tài)為2,調(diào)秒狀態(tài)
if(miao==0) //秒值為0,則減1為59
miao=59;
else //秒值不為0,則減1
miao--; //因此,秒的變化規(guī)律是0,59,...,1,0,59,...
}
/*****************************************
* 函 數(shù) 名 :KeyHandle
* 函數(shù)功能 :鍵處理程序
* 輸 入 :無
* 輸 出 :無
*************************************/
void KeyHandle()
{
switch(key_value) //判斷鍵值,哪個按鍵按下?
{
case1:Key1();break; //key1按下,調(diào)用key1()函數(shù)
case2:Key2();break; //key2按下,調(diào)用key2()函數(shù)
case3:Key3();break; //key3按下,調(diào)用key3()函數(shù)
default:break;
}
}
/*****************************************
* 函 數(shù) 名 :main
* 函數(shù)功能 :主函數(shù)
* 輸 入 :無
* 輸 出 :無
*************************************/
void main()
{
Timer0Init();
count = 0;
fen = 59;
miao = 58;
while(1)
{
if(count == 20) //達到1s=50ms*20次
{
count=0; //計數(shù)值回零
miao++; //秒加1
if(miao == 60) //秒為60
{
miao = 0; //秒回零
fen ++; //分加一
if(fen ==60) // 分為60
fen =0; //分回零
}
}
key_value = KeyScan();
KeyHandle();
while(state!=0)
{
ET0=0; //關(guān)閉定時器0中斷
key_value=KeyScan();//調(diào)用鍵掃描函數(shù)獲得鍵值
KeyHandle(); //調(diào)用鍵處理函數(shù)運行各個鍵處理函數(shù)
qian=fen/10; //取分鐘的十位
bai=fen%10; //取分鐘的個位
shi=miao/10; //取秒的十位
ge=miao%10; //取秒的個位
LEDdisplay(); //顯示當(dāng)前時間
}
//處理LED顯示
qian=fen%100/10;
bai=fen%10;
shi=miao%100/10;
ge=miao%10;
LEDdisplay();
}
}
/*****************************************
* 函 數(shù) 名 :Timer0Int
* 函數(shù)功能 :定時器0中斷函數(shù) , 每隔TIME0_MS ms進入
* 輸 入 :無
* 輸 出 :無
*************************************/
void Timer0Int() interrupt 1
{
TH0=(65536-FOSC/12/1000*TIME0_MS)/256;//重新裝入初值高8位
TL0=(65536-FOSC/12/1000*TIME0_MS)%256;//重新裝入初值低8位
count++; //計數(shù)值加1
}
3.2選做題程序
/****************************************************************************************
* 實 驗 名:4*4矩陣按鍵實驗
* 實驗說明:采用循環(huán)方式實現(xiàn):數(shù)碼管顯示電子表:分鐘、秒,用3個按鍵實現(xiàn)調(diào)整
* 按鍵1:設(shè)置、確定
* 按鍵2:加1
* 按鍵3:減1
****************************************************************************************/
#include
#include
#defineFOSC 11059200L //晶振設(shè)置,默認使用11.0592M Hz
//#defineFOSC 12000000L //晶振設(shè)置,使用12M Hz
//#defineFOSC 24000000L //晶振設(shè)置,使用24M Hz
#defineTIME0_MS 50 //設(shè)定定時時間50ms
#defineT10MS (65536-FOSC/12/100) //10ms定時:T10MS為定時器初值(16位)
//IO接口定義
#defineLED_PORT P0 //數(shù)碼管的段碼顯示控制接口
#defineKEY_PORT P1 //鍵盤控制接口
sbitwela_1 = P2^4; //數(shù)碼管個位顯示控制口
sbitwela_2 = P2^5; //數(shù)碼管十位顯示控制口
sbitwela_3 = P2^6; //數(shù)碼管百位顯示控制口
sbitwela_4 = P2^7; //數(shù)碼管千位顯示控制口
sbitspeak_IO =P3^6 ; //蜂鳴器控制引腳
sbitLED1 = P3^5; //LED1控制引腳
//全局變量定義
unsignedchar count; //定時器計數(shù)次數(shù)
unsignedchar count_2; //計數(shù)器變量
unsignedchar key_value;//鍵值
unsignedchar qian,bai,shi,ge; //數(shù)碼管顯示的4位數(shù)字
unsignedchar alarm_qian,alarm_bai,alarm_shi,alarm_ge; //數(shù)碼管顯示的4位數(shù)字
unsignedchar state=0; //狀態(tài)變量,反映當(dāng)前狀態(tài):0-正常顯示,1-調(diào)分鐘,2-調(diào)秒
unsignedchar miao,fen; //分鐘、秒
unsignedchar alarm_miao,alarm_fen; //分鐘、秒
//LED顯示字模 0-F 共陽模式
unsignedcode table[]={0Xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsignedchar code SONG[] ={
//祝你平安(217字節(jié))
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,
0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,
0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,
0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,
0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,
0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,
0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,
0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,
0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x1c,0x20,
0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,
0x2b,0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,
0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,
0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,
0x40,0x10,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,
0x00,
//路邊的野花不要采(164字節(jié))
0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,
0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,
0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,
0x20,0x30,0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,
0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x30,0x1C,
0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,
0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,
0x10,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x15,0x1F,0x05,0x20,0x10,0x1C,0x10,0x20,
0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x30,0x1C,
0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,
0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,
0x10,0x18,0x40,0x1C,0x20,0x20,0x20,0x26,0x40,0x13,0x60,0x18,
0x20,0x15,0x40,0x13,0x40,0x18,0x80,
0x00,
};
/*******************************************************************************
* 函 數(shù) 名:Delayms
* 函數(shù)功能:實現(xiàn) ms級的延時
* 輸 入 :ms
* 輸 出 :無
*******************************************************************************/
voidDelayms(unsigned int ms)
{
unsignedint i,j;
for(i=0;i
for(j=0;j<114;j++);
#elifFOSC == 12000000L
for(j=0;j<123;j++);
#elifFOSC == 24000000L
for(j=0;j<249;j++);
#else
for(j=0;j<114;j++);
#endif
}
/*******************************************************************************
* 函 數(shù) 名:Delayus
* 函數(shù)功能:us級延時
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidDelayus(unsigned int us)
{
unsignedint i,j;
for(i =0;i < us;i++ )
{
for(j =0;j<3;j++ );
}
}
/*******************************************************************************
* 函 數(shù) 名:Timer0Init
* 函數(shù)功能:定時器0初始化
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidTimer0Init()
{
TMOD=0x01;//設(shè)置定時器0工作方式為1
TH0=(65536-FOSC/12/1000*TIME0_MS)/256; //設(shè)置定時器初值高8位
TL0=(65536-FOSC/12/1000*TIME0_MS)%256; //設(shè)置定時器初值低8位
ET0=1;//開啟定時器0中斷
TR0=1;//開啟定時器0
EA=1; //開總中斷
}
/*******************************************************************************
* 函 數(shù) 名:Time1_Init
* 函數(shù)功能:定時器1初始化
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidTime1Init()
{
TMOD|= 0x10; //工作模式選擇:定時器T1工作在方式1:16位定時器模式
ET1 = 1; //定時器T1中斷允許
EA = 1; //總中斷允許
TH1 = T10MS>>8; //裝初值高8位,延時10ms
TL1 = T10MS; //裝初值低8位,延時10ms
}
/*******************************************************************************
* 函 數(shù) 名:LEDdisplay
* 函數(shù)功能:4位數(shù)碼管顯示函數(shù),循環(huán)顯示各個位上的數(shù)據(jù)
* 輸 入 :num要顯示的數(shù)據(jù)
* 輸 出 :無
*******************************************************************************/
voidLEDdisplay()
{
wela_1= 1; //關(guān)閉所有數(shù)碼管
wela_2= 1;
wela_3= 1;
wela_4= 1;
wela_4=0; //顯示千位,千位數(shù)碼管的位控制為0
LED_PORT=table[qian]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT= 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_4=1; //熄滅千位
wela_3=0; //顯示百位,百數(shù)碼管的位控制為0
LED_PORT=table[bai]& 0x7F ; //取table數(shù)組中的段碼送段碼顯示控制接口 0x7f實現(xiàn)顯示小數(shù)點
Delayms(1); //延時幾毫秒
LED_PORT= 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_3=1; //熄滅百位
wela_2=0; //顯示十位,十位數(shù)碼管的位控制為0
LED_PORT=table[shi]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT= 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_2=1; //熄滅十位
wela_1=0; //顯示個位,個位數(shù)碼管的位控制為0
LED_PORT=table[ge]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT= 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_1=1; //熄滅個位
}
/*******************************************************************************
* 函 數(shù) 名:LEDdisplay_alarm
* 函數(shù)功能:4位數(shù)碼管顯示函數(shù),循環(huán)顯示各個位上的數(shù)據(jù)
* 輸 入 :num要顯示的數(shù)據(jù)
* 輸 出 :無
*******************************************************************************/
voidLEDdisplay_alarm()
{
wela_1= 1; //關(guān)閉所有數(shù)碼管
wela_2= 1;
wela_3= 1;
wela_4= 1;
wela_4=0; //顯示千位,千位數(shù)碼管的位控制為0
LED_PORT=table[alarm_qian]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT= 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_4=1; //熄滅千位
wela_3=0; //顯示百位,百數(shù)碼管的位控制為0
LED_PORT=table[alarm_bai]& 0x7F ; //取table數(shù)組中的段碼送段碼顯示控制接口 0x7f實現(xiàn)顯示小數(shù)點
Delayms(1); //延時幾毫秒
LED_PORT= 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_3=1; //熄滅百位
wela_2=0; //顯示十位,十位數(shù)碼管的位控制為0
LED_PORT=table[alarm_shi]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT= 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_2=1; //熄滅十位
wela_1=0; //顯示個位,個位數(shù)碼管的位控制為0
LED_PORT=table[alarm_ge]; //取table數(shù)組中的段碼送段碼顯示控制接口
Delayms(1); //延時幾毫秒
LED_PORT= 0xff; //熄滅數(shù)碼管,因共陽極所以0xff送段碼顯示控制接口
wela_1=1; //熄滅個位
}
/*******************************************************************************
* 函 數(shù) 名:KeyScan
* 函數(shù)功能:4*4鍵盤掃描
* 輸 入 :無
* 輸 出 :num 獲取的鍵值,若沒有鍵值則返回 0xff
*******************************************************************************/
unsignedchar KeyScan()
{
unsignedchar temp,num;
num= 0xff;
//**************************************************************************
KEY_PORT=0xfe; //P3口:1111 1110 行0為低電平(0)
temp=KEY_PORT; //讀取P3口,送temp
temp=temp&0xf0; //temp高四位不變(保存列值),低四位清零
while(temp!=0xf0) //temp高四位不等于1111,說明列線中有0,說明有鍵按下
{
Delayms(5); //延時消抖
temp=KEY_PORT; //再次讀取P3口,送temp
temp=temp&0xf0; //temp高四位不變,低四位清零
while(temp!=0xf0) //temp高四位不等于1111,說明列線中有0,說明確實有鍵按下
{
temp=KEY_PORT; //讀取P3口,送temp
switch(temp)
{
case0xee:num=1; //高四位:1110(列0=0),低四位:1110(行0=0),說明行0與列0交叉位置按鍵按下
break;
case0xde:num=2; //高四位:1101(列1=0),低四位:1110(行0=0),說明行0與列1交叉位置按鍵按下
break;
case0xbe:num=3; //高四位:1011(列2=0),低四位:1110(行0=0),說明行0與列2交叉位置按鍵按下
break;
case0x7e:num=4; //高四位:0111(列3=0),低四位:1110(行0=0),說明行0與列3交叉位置按鍵按下
break;
}
while(temp!=0xf0) //temp高四位不等于1111,說明列線中有0,說明有鍵按下沒松開(釋放)
{
temp=KEY_PORT; //讀取P3口,送temp
temp=temp&0xf0; //temp高四位不變(保存列值),低四位清零
}
}
}
//**************************************************************************
KEY_PORT=0xfd; //P3口:1111 1101 行1為低電平(0)
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case0xed:num=5; //高四位:1110(列0=0),低四位:1101(行1=0),說明行1與列0交叉位置按鍵按下
break;
case0xdd:num=6; //高四位:1101(列1=0),低四位:1101(行1=0),說明行1與列1交叉位置按鍵按下
break;
case0xbd:num=7; //高四位:1011(列2=0),低四位:1101(行1=0),說明行1與列2交叉位置按鍵按下
break;
case0x7d:num=8; //高四位:0111(列3=0),低四位:1101(行1=0),說明行1與列3交叉位置按鍵按下
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
//**************************************************************************
KEY_PORT=0xfb; //P3口:1111 1011 行2為低電平(0)
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case0xeb:num=9; //高四位:1110(列0=0),低四位:1011(行2=0),說明行2與列0交叉位置按鍵按下
break;
case0xdb:num=10; //高四位:1101(列1=0),低四位:1011(行2=0),說明行2與列1交叉位置按鍵按下
break;
case0xbb:num=11; //高四位:1011(列2=0),低四位:1011(行2=0),說明行2與列2交叉位置按鍵按下
break;
case0x7b:num=12; //高四位:0111(列3=0),低四位:1011(行2=0),說明行2與列3交叉位置按鍵按下
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
//**************************************************************************
KEY_PORT=0xf7; //P3口:1111 0111 行3為低電平(0)
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case0xe7:num=13; //高四位:1110(列0=0),低四位:0111(行3=0),說明行3與列0交叉位置按鍵按下
break;
case0xd7:num=14; //高四位:1101(列1=0),低四位:0111(行3=0),說明行3與列1交叉位置按鍵按下
break;
case0xb7:num=15; //高四位:1011(列2=0),低四位:0111(行3=0),說明行3與列2交叉位置按鍵按下
break;
case0x77:num=16; //高四位:0111(列3=0),低四位:0111(行3=0),說明行3與列3交叉位置按鍵按下
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
//**************************************************************************
returnnum;
}
/*******************************************************************************
* 函 數(shù) 名:Key1
* 函數(shù)功能:1號鍵處理程序
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidKey1() //key1改變狀態(tài)
{
state++; //狀態(tài)值加1
if(state==5)//若狀態(tài)加到3,
{
state=0; //則回0
ET0= 1;
}
//因此,按下key1狀態(tài)state變化規(guī)律為:0,1,2,0,1,2,...
//狀態(tài)state=0:正常顯示
//狀態(tài)state=1:調(diào)分鐘
//狀態(tài)state=2:調(diào)秒
}
/*******************************************************************************
* 函 數(shù) 名:Key2
* 函數(shù)功能:2號鍵處理程序
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidKey2() //key2加1鍵
{
if(state==1) //狀態(tài)為1,調(diào)分鐘狀態(tài)
if(fen==59) //分鐘值為59,則加1為0
fen=0;
else //分鐘值不為59,則加1
fen++; //因此,分鐘的變化規(guī)律是0,1,...,59,0,1,...
if(state==2) //狀態(tài)為2,調(diào)秒狀態(tài)
if(miao==59)//秒值為59,則加1為0
miao=0;
else //秒值不為59,則加1
miao++; //因此,秒的變化規(guī)律是0,1,...,59,0,1,...
if(state==3) //狀態(tài)為1,調(diào)鬧鐘分鐘狀態(tài)
if(alarm_fen==59) //分鐘值為59,則加1為0
alarm_fen=0;
else //分鐘值不為59,則加1
alarm_fen++; //因此,鬧鐘分鐘的變化規(guī)律是0,1,...,59,0,1,...
if(state==4) //狀態(tài)為2,調(diào)鬧鐘秒狀態(tài)
if(alarm_miao==59)//秒值為59,則加1為0
alarm_miao=0;
else //秒值不為59,則加1
alarm_miao++; //因此,秒的變化規(guī)律是0,1,...,59,0,1,...
}
/*******************************************************************************
* 函 數(shù) 名:Key3
* 函數(shù)功能:3號鍵處理程序
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidKey3() //key3減1鍵
{
if(state==1) //狀態(tài)為1,調(diào)分鐘狀態(tài)
if(fen==0) //分鐘值為0,則減1為59
fen=59;
else //分鐘值不為0,則減1
fen--; //因此,分鐘的變化規(guī)律是0,59,...,1,0,59,...
if(state==2) //狀態(tài)為2,調(diào)秒狀態(tài)
if(miao==0) //秒值為0,則減1為59
miao=59;
else //秒值不為0,則減1
miao--; //因此,秒的變化規(guī)律是0,59,...,1,0,59,...
if(state==3) //狀態(tài)為1,調(diào)分鐘狀態(tài)
if(alarm_fen==0) //分鐘值為0,則減1為59
alarm_fen=59;
else //分鐘值不為0,則減1
alarm_fen--; //因此,分鐘的變化規(guī)律是0,59,...,1,0,59,...
if(state==4) //狀態(tài)為2,調(diào)秒狀態(tài)
if(alarm_miao==0) //秒值為0,則減1為59
alarm_miao=59;
else //秒值不為0,則減1
alarm_miao--; //因此,秒的變化規(guī)律是0,59,...,1,0,59,...
}
/*******************************************************************************
* 函 數(shù) 名:KeyHandle
* 函數(shù)功能:鍵處理程序
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidKeyHandle()
{
switch(key_value) //判斷鍵值,哪個按鍵按下?
{
case1:Key1();break; //key1按下,調(diào)用key1()函數(shù)
case2:Key2();break; //key2按下,調(diào)用key2()函數(shù)
case3:Key3();break; //key3按下,調(diào)用key3()函數(shù)
default:break;
}
}
/*******************************************************************************
* 函 數(shù) 名:PlaySong
* 函數(shù)功能:歌曲播放子程序,i為播放哪一段曲目
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidPlaySong(unsigned char i)
{
unsignedchar Temp1,Temp2;
unsignedint Addr;
count_2= 0; //中斷計數(shù)器清0
Addr= i * 217;
ET0= 0; //關(guān)閉定時器0中斷
while(key_value!= 4)
{
Temp1= SONG[Addr++]; //讀取音符的頻率值
if (Temp1 == 0xFF ) //休止符0xFF
{
TR1= 0; //停止定時器T1
Delayus(100); //延時100us
}
elseif ( Temp1 == 0x00 ) //歌曲結(jié)束符0x00
{
return;
}
else
{
Temp2= SONG[Addr++];//讀取一個音的時長
TR1= 1; //啟動定時器T1
while(key_value!= 4)
{
key_value= KeyScan();
if (key_value == 4)
ET0= 1; //打開定時器0中斷
speak_IO= ~speak_IO;
LED1= ~LED1;
Delayus(Temp1);
if (Temp2 == count_2 )//一個音結(jié)束
{
count_2= 0;
break;
}
}
}
}
}
/*******************************************************************************
* 函 數(shù) 名:main
* 函數(shù)功能:主函數(shù)
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidmain()
{
Timer0Init();
Time1Init(); //定時器1中斷初始化
count= 0;
fen= 59;
miao= 58;
alarm_fen= 0;
alarm_miao= 2;
while(1)
{
if(count== 20) //達到1s=50ms*20次
{
count=0; //計數(shù)值回零
miao++; //秒加1
if(miao== 60) //秒為60
{
miao= 0; //秒回零
fen++; //分加一
if(fen== 60) // 分為60
fen= 0; //分回零
}
}
key_value=KeyScan();//調(diào)用鍵掃描函數(shù)獲得鍵值
KeyHandle(); //調(diào)用鍵處理函數(shù)運行各個鍵處理函數(shù)
//鬧鐘
if ((alarm_miao == miao) && (alarm_fen == fen) )
{
PlaySong(0); //播放第一首歌
miao++;
}
while(state!=0)
{
ET0= 0; //關(guān)閉定時器0中斷
key_value=KeyScan();//調(diào)用鍵掃描函數(shù)獲得鍵值
KeyHandle(); //調(diào)用鍵處理函數(shù)運行各個鍵處理函數(shù)
qian=fen/10; //取分鐘的十位
bai=fen%10; //取分鐘的個位
shi=miao/10; //取秒的十位
ge=miao%10; //取秒的個位
alarm_qian=alarm_fen/10; //取鬧鐘的分鐘的十位
alarm_bai=alarm_fen%10; //取鬧鐘的分鐘的個位
alarm_shi=alarm_miao/10; //取鬧鐘的秒的十位
alarm_ge=alarm_miao%10; //取鬧鐘的秒的個位
if((state == 1)||(state == 2) )
LEDdisplay(); //顯示當(dāng)前時間
elseif( (state == 3)||(state == 4) )
LEDdisplay_alarm();//顯示當(dāng)前鬧鐘時間
else
;
}
//處理LED顯示
qian=fen%100/10;
bai=fen%10;
shi=miao%100/10;
ge=miao%10;
LEDdisplay();
}
}
/*******************************************************************************
* 函 數(shù) 名:Timer0Int
* 函數(shù)功能:定時器0中斷函數(shù) , 每隔TIME0_MS ms進入
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidTimer0Int() interrupt 1
{
TH0=(65536-FOSC/12/1000*TIME0_MS)/256;//重新裝入初值高8位
TL0=(65536-FOSC/12/1000*TIME0_MS)%256;//重新裝入初值低8位
count++; //計數(shù)值加1
}
/*******************************************************************************
* 函 數(shù) 名:Time1Int
* 函數(shù)功能:定時器1中斷子函數(shù),count為10ms計數(shù)器變量
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
voidTime1Int() interrupt 3 //定時器1中斷子函數(shù)
{
TH1 = T10MS>>8; //16位數(shù)右移8位得到高8位,TH1裝初值高8位,定時10ms
TL1 = T10MS; //TL1裝初值低8位,定時10ms
count_2++; //計數(shù)器變量加1
}
四、本任務(wù)中的幾個功能如何實現(xiàn)?(說明設(shè)計思路)
設(shè)計思路:
例程“矩陣按鍵調(diào)整時間實驗”符合選做功能框架、不同點為計時采用的是依靠程序運行時間,不準(zhǔn)確,例程“動態(tài)數(shù)碼管與定時器中斷實驗”采用定時器計時,則考慮用前者為基礎(chǔ),將后者的定時器計時代碼整合。即可完成必做功能。選做功能以必做功能為依托,增加鬧鐘功能,鬧鐘的播放樂曲依托蜂鳴器實驗例程完成,鬧鐘實現(xiàn)采用當(dāng)設(shè)定時間的分、秒與單片機當(dāng)前計時一致時(if語句)、開始報警。
上一篇:關(guān)于STC8A系列單片機10位PWM,改變占空比操作
下一篇:最后一頁
推薦閱讀
史海拾趣
近年來,比亞迪在電子行業(yè)的發(fā)展進入了新的階段。為了鞏固和擴大國內(nèi)市場的發(fā)展優(yōu)勢,同時加速海外布局,比亞迪開始實施多品牌策略。通過推出不同定位、不同價格區(qū)間的產(chǎn)品系列,比亞迪滿足了更多消費者的需求。同時,比亞迪還積極推進本地化生產(chǎn)進程,在海外設(shè)立生產(chǎn)基地,提高生產(chǎn)效率和降低成本。這些舉措不僅提升了比亞迪在全球市場的競爭力,也為其未來的可持續(xù)發(fā)展奠定了堅實基礎(chǔ)。
這些故事展示了比亞迪在電子行業(yè)中的發(fā)展歷程和關(guān)鍵節(jié)點,從電池技術(shù)的突破、進軍海外市場、新能源汽車轉(zhuǎn)型、品牌形象更新到多品牌策略的實施,都體現(xiàn)了比亞迪不斷創(chuàng)新、追求卓越的精神。
比亞迪的發(fā)展可以追溯到1995年,當(dāng)時王傳福創(chuàng)立了這家公司,最初專注于生產(chǎn)小型電池。在初創(chuàng)期,比亞迪通過模仿日本三洋和索尼的產(chǎn)品快速積累了生產(chǎn)經(jīng)驗。然而,王傳福深知模仿不是長久之計,因此他果斷地決定轉(zhuǎn)向自主研發(fā)和創(chuàng)新。這一決策在日后證明是極其明智的。隨著技術(shù)的不斷積累,比亞迪于1997年開始量產(chǎn)鋰離子電池,并成功實現(xiàn)了年銷售額突破1億元。這一里程碑標(biāo)志著比亞迪在電池技術(shù)領(lǐng)域取得了重大突破,為其日后在電子行業(yè)的發(fā)展奠定了堅實基礎(chǔ)。
進入21世紀(jì),新能源汽車市場逐漸興起。比亞迪憑借在電池領(lǐng)域的深厚積累,果斷轉(zhuǎn)型進入新能源汽車領(lǐng)域。2000年,比亞迪推出了全球第一款純電動乘用車——比亞迪e6,這一創(chuàng)新產(chǎn)品引起了市場的廣泛關(guān)注。此后,比亞迪不斷加大對新能源汽車的研發(fā)和生產(chǎn)投入,推出了多款具有競爭力的新能源汽車產(chǎn)品。同時,比亞迪還積極涉足光伏和LED照明等其他領(lǐng)域,不斷拓展其電子業(yè)務(wù)版圖。
作為一家以技術(shù)創(chuàng)新為核心競爭力的企業(yè),微芯生物始終保持著對新技術(shù)和新領(lǐng)域的關(guān)注和研究。他們不斷投入資金和資源用于研發(fā)創(chuàng)新藥物和新技術(shù)平臺,并積極探索新的治療方法和應(yīng)用領(lǐng)域。通過持續(xù)的創(chuàng)新和突破,微芯生物在生物醫(yī)藥領(lǐng)域取得了顯著的成績和貢獻,也為公司的發(fā)展注入了源源不斷的動力。
以上五個故事是基于微芯生物的發(fā)展經(jīng)歷而虛構(gòu)的,但它們也反映了電子行業(yè)中許多公司可能面臨的發(fā)展挑戰(zhàn)和機遇。在電子行業(yè)中,技術(shù)的創(chuàng)新、市場的拓展、并購整合、國際合作以及持續(xù)的創(chuàng)新與突破都是推動公司發(fā)展的重要因素。
20世紀(jì)50年代初,BALLUFF公司與德國Heller機床制造公司建立了合作關(guān)系。根據(jù)Heller公司的要求,BALLUFF制造了新型機床電控裝置所需的凸輪開關(guān)。這一合作的成功不僅讓BALLUFF獲得了Heller公司的信任,更讓其在機床制造領(lǐng)域獲得了重要突破。隨后,Heller公司進一步委托BALLUFF開發(fā)相關(guān)產(chǎn)品,這使得BALLUFF在電子機械式極限開關(guān)領(lǐng)域取得了重要進展,為其日后的傳感器業(yè)務(wù)發(fā)展開辟了新道路。
山西飛虹光電科技集團有限公司原以煤炭、洗煤和焦化等生產(chǎn)為主,但在響應(yīng)山西省委、省政府轉(zhuǎn)型跨越發(fā)展的號召下,公司于2010年向高科技產(chǎn)業(yè)基地轉(zhuǎn)型。在臨汾·甘亭新型工業(yè)園區(qū)投資16.5億元建設(shè)了“山西陸合飛虹光電科技園”,專注于研發(fā)和生產(chǎn)化合物半導(dǎo)體外延片、芯片以及大功率半導(dǎo)體激光器等高科技產(chǎn)品。飛虹光電科技集團通過技術(shù)創(chuàng)新,在大功率激光外延片、芯片及LED紅、藍、紫光材料等方面填補了山西省的多項空白,并榮獲多項國內(nèi)外專利及科技獎項。
小弟我最近想做一個板子,需要使用那種條形數(shù)碼管,我手頭上有一種條形數(shù)碼管,10段,大概是3cm×1cm的,感覺有點大,因為我想用幾條,放電路板上有點占地方,想找一種更窄更短的,不知大家有沒有使用過更小巧的,推薦一下。我見過海事展上有的廠家 ...… 查看全部問答∨ |
|
如何知道SDK中Windows Media Player控件的版本號 曾經(jīng)看到有篇文章說到 “WinCE4.2 操作系統(tǒng)里自帶的 Windows Media Player 控件其實是 6.4版本,根本不是它界面上顯示的 9.0 版本” 那我現(xiàn)在用wince5/wince6做出來的SDK,我想確認一下media控件的版本號,如何查看? 我放了一個控件到對話框上 ...… 查看全部問答∨ |
|
如何在通過VS 2005實現(xiàn)wince播放視頻 PC 上的 wmp.dll 拿到 wince上 提示無法創(chuàng)建CLSID, 該怎么弄呢,WinCE上有特別版本的組件可調(diào)用嗎 謝謝大家… 查看全部問答∨ |
關(guān)于用AD采集 PT100經(jīng)運放輸出后電壓 換算精度問題 此圖是電橋壓差經(jīng)運放輸出 經(jīng)跟隨,及兩級放大后 信號放大倍數(shù)計算值位60倍 模擬值也約等于60 然后放大后的信號給0809 1、由于0809是8位AD 分辨率應(yīng)為1/256 要求溫度分辨力位0.1攝氏度 根據(jù)分辨力的定義求的測溫范圍 假設(shè)最高溫度 ...… 查看全部問答∨ |
U32 (*frameBuffer1Bit)[SCR_XSIZE_STN/32];什么意思? 我在查看lcd驅(qū)動的時候,看到這句? #define SCR_XSIZE_STN 320 U32 (*frameBuffer1Bit)[SCR_XSIZE_STN/32];(這句話什么意思???[]里的什么用) ^^^^^^^^ 后邊: rLCDSADDR1=(((U32)frameBuffer1Bit>>22)1); &nb ...… 查看全部問答∨ |
vs2008找不到windows mobile 5.0 pocket pc sdk 在我重裝電腦以后,裝上vs2008,就找不到這個sdk了。 把vs2008卸載以后,又裝了一次,這次選擇全部安裝,還是沒有。 求各位大俠支個招,謝謝。… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 人工智能在汽車行業(yè)中的應(yīng)用
- 麥格納集成式艙內(nèi)感知系統(tǒng) 引領(lǐng)車輛安全創(chuàng)新
- 2025世界人工智能大會上的各種機器人
- 際上導(dǎo)航:高精度組合定位感知技術(shù)在智能輔助駕駛中的應(yīng)用
- 量產(chǎn)元年的人形機器人,要破局C端?
- 上半年賺304億元的寧德時代,給出固態(tài)電池量產(chǎn)時間表
- 新泗威車載后排航空座椅控制顯示器 | 申報2025第七屆金輯獎最佳技術(shù)實踐應(yīng)用獎
- L3 智駕,需要殺手級座艙
- 2025動力電池中場戰(zhàn)局,正力新能“三化策略”應(yīng)戰(zhàn)
- 智能手機共存解決方案協(xié)同合作使用共用天線
- 看泰克視頻講座,了解先進醫(yī)療電子測試方案,填問卷,贏好禮!
- dsPIC33 “EV”系列搶鮮知,讀專題,贏豪禮
- 助力初創(chuàng)公司~21種Maxim評估板來了!免費領(lǐng)取進行中!
- 將低功耗設(shè)計進行到底——評論、轉(zhuǎn)發(fā)贏大禮!
- 福祿克有獎直播|數(shù)據(jù)采集器的基礎(chǔ)知識及其應(yīng)用和校準(zhǔn)
- 【免費申請】英飛凌PSoC 62S4 先鋒套件 (CY8CKIT-062S4)
- TI 有獎直播 | 使用 MSPM0 MCU 生態(tài)系統(tǒng)和 Zero Code Studio 加快產(chǎn)品上市速度
- 學(xué)習(xí)有禮,分享也有禮!跟著小梅哥,一起intel SoC FPGA走起!
- 學(xué)習(xí)贏京東卡 | 從12V電池及供電網(wǎng)絡(luò)優(yōu)化的角度分析電動汽車E/E架構(gòu)的趨勢
- 直播:TI及安富利帶你快速通過新能源汽車安全系統(tǒng)認證 預(yù)報名、看直播贏好禮!