新概念51单片机C语言教程例题.docx
- 文档编号:4667459
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:24
- 大小:19.03KB
新概念51单片机C语言教程例题.docx
《新概念51单片机C语言教程例题.docx》由会员分享,可在线阅读,更多相关《新概念51单片机C语言教程例题.docx(24页珍藏版)》请在冰豆网上搜索。
新概念51单片机C语言教程例题
ModificationaccordingtoDataSheetfromApril1999
-SFR'sAUXRandAUXR1addedfor80C51Rx+derivatives
--------------------------------------------------------------------------*/
/*BYTERegisters*/
sfrP0=0x80;
sfrP1=0x90;
sfrP2=0xA0;
sfrP3=0xB0;
sfrPSW=0xD0;
sfrACC=0xE0;
sfrB=0xF0;
sfrSP=0x81;
sfrDPL=0x82;
sfrDPH=0x83;
sfrPCON=0x87;
sfrTCON=0x88;
sfrTMOD=0x89;
sfrTL0=0x8A;
sfrTL1=0x8B;
sfrTH0=0x8C;
sfrTH1=0x8D;
sfrIE=0xA8;
sfrIP=0xB8;
sfrSCON=0x98;
sfrSBUF=0x99;
/*80C51Fx/RxExtensions*/
sfrAUXR=0x8E;
/*sfrAUXR1=0xA2;*/
sfrSADDR=0xA9;
sfrIPH=0xB7;
sfrSADEN=0xB9;
sfrT2CON=0xC8;
sfrT2MOD=0xC9;
sfrRCAP2L=0xCA;
sfrRCAP2H=0xCB;
sfrTL2=0xCC;
sfrTH2=0xCD;
/*BITRegisters*/
/*PSW*/
sbitCY=PSW^7;
sbitAC=PSW^6;
sbitF0=PSW^5;
sbitRS1=PSW^4;
sbitRS0=PSW^3;
sbitOV=PSW^2;
sbitP=PSW^0;
/*TCON*/
sbitTF1=TCON^7;
sbitTR1=TCON^6;
sbitTF0=TCON^5;
sbitTR0=TCON^4;
sbitIE1=TCON^3;
sbitIT1=TCON^2;
sbitIE0=TCON^1;
sbitIT0=TCON^0;
/*P3*/
sbitRD=P3^7;
sbitWR=P3^6;
sbitT1=P3^5;
sbitT0=P3^4;
sbitINT1=P3^3;
sbitINT0=P3^2;
sbitTXD=P3^1;
sbitRXD=P3^0;
/*SCON*/
sbitSM0=SCON^7;#include<>Allrightsreserved.
ModificationaccordingtoDataSheetfromApril1999
-SFR'sAUXRandAUXR1addedfor80C51Rx+derivatives
--------------------------------------------------------------------------*/
/*BYTERegisters*/
sfrP0=0x80;
sfrP1=0x90;
sfrP2=0xA0;
sfrP3=0xB0;
sfrPSW=0xD0;
sfrACC=0xE0;
sfrB=0xF0;
sfrSP=0x81;
sfrDPL=0x82;
sfrDPH=0x83;
sfrPCON=0x87;
sfrTCON=0x88;
sfrTMOD=0x89;
sfrTL0=0x8A;
sfrTL1=0x8B;
sfrTH0=0x8C;
sfrTH1=0x8D;
sfrIE=0xA8;
sfrIP=0xB8;
sfrSCON=0x98;
sfrSBUF=0x99;
/*80C51Fx/RxExtensions*/
sfrAUXR=0x8E;
/*sfrAUXR1=0xA2;*/
sfrSADDR=0xA9;
sfrIPH=0xB7;
sfrSADEN=0xB9;
sfrT2CON=0xC8;
sfrT2MOD=0xC9;
sfrRCAP2L=0xCA;
sfrRCAP2H=0xCB;
sfrTL2=0xCC;
sfrTH2=0xCD;
/*BITRegisters*/
/*PSW*/
sbitCY=PSW^7;
sbitAC=PSW^6;
sbitF0=PSW^5;
sbitRS1=PSW^4;
sbitRS0=PSW^3;
sbitOV=PSW^2;
sbitP=PSW^0;
/*TCON*/
sbitTF1=TCON^7;
sbitTR1=TCON^6;
sbitTF0=TCON^5;
sbitTR0=TCON^4;
sbitIE1=TCON^3;
sbitIT1=TCON^2;
sbitIE0=TCON^1;
sbitIT0=TCON^0;
/*P3*/
sbitRD=P3^7;
sbitWR=P3^6;
sbitT1=P3^5;
sbitT0=P3^4;
sbitINT1=P3^3;
sbitINT0=P3^2;
sbitTXD=P3^1;
sbitRXD=P3^0;
/*SCON*/
sbitSM0=SCON^7;//alternatively"FE"
sbitFE=SCON^7;
sbitSM1=SCON^6;
sbitSM2=SCON^5;
sbitREN=SCON^4;
sbitTB8=SCON^3;
sbitRB8=SCON^2;
sbitTI=SCON^1;
sbitRI=SCON^0;
sbitT2EX=P1^1;
sbitT2=P1^0;
/*T2CON*/
sbitTF2=T2CON^7;
sbitEXF2=T2CON^6;
sbitRCLK=T2CON^5;
sbitTCLK=T2CON^4;
sbitEXEN2=T2CON^3;
sbitTR2=T2CON^2;
sbitC_T2=T2CON^1;
sbitCP_RL2=T2CON^0;
/*PCAPin*/
sbitCEX3=P2^4;
sbitCEX2=P2^0;
sbitCEX1=P3^5;
sbitCEX0=P3^7;
sbitECI=P3^4;
/*IE*/
sbitEA=IE^7;
sbitEPCA_LVD=IE^6;
sbitEADC_SPI=IE^5;
sbitES=IE^4;
sbitET1=IE^3;
sbitEX1=IE^2;
sbitET0=IE^1;
sbitEX0=IE^0;
/*IP*/
sbitPPCA_LVD=IP^6;
sbitPADC_SPI=IP^5;
sbitPS=IP^4;
sbitPT1=IP^3;
sbitPX1=IP^2;
sbitPT0=IP^1;
sbitPX0=IP^0;
ISD400x系列语音芯片C语言参考程序:
(P425)
#include<>
#include<>
sbitcs_4004=P0^0;
sbitsclk_4004=P0^3;
sbitmosi_4004=P0^1;
sbitmiso_4004=P0^2;
sbitrac_4004=P0^4;
sbitint_4004=P0^5;
voiddelay(unsignedinti)//延时程序
{
while(i--);
}
voidstopmode()//停止
{
unsignedcharm,i,j;
cs_4004=1;
sclk_4004=0;
cs_4004=0;
m=0x30;
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
mosi_4004=CY;
sclk_4004=0;
sclk_4004=1;
}
cs_4004=1;
}
voidpowerdown()//下电
{
unsignedcharm,i,j;
cs_4004=1;
sclk_4004=0;
cs_4004=0;
m=0x10;
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
mosi_4004=CY;
sclk_4004=0;
sclk_4004=1;
}
cs_4004=1;
}
voidpowerup()//上电
{
unsignedcharm,i,j;
cs_4004=1;
sclk_4004=0;
cs_4004=0;
m=0x20;
for(i=0;i<8;i)
{
m=_cror_(m,1);
j=m<<1;
mosi_4004=CY;
sclk_4004=0;
sclk_4004=1;
}
cs_4004=1;
}
voidrecord4004(unsignedintaddress)
{//录音address--录音地址0---2400
unsignedchari,m,j;
unsignedintdatasoute=0;
powerup();
delay(5118);//上电延时
powerup();
delay(5118);//上电延时
delay(5118);//上电延时
cs_4004=1;
sclk_4004=0;
m=0xa0;
cs_4004=0;
for(i=0;i<16;i++)
{
address=_iror_(address,1);
datasoute=address<<1;
mosi_4004=CY;
sclk_4004=0;
sclk_4004=1;
}
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
mosi_4004=CY;
sclk_4004=0;
sclk_4004=1;
}
cs_4004=1;
sclk_4004=0;
m=0xb0;
cs_4004=0;
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
mosi_4004=CY;
sclk_4004=0;
sclk_4004=1;
}
cs_4004=1;
P0=0xff;
datasoute=0;
while(int_4004==1)//存储地址换行标志
{
if(rac_4004)//记录本次录音所占的行数(也就是本次录音有多大)
{
delay(20000);
datasoute++;
}
//在这里应该加上自己的程序,就是录音退出程序
}
}//whileend;
voidaudioout(unsignedintaddress)//放音程序
{
unsignedchari,m,j;
unsignedintdatasoute;
powerup();
cs_4004=1;
sclk_4004=0;
cs_4004=0;
m=0xe0;
for(i=0;i<16;i++)
{
address=_iror_(address,1);
datasoute=address<<1;
sclk_4004=0;
mosi_4004=CY;
sclk_4004=1;
}
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
sclk_4004=0;
mosi_4004=CY;
sclk_4004=1;
}
cs_4004=1;
sclk_4004=0;
m=0xf0;
cs_4004=0;
for(i=0;i<8;i)
{
m=_cror_(m,1);
j=m<<1;
sclk_4004=0;
mosi_4004=CY;
sclk_4004=1;
}
cs_4004=1;
P0=0xff;
while(int_4004==1)
{
}
}
voidmain()
{
record4004(0);
audioout(0);
while
(1);
}
例使用TX-1C实验板上两个独立按键调节直流电机的转速,同时在实验板的数码管上象征性的显示相应的转速值。
通过控制单片机输出不同占空比的PWM信号来控制直流电机的转速(感性认识)。
(P434)
#include<>
#defineucharunsignedchar
sbitdula=P2^6;//数码管显示段选I/O口定义
sbitwela=P2^7;//数码管显示段选I/O口定义
sbitdianji=P1^7;//控制电机I/O口定义
sbitjia_key=P3^6;//加速键
sbitjian_key=P3^7;//减速键
ucharnum=0,show_num=1,gao_num=1,di_num=3;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelay(uchari)//延时函数
{
ucharj,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
voiddisplay()//数码管显示函数
{
dula=0;
P0=table[show_num];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[0];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
P0=table[0];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(5);
P0=table[0];
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(5);
}
voidkey()//按键检测处理函数
{
if(jia_key==0)
{
delay(5);//消抖
if(jia_key==0)
{
num++;//加速键按下,速度标志加1
if(num==4)
num=3;//已经达到最大3,则保持
while(jia_key==0);//等待按键松开
}
}
if(jian_key==0)
{
delay(5);
if(jian_key==0)
{
if(num!
=0)//减速键按下,速度标志减1
num--;
else
num=0;//已经达到最小0,则保持
while(jian_key==0);
}
}
}
voiddispose()//根据速度标志进行数据处理
{
switch(num)
{
case0:
show_num=1;//数码管第一位显示的数据
gao_num=1;//PWM信号中高电平持续时间标志为1
di_num=3;//PWM信号中低电平持续时间标志为3,此时速度最慢
break;
case1:
show_num=2;
gao_num=2;
di_num=2;
break;
case2:
show_num=3;
gao_num=3;
di_num=1;
break;
case3:
show_num=4;
gao_num=4;
di_num=0;//此时速度最快
break;
}
}
voidqudong()//控制电机程序
{
uchari;
if(di_num!
=0)
{
for(i=0;i { dianji=0;//实现PWM信号低电平输出 display();//利用显示函数起延时作用,这样也不影响数码管显示,一举两得 } } for(i=0;i { dianji=1;//实现PWM信号高电平输出 display(); } } voidmain() { while (1) { dianji=0; key(); dispose(); qudong(); } } 例步进电机应用C语言程序设计(P444) #include<> #defineucharunsignedchar sbitdula=P2^6;//数码管显示段选I/O口定义 sbitwela=P2^7;//数码管显示位选I/O口定义 sbitjia_key=P3^6;//电机加速I/O口定义 sbitjian_key=P3^7;//电机减速I/O口定义 sbitzf_key=P3^5;//电机正反转I/O定义 bitflag=0;//电机正反转标志位 ucharnum=0,show_num=2,maichong=4,table_begin=0; ucharcodetable1[]={0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01}; //ucharcodetable1[]={0x09,0x03,0x06,0x0c,0x08,0x04,0x02,0x01}; //ucharcodetable1[]={0x01,0x04,0x02,0x08,0x08,0x02,0x04,0x01}; ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; voiddelay(uchari)//延时函数 { ucharj,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } voiddisplay()//显示函数 { dula=0; P0=table[show_num]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=table[0]; dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(5); } voidkey()//按键检测处理函数 { if(jia_key==0) { delay(5);//加速键按下,消抖 if(jia_key==0) { num++;//速度标示加1 if(num==4) num=3;//达到最大3则保持 while(jia_key==0);//等待松开按键 } } if(jian_key==0) { delay(5);//减速键按下 if(jian_key==0) { if(num! =0) num--;//速度标示减1 else num=0;//达到最小0则保持 while(jian_key==0); } } if(zf_key==0) { delay(5);//正反转按键按下 if(zf_key==0) { flag=~flag;//正反转标识取反 while(zf_key==0); } } } voiddispose()//根据速度标识进行数据处理 { switch(num) { case0: show_num=2;//数码管第一位显示的数字 maichong=5;//利用maichong数据控制送给电机脉冲的频率,控制速度 break; case1: show_num=4; maichong=4; break; case2: show_num=6; maichong=3; break; case3: show_num=8; maichong=2; break; } if(flag==0) { table_begin=0;//flag为0,正转 } else table_begin=4;//flag为1,反转 } voidqudong()//电机速度,和正反转控制 { uchari,j; for(j=0+table_begin;j<4+table_begin;j++) { P1=table1[j];//读取控制电机转动I/O口表 for(i=0;i { display();//利用显示函数起延时作用,控制电机速度 }//这样也不影响数码管显示,一举两得 } } voidmain() { while (1) { key(); dispose(); qudong(); } } 例舵机应用C语言程序设计实例: 开机时舵机角度自动转为0度,通过实验板上的独立按键调节舵机的角度
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新概念 51 单片机 语言 教程 例题