单片机C语言程序设计实例_第1页
单片机C语言程序设计实例_第2页
单片机C语言程序设计实例_第3页
单片机C语言程序设计实例_第4页
单片机C语言程序设计实例_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

《单片机C语言程序设计实训100例一基于8051+Proteus仿真》案例海

第01篇基础程序设计大

01闪烁的LED

U1与

19

/*名称:闪烁的LEDMALIP0.0/AD0机

P0.1/AD1

说明:LED按设定的时间间隔闪烁P0.2/AD2电

XTAL2ru.JJAUJ

*/P0.4/AD4工

P0.5/AD5

#include<reg5l.h>P0.6/AD6程

△面noIP0.7/AD7学

#defineucharunsignedcharC-13C3

斤P2.0/A8院

#defineuintunsignedint1P2.1/A9

P2.2/A10

sbitLED=P1AO;IOUFPSENP2.3/A11

ALEP2.4/A12倪

〃延时CArz.O/Al3

P2.6/A14继

voidDelayMS(uintx)P2.7/A15锋

P1.0rJ.UJHAD

(P1.1rJ.l/IAU

P12

uchari;r1.-i

r1.4

while(x—)P1.5P3.5fT1

P1.6P3.6)WR

(P1.7P3.7/RD

for(i=0;i<120;i++);AT89C51

)

)

〃主程序

voidmain()

(

while(l)

{

LED二〜LED;

DelayMS(150);

02从左到右的流水灯

/*名称:从左到右的流水灯

说明:接在P0口的8个LED

从左到右循环依次点亮,产生走

马灯效果

*/

#include<reg5l.h>

#include<intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

1

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

〃延时于

voidDelayMS(uintx)

(

uchari;

while(x-)

(

for(i=0;i<120;i++);

)

)

〃主程序上

voidmain()海

(范

P0=0xfe;大

while(l)学

(

P0=_crol_(P0,l);//P0的值向左循环移动

DelayMS(150);机

r.

038只LED左右来回点亮院

/*名称:8只LED左右来回点亮倪

说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果

*/锋

#include<reg51.h>

#include<intrins.h>4r

#defineucharunsignedchar

#defineuintunsignedint22pf

-----------E=3

//延时10k

C3-

voidDelayMS(uintx)Tl—

,10IF

uchari;

while(x—)

for(i=0;i<120;i++);AT89C51

)

〃主程序

voidmain()

uchari;

P2=0x01;

whilefl)

2

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

for(i=0;i<7;i++)

(

P2=_crol_(P2,l);//P2的值向左循环移动

DelayMS(150);

}

for(i=0;i<7;i++)

(

P2=_cror_(P2,l);//P2的值向右循环移动

DelayMS(150);

04花样流水灯师

/*名称:花样流水灯F).大

说明:只分两组:4:

16LED信

按预设的多种花样变换显示息

*/.a_与

2a_机

#include<reg51.h>

f±c电

±

#defineucharunsignedchar工

#defineuintunsignedint±t=程

ucharcodePattern_PO[]=学

0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,倪

0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x8l,0xc3,0xe7,0xff,

0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xfl,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

0x7f,0x3f,Oxlf,0x8f,0xc7,0xe3,0xfl,0xf8,0xff,0x00,0x00,Oxff,Oxff,OxOf,OxfO,Oxff,

0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xl'b,0xfd,0xfe,

0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,

0x00,Oxff,0x00,Oxff,0x00,Oxff,0x00,Oxff

);

ucharcodePattern_P2[]=

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,

0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xfl,0xe3,0xc7,0x8f,0xlf,0x3f,0x7f,

0x7f,0x3f,Oxlf,0x8f,0xc7,0xe3,0xfl,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,

0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

3

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

0x00,Oxff,0x00,Oxff,0x00,Oxff,0x00,Oxff

};

//延时

voidDelayMS(uintx)

(

uchari;

while(x-)

(

for(i=0;i<120;i++);

}

)

〃主程序

voidmain()

{

uchari;

while(l)

{〃从数组中读取数据送至P0和P2口显示

for(i=0;i<l36;i++)

P0=Pattem_P0[i];

P2=Pattem_P2[i];

DelayMS(lOO);

)

)

C1

TF

22PF

POJO/ADO

C2P0.1/AD1

P02/AD2

XTAL2P03/AD3

05LED模拟交通灯P04/A04

P05/AD5

POSfADB

P07MD7

/*名称:模拟交通灯P2VA9

LEDP22XA10

P23XM1

P24XM2

说明:东西向绿灯亮若干秒,黄P25XM3

P26XA14

P27XM5

灯闪烁5次后红灯亮,红灯亮后,P3ORXO

北向由红灯变为绿灯,若干秒后南北

p34no

P3包L

向黄灯闪烁此后变红灯,东西向变;A

5P37JTO-

绿灯,如此重复。

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitRED_A=P0A0;〃东西向灯

sbitYELLOW_A=POA1;

sbitGREEN_A=P0A2;

sbitRED_B=P0A3;〃南北向灯

sbitYELLOW_B=POA4;

sbitGREEN_B=P0A5;

ucharFlash_Count=OQperation_Type=l;〃闪烁次数,操作类型变量

上海师范大学信息与机电工程学院一倪继锋

4

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

〃延时于

voidDelayMS(uintx)

(

uchari;

while(x-)for(i=0;i<120;i++);

)

〃交通灯切换产

voidTraffic_Light(),

{范

switch(Operation_Type)大

{学

case1:〃东西向绿灯与南北向红灯亮g

RED_A=1;YELLOW_A=1;GREEN_A=0;1

RED_B=0;YELLOW_B=1;GREEN_B=1;机

DelayMS(2000);电

Operation_Type=2;

break;学

case2:〃东西向黄灯闪烁,绿灯关闭:

DeIayMS(300);一

YELLOW_A=-YELLOW_A;GREEN_A=1;倪

if(++Flash_Count!=10)return;〃闪烁5次J

Flash_Count=0;

Operation_Type=3;

break;

case3:〃东西向红灯,南北向绿灯亮

RED_A=0;YELLOW_A=1;GREEN_A=1;

RED_B=1;YELLOW_B=l;GREEN_B=0;

DelayMS(2000);

Operation_Type=4;

break;

case4:〃南北向黄灯闪烁5次

DelayMS(300);

YELLOW_B=〜YELLOW_B;GREEN_B=1;

if(++Flash_Count!=10)return;

Flash_Count=0;

Operation_Type=l;

}

)

〃主程序

voidmain()

(

while(1)Traffic_Light();

06单只数码管循环显示0~9

5

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

/*名称:单只数码管循环显示0~9

说明:主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示

*/

#include<reg5l.h>

#include<intrins.h>

#defineucharunsignedchar海

#defineuintunsignedint师

ucharcodeDSY_CODELJ={OxcO,Oxf9,Oxa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90,OxffJ^

g大

〃延时

voidDelayMS(umtx)............C1信

(匚|

X1►XTAL1PO,

岫与

uchart;12MPO.1

PO.舞机

XTAL2PO.|

while(x—)for(t=0;t<120;t++);PO,3

PO.|电

PO,|

}RSTPO.7工

〃主程序P2.0/A8程

P2.1/A9壁

P2.27A10学

voidmain()P2.3/A11

P2.4/A12院

P2.5/A13

bl浸

(P2.6/A14

P2.7/A15

uchari=0;嚏

P3.0JRXD倪

±dP3.1/TXD嗑

P0=0x00;P3.21MTQ继

±dP3.3JWT1蜜

P3.4/T0锋

while(l)±dP3S/T1

P3.6A^

(±iP3.7而

PO=-DSY_CODE[i];

SEVEN-SEG

i=(i+l)%10;

DelayMS(300);

}

078只数码管滚动显示单个数字

/*名称:8只数码管滚动显示单个数字’

说明:数码管从左到右依次滚动显示

0~7,程序通过每次仅循环选通一只数码

*/

#include<reg51.h>

#include<intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90);

〃延时

voidDelayMS(uintx)

(

uchart;

while(x—)for(t=0;t<120;t++);

6

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

)于

〃主程序

voidmain()

(

uchari,wei=0x80;

while(l)

(

for(i=0;i<8;i++)

(

P2=0xff;〃关闭显示

wei=_crol_(wei,l);

P()=DSY_CODE[i];发送数字段码

P2=wei;〃发送位码

DelayMS(300);

)

}

)

088只数码管动态显示多个不同字符

电路如上图

/*名称:8只数码管动态显示多个不同字

说明:数码管动态扫描显示0~7o

*/

#include<reg51.h>

#include<intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeDSY_CODE[]={OxcO,Oxf9,Oxa4,OxbO,Ox99,0x92,0x82,0xf8,0x80,0x90};

〃延时上

voidDelayMS(uintx)海

(师

uchart;心

while(x—)for(t=0;t<120;t++);学

12

〃主程序息

voidmain()与

1电

uchari,wei=0x80;工

while(l)程

{号

for(i=0;i<8;i++)匕

{倪

PO=Oxff;继

P0=DSY_CODE[i];发送段码锋

wei=_crol_(wei,1);

7

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

P2=wei;〃发送位码

IDelayMS(2);

098只数码管闪烁显示数字串

电路如上图

/*名称:8只数码管闪烁显示数字串

说明:数码管闪烁显示由0〜7构成的一串数字

本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。

*/

#include<reg5l.h>

#defineucharunsignedchar

#defineuintunsignedint范

〃段码表大

ucharcodeDSY_CODE[]={OxcO,Oxf9,Oxa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90};学

〃位码表信

ucharcodeDSY_IDX[]={0x01,0x02,0x04,0x08,Ox10,0x20,0x40,0x80};与

〃延时机

voidDelayMS(uintx)电

(工

uchart;

while(x-)for(t=0;t<120;t++);院

)

〃主程序倪

voidmain()

(

uchari,j;

while(l)

(

for(i=0;i<30;i++)

(

for(j=0;j<8;j++)

(

PO=()xff;

P0=DSY_CODE[j];〃发送段码

P2=DSYJDX[j];〃发送位码

DelayMS(2);

)

)

P2=0x00;〃关闭所有数码管并延时

DelayMS(lOOO);

8

《单片机C语言程序设计实训100例一基8051和PROTEUS仿真》案例

108只数码管滚动显示数字串

电路如上图

/*名称:8只数码管滚动显示数字串

说明:数码管向左滚动显示3个字符构成的数字串

*/

#include<reg5l.h>

#include<intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

〃段码表

ucharcodeDSY_CODE[]={OxcO,Oxf19,Oxa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90,Oxff);

〃下面数组看作环形队列,显示从某个数开始的8个数(10表示黑屏)上

ucharNum[]=(10,10,10,10,10,10,10,10,2,9,8};海

〃延时W

voidDelayMS(uintx)f

{学

uchart;信

while(x-)for(t=0;t<l20;t++);息

}与

//主程序s

voidmain()工

{程

uchari,j,k=0,m=0x80;学

…二院

while(l)

{〃刷新若干次,保持一段时间的稳定显示京

for(i=0;i<15;i++)继

{锋

for(j=0;j<8;j++)

{〃发送段码,采用环形取法,从第k个开始取第j个

P0=0xff;

P0=DSY_CODELNum[(k+j)%l1]];

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论