导航:首页 > 编程语言 > 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开发板系统程序相关的资料

热点内容
win10扫描的文件在哪里 浏览:615
pdf文件公章歪了怎么处理 浏览:322
java下载文件的路径 浏览:551
现在有哪些热门的软件编程 浏览:453
asp什么文件迅雷下载 浏览:381
巫妖王之怒升级路线 浏览:348
wps如何发送文件 浏览:359
网站怎么加流量 浏览:457
圣魔之光石破解版本 浏览:110
湖北文件柜多少钱一套 浏览:103
artlantis渲染器教程 浏览:679
360系统文件可以清理吗 浏览:256
extjsform样式 浏览:513
电信猫怎么设置wifi密码 浏览:785
p190文件用什么打开 浏览:252
怎么修改ps签署文件 浏览:847
怎么找到编程猫作品文件 浏览:647
铁路局的网站是多少 浏览:194
微信双号 浏览:926
招标文件中的净值是什么意思 浏览:675

友情链接