導航:首頁 > 編程語言 > 51ic開發板系統程序

51ic開發板系統程序

發布時間:2023-04-22 19:56:38

1. 想做一個51單片機開發板,該怎麼做呢求流程,,在大體講一下注意的問題

找個51單片機最小系統原理圖,買洞洞板,買電烙鐵,焊錫絲,鉗子,排針,排線,排母,其他元器件看原理圖裡面有什麼買什麼。
然後再找個RS232的51通信原理圖,這老掘樣才能從電腦上把程序凱含簡燒進單盯褲片機買MAX232晶元,RS232介面,RS232線,電容那些,照原理圖焊。
最後再看你要做什麼試驗,買相關元器件就行了,最好單片機P0口買個8排的排阻。

2. 51單片機燒寫程序通常需要哪些軟體怎樣燒寫

STC系列單片機為例:
首先,需要安裝keil軟體和STC_ISP程序下載軟體。
先對你想要實現對專單片機屬的功能用keil編程,然後用STC_ISP下載軟體下載到單片機上,最後打開給單片機提供電源就可以觀察單片機開發板或是自己搭建的板子上的現象了...通過不斷修改程序,下載程序,最終獲得自己在實驗板上想要的結果。這樣就可以了...
實驗板與PC機的連接:一般對現成購買的開發板來說,會有一個USB介面提供5v電源、提供通信或另一個USB用來下載介面驅動程序,同時有RS232串口,實現MAX232電平與單片機TTL電平之間轉換,用來進行通信下載程序和數據;;對自己搭建的電路板來說,仍會有MAX232晶元和RS232串口用來實現程序的燒寫,實現對單片機寫入數據和程序的下載。用的是RS232串口實現的程序燒寫!
若要用USB來燒寫,需要一個相應的ISP下載軟體和硬體燒寫器,一般這種燒寫器價格不菲。用的是USB口實現燒寫程序!
一般的,燒寫程序還是選用可以用ISP下載的,自己搭建個RS232串口的電路,簡單實用,對單片機燒寫程序就夠用了。

3. 如何在51單片機開發板上燒寫程序

淘寶搜索ISP燒錄線。
燒錄線一頭連接單片機上的某幾只腳,一頭連接電腦。
用軟體把你的程序轉換成hex格式的,然後用燒錄軟體通過下載線燒錄到單片機裡面。

買isp線的時候記得要看看支不支持你的單片機型號。

4. 51單片機開發板的使用!

單片機開發板市來面上源現在很多,對於初學者的話建議從51單片機學習板開始,這方面在開發板配套視頻做得好的有吳鑒鷹單片機學習板,金沙灘單片機學習板,板子質量性價比的話吳鑒鷹的,武大狼的不錯,作為學習者,首先要考慮的是板子的配套教程,然後是板子的性價比,學習學習板之前打好C語言,模電,數電的基礎,然後上手練習效果會很好,我這有些相關的學習資料你可以看下。學習單片機的過程需要多練習,多思考,持之以恆,相關的學習資料在51單片機吧,吳鑒鷹吧有很多,你也可以參考學習。希望可以幫到你!

5. 跪求一個51單片機開發板的電子琴程序

電子琴程序

信號發生器設計報告

電子琴程序

2009-08-30 13:47:34| 分類: 默認分類
| 標簽: |舉報 |字型大小大中小 訂閱

電子琴程序發送部分:

/*
本程序是用AD9851的DDS模塊做的電子琴,
電子琴的音符完整,共21個按鍵,分別是低1--7,中1--7,高1--7。本程序為雙機通信的發送部分,可以顯示頻率
*/
#include <REG51.H> //
單片機內部專用寄存器定義
/**************************************/
sbit K1= P1^0; //
鍵K1輸入引腳定義
sbit K2= P1^1; // 鍵K2輸入引腳定義
sbit K3= P1^2; //
鍵K3輸入引腳定義
sbit K4= P1^3; // 鍵K4輸入引腳定義
sbit K5= P1^4; //
鍵K5輸入引腳定義
sbit K6= P1^5; // 鍵K6輸入引腳定義
sbit K7= P1^6; //
鍵K7輸入引腳定義
sbit K8= P1^7; //
鍵K15輸入引腳定義
/**************************************/
sbit K9= P2^0; //
鍵K8輸入引腳定義
sbit K10= P2^1; // 鍵K9輸入引腳定義
sbit K11= P2^2; //
鍵K10輸入引腳定義
sbit K12= P2^3; // 鍵K11輸入引腳定義
sbit K13= P2^4; //
鍵K12輸入引腳定義
sbit K14= P2^5; // 鍵K13輸入引腳定義
sbit K15= P2^6; //
鍵K14輸入引腳定義
sbit K16= P2^7; //
鍵K16輸入引腳定義
/**************************************/
sbit K17= P3^2; //
鍵K17輸入引腳定義
sbit K18= P3^3; // 鍵K18輸入引腳定義
sbit K19= P3^4; //
鍵K19輸入引腳定義
sbit K20= P3^5; // 鍵K20輸入引腳定義
sbit K21= P3^7; // 鍵K21輸入引腳定義

/******************延時程序********************/
void delay(unsigned int
k)
{
unsigned int i,j;
for(i=0;i<k;i++){
for(j=0;j<121;j++)
{;}}
}
/*****************串口初始化程序*****************/
void
init
(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
}
/*****************串口發送程序*****************/
void chuan(shu)
{
SBUF=shu;
TI=0;
}

/******************主程序********************/
void main(void)
{

init();
while(1)
{
if(K1==0) chuan(1);
else if(K2==0)
chuan(2);
else if(K3==0) chuan(3);
else if(K4==0) chuan(4);
else
if(K5==0) chuan(5);
else if(K6==0) chuan(6);
else if(K7==0)
chuan(7);
else if(K8==0) chuan(8);
else if(K9==0) chuan(9);
else
if(K10==0) chuan(10);
else if(K11==0) chuan(11);
else if(K12==0)
chuan(12);
else if(K13==0) chuan(13);
else if(K13==0)
chuan(13);
else if(K14==0) chuan(14);
else if(K15==0)
chuan(15);
else if(K16==0) chuan(16);
else if(K17==0)
chuan(17);
else if(K18==0) chuan(18);
else if(K19==0)
chuan(19);
else if(K20==0) chuan(20);
else if(K21==0)
chuan(21);
else chuan(0);
}
}

電子琴接收部分:

/*
本程序是用AD9851的DDS模塊做的電子琴,
電子琴的音符完整,共21個音符,分別是低1--7,中1--7,高1--7。本程序為雙機通信的接受部分。有直接演奏方式,錄音演奏方式,錄音後放音方式
,可以顯示頻率 */
#include <STC12C5410AD.H>

#include<intrins.h>
#include <stdio.h> /* prototype
declarations for I/O functions */

#define uchar unsigned char
#define uint unsigned int

sbit
E_CLK =P2^6;//clock input 同步時鍾輸入端
sbit RW_SID
=P2^5;//data input/output 串列數據輸入、輸出端
sbit RS_DI
=P2^4; // 4號腳 jichunqi input
sbit DataIn_AD9851=P2^3;
//控制子串傳送位
sbit DDS_CLK=P2^2; //接外部晶振時鍾 這里為30M
sbit
DDS_FQUD=P2^1; //更新發送頻率
sbit RST_AD9851= P2^0; //復位

unsigned char Control_AD9851 = 0x01; // Phase0 ,power on mode and 6 REFCLK
Multiplier enable

/* T0_int 定時 時間常數 5ms=5000=1388H->EC78H f=12MH */
#define
time_5ms_H 0xC2 /* 定時時間為1/64s */
#define time_5ms_L 0xF7

char shu, bb;
unsigned char p=0;
unsigned char
point=0;
unsigned char recode_n=0;
unsigned char xdata
array[50]={0};
unsigned int xdata arrayt[50]={0};

float const
ton[]={0.00,261.63,293.67,329.63,349.23,391.99,440.00,494.00,

523.25,587.33,659.25,698.46,783.99,880.00,987.76,

1046.50,1174.66,1381.51,1396.92,1567.98,1760.00,1975.52};
unsigned int ttt,
nnn;
unsigned char mode=0;

sbit KEY_rec =P3^5;
sbit KEY_play=P3^7;
/*************************延時程序***************************/
void
delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{for(j=0;j<121;j++)
{;}}

}
/*************************串列發送一位元組數據***************************/

void SendByte(unsigned char dat)
{
unsigned
char i;
RS_DI=1;
for(i=0;i<8;i++)
{

E_CLK=0;
if(dat&0x80)RW_SID=1;
else RW_SID=0;

E_CLK=1;
dat=dat<<1;
}
}

/*************************寫控制命令***************************/
void
SendCMD(unsigned char dat)
{
SendByte(0xF8);//11111,00,0
RW=0,RS=0 同步標志
SendByte(dat&0xF0);//高四位

SendByte((dat&0x0F)<<4);//低四位
}
/************************寫顯示數據或單位元組字元 ****************************/

void SendDat(unsigned char dat)
{

SendByte(0xFA);//11111,01,0 RW=0,RS=1
SendByte(dat&0xF0);//高四位

SendByte((dat&0x0F)<<4);//低四位
}
/************************顯示字元串****************************/
void
hzkdis(unsigned char code *s)
{ while(*s>0)
{
SendDat(*s);
s++;
delay(5);
}
}

/************************顯示數據子程序****************************/
void
Display(unsigned char x_add,unsigned long date,unsigned char dot)
{

unsigned char date0,date1,date2,date3,date4,date5;//;

date5=(date%1000000)/100000;
date4=(date%100000)/10000;

date3=(date%10000)/1000;
date2=(date%1000)/100;

date1=(date%100)/10;
date0=date%10;
SendCMD(x_add);
if(dot==0x02) //100---9999.99
{

SendDat(0x30+date5);

SendDat(0x30+date4);
SendDat(0x30+date3);

SendDat(0x30+date2);
SendDat(0x2e);
SendDat(0x30+date1);

SendDat(0x30+date0);
SendDat(0x48);
SendDat(0x7a);

}

}
/*************************設置AD9851頻率***************************/
void
SentFreq(unsigned long int freq)
{
unsigned char i=0;
unsigned int
temp;
DDS_FQUD=0;
for(i=0;i<32;i++) //串口數據
輸入頻率控制字
{
DDS_CLK =
0;
temp=((freq>>i)&1);
DataIn_AD9851 = temp;
DDS_CLK =
1;
}

for(i=0;i<8;i++) //phase-b4 ph-b3 ph-b2 ph-b1 ph-b0 Power-down
Logic0* 6*REFCLK Multiplier_En
{
DDS_CLK = 0;

temp=((Control_AD9851>>i)&1);
DataIn_AD9851 = temp;

DDS_CLK = 1;
}
DDS_CLK = 0;
DDS_FQUD = 1;
DDS_FQUD =
0;

}

/**************************換算頻率,並輸出***********************/
void
Set_Freq(float Freqency)
{unsigned long int freq_temp;
freq_temp=
(unsigned long int)(23.861*Freqency); // SYSCLK = 180 MHz
2^32/180000000=23.861
SentFreq(freq_temp);
}
/*************************T0作定時器,T1作波特率發生器,初始化*************************/
void
init (void)
{
TMOD= 0x01; /* 0001$0001 T1 & T0 are 16bit
timers */
TH0 = time_5ms_H; /* T0 timer 5ms */
TL0 =
time_5ms_L;
/* TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 */

TCON= 0x10; /* 0 0 0 1 0 0 0 0 */

/* start T0 xint1 xint0 */
IE= 0x82; /* 1000 0010,
EA=ET0=1,
*/
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
ES=1;
EA=1;
}
/*************************設置AD9851初始化*************************/
void
AD9851Init(void) //DDS初始化函數,包括DDS復位和初始化為串列發送
{
DDS_CLK=0;

DDS_FQUD=0;
RST_AD9851=0;
RST_AD9851=1;//復位AD9851

RST_AD9851=1;
RST_AD9851=1;
RST_AD9851=0;
DDS_CLK=1;

DDS_CLK=0;
DDS_FQUD=1;

DDS_FQUD=0;
}
/**************************初始化LCM
**************************/
void initlcm(void)
{

delay(100);
SendCMD(0x30);//功能設置,一次送8位數據,基本指令集

SendCMD(0x0C);//0000,1100 整體顯示,游標off,游標位置off
SendCMD(0x14);

SendCMD(0x01);//0000,0001 清DDRAM 即清屏

SendCMD(0x02);//0000,0010 DDRAM地址歸位
SendCMD(0x80);//1000,0000
設定DDRAM 7位地址000,0000到地址計數器AC

//SendCMD(0xb8|page);翻頁
}
/**********************主程序******************************/
void
main(void)
{
uchar t;

init();
AD9851Init();
initlcm(); //12864初始化程序
shu=0;

bb=255;
while(1)
{
switch(mode)
{
case 0: //
演奏方式

SendCMD(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一個位置顯示)
hzkdis("
音樂播放頻率:");
if (shu!=bb)
{

Set_Freq(ton[shu]);
Display(0x93,(unsigned
long)100*ton[shu],0x02);
bb=shu;
}
if
(KEY_rec==0)
{
mode=1;

point=0;

recode_n=0;
shu=0;

bb=255;
nnn=0;

}
else if (KEY_play==0)
{

mode=2;
p=1;
}
break;
case
1: // 錄音方式
// SendCMD(0x01);//0000,0001 清DDRAM 即清屏
//
delay(10);

SendCMD(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一個位置顯示)
hzkdis("
音樂錄制頻率:");
if (shu!=bb)
{

arrayt[point]=nnn; // 記錄上一音階時間

Set_Freq(ton[shu]);
Display(0x93,(unsigned long)100*ton[shu],0x02);

nnn=0;
bb=shu;
recode_n++;
}
if ((recode_n>=50) || (KEY_play==0))
//停止錄音
{
Set_Freq(0.0);
p=0;

mode=0;
shu=0;

bb=20;
}
break;
case 2: //
放音方式

SendCMD(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一個位置顯示)
hzkdis("
音樂重播頻率:");
for(t=0;t< recode_n;t++)
{

Set_Freq(ton[array[p]]);
Display(0x93,(unsigned
long)*ton[array[p]],0x02);
ttt=arrayt[p];
while
(ttt);
delay(100);
p++;
}
if
(p>recode_n)
{
Set_Freq(0.0);

p=0;
mode=0;

shu=0;
bb=20;
}

break;
}
}
}

//*==================================*/
/* 串口中斷接收
*/
/*==================================*/
void s_receive() interrupt 4
//串列中斷
{
if(RI==1) //接收中斷標志位
{

RI=0; //中斷標志清零
shu=SBUF; //RXData賦值
}
else
TI=0;
}

6. 怎麼用51開發板向自己做的最小系統里下程序

用串口晶元Max232轉換後直接接到單片機上就行了,一般四根線:正極、負極、R、T,注意電腦的專R接單片機的T,電屬腦的T接單片機的R,也就是RS232轉接後的R接單片機T,RS232的T接單片機R ,具體電路圖見RS232的晶元手冊。更簡單的是:直接買一個USB轉TTL,接法相同,R接T,T接R。注意波特率調整,如果經常出現下載失敗可以調低波特率試試。不知道你用的是哪款燒程序的軟體,具體軟體具體討論,但是差別不大。怎麼樣,這么詳細不給分,你都對不起我了!有問題再站內信

7. 51單片機開發板 怎麼編程,是不是還需要一個燒錄器

這只是個最小系統板,要燒寫程序可以從ISP介面,STC的可以直接從P3.0、P3.1串口燒寫。回除了這個你是需答要一個燒錄器,也就是下載線,可以自己做,AT的用341,STC的用2303就可以了,電路網上有成熟的。也可以淘寶買。

8. 51單片機開發板和絕對式編碼器連接測量角度的程序

#include <reg52.h>
#include "inc/delay.h"
#include "inc/hc595.h"

#define uchar unsigned char
#define uint unsigned int
sbit PIN_ROTARY_A = P2^0; //引腳1介面
sbit PIN_ROTARY_B = P2^1; //引腳2介面
sbit PIN_ROTARY_C = P2^2; //按下的介面

sbit PIN_ROTARY_D = P2^3; //按下的介面

//uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
/* 存儲待發送的數據 */
/* 1->8的段碼表 */
code unsigned char ucDis_Segmentcode[16] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/* 位碼表 */
code unsigned char ucDis_Bitcode[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
uchar dis_XS[8] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d};
uchar count = 0;
uchar flag;
uchar Last_BMB_status;

uchar Current_BMB_status;

void display()
{
uchar i;

dis_XS[0] = ucDis_Segmentcode[count/100]; //百位

dis_XS[1] = ucDis_Segmentcode[count%100/10]; //十位

dis_XS[2] = ucDis_Segmentcode[count%10]; //個位

if(i < 2)
{
i++;
}
else
{
i = 0;
}

// for (i = 0; i < 3; i++ )
{
Send_Data(dis_XS[i], ucDis_Bitcode[i]);
//PIN_ROTARY_D = 0;
// Delay1ms(1);
}
}

//************************************************
void main()
{

TMOD=0x01; //定時器0,工作方式1
TH0=0xD8;
TL0=0xF0; //給定時器裝上初值,10ms中斷一次
ET0=1; //打開定時器中斷
EA =1; //打開總中斷
TR0=1; //啟動定時器0

while(1)
{
//display();
Last_BMB_status=PIN_ROTARY_B;

while(!PIN_ROTARY_A) //BMA為低電平時
{
Current_BMB_status = PIN_ROTARY_B;
flag = 1; //標志位置為1說明編碼開關被旋轉了
}

if(flag == 1)
{
flag = 0; //時刻要注意這一點!給標志位清零
if((Last_BMB_status == 0)&&(Current_BMB_status == 1)) //BMB上升沿表示正轉
{
count++;
if(count == 255)
{
count = 0;
}
}
if((Last_BMB_status == 1)&&(Current_BMB_status == 0)) //BMB下降沿表示反轉
{
count--;
if(count == 0)
{
count = 255;
}
}
}
}
}

//***********************************************
void timer0() interrupt 1//定時器0的中斷服務程序
{
TH0=0xF8; // TH0=0xD8;
TL0=0xF0; //再次裝入初值
display(); //每隔10ms顯示一次
if(!PIN_ROTARY_C) //按下旋轉編碼開關則計數清零
{
count = 0;
}
PIN_ROTARY_D = !PIN_ROTARY_D;
}

閱讀全文

與51ic開發板系統程序相關的資料

熱點內容
網路中常用的傳輸介質 瀏覽:518
文件如何使用 瀏覽:322
同步推密碼找回 瀏覽:865
樂高怎麼才能用電腦編程序 瀏覽:65
本機qq文件為什麼找不到 瀏覽:264
安卓qq空間免升級 瀏覽:490
linux如何刪除模塊驅動程序 瀏覽:193
at89c51c程序 瀏覽:329
怎麼創建word大綱文件 瀏覽:622
裊裊朗誦文件生成器 瀏覽:626
1054件文件是多少gb 瀏覽:371
高州禁養區內能養豬多少頭的文件 瀏覽:927
win8ico文件 瀏覽:949
仁和數控怎麼編程 瀏覽:381
項目文件夾圖片 瀏覽:87
怎麼在東芝電視安裝app 瀏覽:954
plc顯示數字怎麼編程 瀏覽:439
如何辨別假網站 瀏覽:711
寬頻用別人的賬號密碼 瀏覽:556
新app如何佔有市場 瀏覽:42

友情鏈接