郭天祥新概念51单片机C语言教程例题.docx

上传人:b****2 文档编号:2854518 上传时间:2023-05-04 格式:DOCX 页数:27 大小:18.85KB
下载 相关 举报
郭天祥新概念51单片机C语言教程例题.docx_第1页
第1页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第2页
第2页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第3页
第3页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第4页
第4页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第5页
第5页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第6页
第6页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第7页
第7页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第8页
第8页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第9页
第9页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第10页
第10页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第11页
第11页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第12页
第12页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第13页
第13页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第14页
第14页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第15页
第15页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第16页
第16页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第17页
第17页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第18页
第18页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第19页
第19页 / 共27页
郭天祥新概念51单片机C语言教程例题.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

郭天祥新概念51单片机C语言教程例题.docx

《郭天祥新概念51单片机C语言教程例题.docx》由会员分享,可在线阅读,更多相关《郭天祥新概念51单片机C语言教程例题.docx(27页珍藏版)》请在冰点文库上搜索。

郭天祥新概念51单片机C语言教程例题.docx

郭天祥新概念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度,通过实验板上的独立按键

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2