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

上传人:b****5 文档编号:11654140 上传时间:2023-03-29 格式:DOCX 页数:28 大小:365.71KB
下载 相关 举报
新概念51单片机C语言教程例题.docx_第1页
第1页 / 共28页
新概念51单片机C语言教程例题.docx_第2页
第2页 / 共28页
新概念51单片机C语言教程例题.docx_第3页
第3页 / 共28页
新概念51单片机C语言教程例题.docx_第4页
第4页 / 共28页
新概念51单片机C语言教程例题.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

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

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

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

新概念51单片机C语言教程例题

例利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序

P42)

错误!

未定义书签。

例编写程序使第一个发光二极管以间隔500ms亮灭闪动。

(P48)错误!

未定义书签。

例编写程序使第一个二极管以亮200ms灭800ms的方式闪动。

P49)错误味定义书签。

例利用C51自带库_crol_(),以间隔500ms实现流水灯程序(P53)错误!

定义书签。

例利用定时器0工作方式1,在实验板上实现第一个发光管以1s亮灭闪烁。

例用定时器0的方式1实现个第一发光二极管以200ms间隔闪烁,用定时器1

按下S2键一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次,数

值归零;按下S5键一次,利用定时器功能使数值开始自动每秒加1,再次按下

错误!

未定义书签。

S5键,数值停止加1,保持显示原数。

(P82)

例实验班上电时,数码管不显示,顺序按下矩阵键盘后,数码管上依次显示

例用单片机控制ADC08044行数模转换,当拧动实验板上A/D旁边的电位时,

错误!

未定义书签。

在数码管的前三位以十进制方式显示出A/D转换后的数字量(8位A/D转换后数

值在0~255变化)。

(P107)

例用单片机控制DAC0832芯片输出电流,让发光二级管D12由灭均匀变到最亮,

再由最亮均匀熄灭。

在最亮和最暗时使用蜂鸣器分别警报一声,完成整个周期时

例在上位机上用串口调试助手发送一个字符X,单片机收到字符后返回给上位

机“IgetX”,串口波特率设为9600bps。

(P137)....错误味定义书签。

例单片机上电后等待从上位机串口发来的命令,同时在数码管的前三位以十进

制方式显示A/D采集的数值,在未收到上位机发送来的启动A/D转换命令之前数码管始终显示000。

当收到上位机以十六进制发送来的01后,向上位机发送字符串“Turnonad!

”同时间隔1s读取一次A/D的值,然后把A/D采集回来的8位二进制转换成十进制表示的实际电压浮点数,并且从串口发送给上位机,形式如“Thevoltageis”,发送周期也是一秒一次,同时在数码管上也要每秒刷新现实的数值。

当收到上位机以十六进制发送过来的02后,向上位机发送字符

串“Turnoffad!

”,然后停止发送电压值,数码管上显示上次结束时保持的值。

当收到上位机发来的其他任何数时,

向上位机发送字符串“Error!

”。

错误!

定义书签。

义书签。

Welcometohere!

”,移入速度自定,然后停留在屏幕上。

(P154)错误!

未定义书签。

例实现12232液晶的第一行显示“ILOVEMCU”!

,第二行显示“我爱单片机”。

P160)

错误!

未定义书签。

例实现12232液晶第一行从右侧移入“Helloeveryone!

”,同时第二行从右侧

移入“欢迎大家来学习!

”移入速度自定,最后停留在屏幕上。

(P163)错误!

未定义书签。

例实现在12864液晶上第一行显示“09”,并且让每一位数字随机变化,第二行

显示“,第三行显示“天祥电子”,第四行对应第三行显示出下划线。

(P173)

错误!

未定义书签。

将这个变化的数写入板上AT24C02内部。

当关闭实验板电源,并再次打开实验板

电源时,单片机先从AT24C02中将原来写入的数读取出来,接着此数继续变化并

例利用定时器0工作方式0,在实验板上实现第一个发光管以1s亮灭闪烁。

例利用定时器0工作方式2,在实验板上实现第一个发光管以1s亮灭闪烁。

实现第一个发光管以1s亮灭闪烁,用TH0计数器对应的8位定时器实现第二个

例利用计数器0工作方式1,在实验板上实现:

用一根导线一端连接GND引脚,

另一端去接触T0引脚,每接触一下,计数器计一次数,将所计的数值实时显示在数码管的前两位,计满100时清0,再从头计起。

(P214)错误!

未定义书签。

例设置单片机串行口的工作模式0,间隔循环发送十六进制数0xAA,然后用双

例用交叉串口线连接两块实验板,或直接用短线交叉线连接连个单片机的和口

共地)。

在一块板上编写矩阵键盘扫描程序,当扫描到有键按下时,将键值通

过串口发送出去,另一块板上单片机收到串口发送来的键值后,将对应键值以

例编写程序实现:

开启两个外部中断,设置低电平触发中断,用定时器计数并

且显示在数码管的前两位,当计数到5时,使单片机进入空闲(休眠)模式,同

时关闭定时器,当单片机响应外部中断后,从空闲(休眠)模式返回,同时开启

定时器。

错误!

未定义书签。

例实验板上实现如下描述:

程序启动后设定看门狗溢出时间为2s,然后点亮第

一个发光二极管,稍延时一会,然后熄灭发光二极管,使程序进入等待死循环状态,并且在死循环中大约每隔1s喂狗一次,看程序运行是否正常。

错误!

未定义书签。

例在实验板上实现:

操作STC单片机自带的E2PROMf储一组按秒递增的两位

数据,并且将数据实时显示在数码管上,数据每变化一次就往E2PRO中写入一

次,当关闭实验板电源并再次开启电源时,从E2PRO中读取先前存储的数据,

接着递增显示。

错误!

未定义书签。

例系列单片机的A/D转换功能。

时钟,转换结果以16进制形式输出到串行口,

可以用串行口调试程序,观察输出结果(本代码摘自宏晶科技芯片手册,经作者

错误!

未定义书签。

调试可正常运行)。

例给出一个STC12C5412A应用的参考程序。

(P287)..错误味定义书签。

程序使用TX-1C实验板上的DS18B20温度传感器设计温控系统C语言源代码

P349)

错误!

未定义书签。

例使用TX-1C实验板上两个独立按键调节直流电机的转速,同时在实验板的数

错误!

未定义书签。

码管上象征性的显示相应的转速值。

通过控制单片机输出不同占空比的PWMl!

来控制直流电机的转速(感性认识)。

(P434)

例舵机应用C语言程序设计实例:

开机时舵机角度自动转为0度,通过实验板

上的独立按键调节舵机的角度转动,并且在实验板数码管上显示相应的角度。

错误!

未定义书签。

例仅演示5个角度的控制,若想实现任意角度控制请大家自行编程实验。

程序代码如下:

(P453)

错误!

未指定书签。

错误!

未指定书签。

错误!

未指定书签。

Allrightsreserved.

ModificationaccordingtoDataSheetfromApril1999-SFR'sAUXRandAUXR1addedfor80C51RX+derivatives

*//*BYTERegisters*/

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;

sfrSADEN=0xB9;

sfrT2MOD=0xC9;

sfrRCAP2L=0xCA;

sfrRCAP2H=0xCB;

sfrTL2=0xCC;

sfrTH2=0xCD;

/*BITRegisters*//*PSW*/sbitCY=PSWT;sbitAC=PSWysbitF0=PSWysbitRS1=PSWM;

sbitRS0=PSW^3;

sbitOV=PSW^2;

sbitP=PSWS;

/*TCON*/

sbitTF1

=TCONA7;

sbitTR1

=TCONW;

sbitTF0

=TCONp

sbitTR0

=TCONM;

sbitIE1

=TCONA3;

sbitIT1

=TCON^2;

sbitIE0

=TCONM;

sbitIT0

=TCONP;

 

sbitWR=P3八6;

sbitT1=P3八5;

sbitTO=P3八4;

sbitINT1=P3八3;

sbitINTO=P3八2;

sbitSMO

=SCONA7;#includeoAIIrightsreserved.

ModificationaccordingtoDataSheetfromApril1999-SFR'sAUXRandAUXR1addedfor8OC51Rx+derivatives

*/

/*BYTERegisters*/

sfrPSW=OxDO;

sfrACC=OxEO;

sfrB=OxFO;

sfrSP=Ox81;

sfrPCON=Ox87;

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*/

sbitAC=PSWysbitF0=PSWysbitRS1=PSWM;

sbitRS0=PSW^3;

sbitOV=PSW^2;

sbitP=PSWS;

/*TCON*/

sbitTF1

=TCONA7;

sbitTR1

=TCONW;

sbitTF0

=TCONp

sbitTR0

=TCONM;

sbitIE1

=TCONA3;

sbitIT1

=TCON^2;

sbitIE0

=TCONM;

sbitIT0

=TCONP;

 

 

/*P3*/

sbitRD

=P3八7;

sbitWR

=P3八6;

sbitT1

=P3八5;

sbitT0

=P3八4;

sbitINT1=P3八3;

sbitINTO=P3八2;

sbitTXD=P3";

sbitRXD=P39

sbitSMO=SCONA7;//alternatively"FE"

sbitFE=SCONA7;

sbitTI=SCON";

sbitRI=SCONS;

sbitT2EX=PMl;

sbitT2=P19

/*T2CON*/sbitTF2=T2CONA7;

sbitEXF2=T2CONA6;

sbitRCLK=T2CONA5;

sbitTCLK=T2CONA4;

sbitEXEN2=T2CON^3;

sbitTR2=T2CONA2;

sbitC_T2=T2CONA1;

sbitCP_RL2=T2CONAO;

/*PCAPin*/sbitCEX3=P2八4;

sbitCEX1=P3八5;

sbitCEXO=P3八7;

sbitECI=P3八4;

/*IE*/sbitEA=IE^7;

sbitEPCA_LVD=06;

sbitEADC_SPI=05;

sbitES=04;

sbitET1

=03;

sbitEX1

=02;

sbitETO

=IE";

sbitEXO

=00;

 

 

/*IP*/sbitPPCA_LVD=IP八6;

sbitPADC_SPI=IPp

sbitPS=IP%;

sbitPT0

#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);

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();

powerup();

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=卩3八6;//

加速键

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};

 

ucharj,k;

for(j=i;j>0;j--)

for(k=125;k>0;k--);

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);

if(jia_key==0)

if(jia_key==0)

if(num==4)

while(jia_key==0);//等待按键松开

if(jian_key==0)

delay(5);

if(jian_key==0)

num--;

else

num=0;//已经达到最小0,则保持

while(jian_key==0);

 

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;

 

uchari;

if(di_num!

=0)

for(i=0;i

 

dianji=0;//

实现PW信号低电平输出

display();//

利用显示函数起延时作用,这样也不影响数码管显示,

 

一举两得

for(i=0;i

 

dianji=1;//

实现PWM&号高电平输出

display();

voidmain()

while

(1)

dianji=0;

key();

dispose();

qudong();

例步进电机应用

C语言程序设计(P444)

#include<>

#defineucharunsignedchar

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};

 

ucharj,k;

for(j=i;j>0;j--)

for(k=125;k>0;k--);

 

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;

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1