单片机流水灯c语言实现DOC.docx

上传人:b****1 文档编号:1778377 上传时间:2022-10-24 格式:DOCX 页数:119 大小:2.71MB
下载 相关 举报
单片机流水灯c语言实现DOC.docx_第1页
第1页 / 共119页
单片机流水灯c语言实现DOC.docx_第2页
第2页 / 共119页
单片机流水灯c语言实现DOC.docx_第3页
第3页 / 共119页
单片机流水灯c语言实现DOC.docx_第4页
第4页 / 共119页
单片机流水灯c语言实现DOC.docx_第5页
第5页 / 共119页
点击查看更多>>
下载资源
资源描述

单片机流水灯c语言实现DOC.docx

《单片机流水灯c语言实现DOC.docx》由会员分享,可在线阅读,更多相关《单片机流水灯c语言实现DOC.docx(119页珍藏版)》请在冰豆网上搜索。

单片机流水灯c语言实现DOC.docx

单片机流水灯c语言实现DOC

实验一闪烁的Led

//名称:

闪烁的Led

//说明:

Led按设定的时间间隔闪烁,约亮1秒灭1秒

//-----------------------------------

#include

#defineucharunsignedchar//uchar宏定义

#defineuintunsignedint//uint宏定义

sbitled=P1^0;

//-----------------------------------

//延时子程序

//-----------------------------------

voiddelayMs(uintx)

{

uchari;//uchari取值为0-255

while(x--)

{

for(i=0;i<120;i++);//延时120微妙

}

}

//------------------------------------

//主程序

//-----------------------------------

voidmain()

{

while

(1)

{

led=~led;

delayMs(2050);//约亮1秒灭1秒

}

}

实验二从左到右的流水灯

//名称:

从左到右的流水灯

//说明:

接在P0端口的8只Led从左到右循环依次点亮,产生走马灯效果

//-----------------------------------

#include

#include//循环左移头文件宏定义

#defineucharunsignedchar

#defineuintunsignedint

//------------------------------------

//延时函数

voiddelayMs(uintx)

{

uchari;

while(x--)

{

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

}

}

//-------------------------------------

//主程序

voidmain()

{

P0=0xfe;//P0口初始化值1111.1110

while

(1)

{

P0=_crol_(P0,1);//P0口循环左移1位

delayMs(150);//晶振为11.0592时,0.1594885秒移动一次

}

}

实验三左右来回循环的流水灯

//名称:

左右来回循环的流水灯

//说明:

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

//---------------------------------------

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

//---------------------------------------

voiddelayMs(uintx)

{

uchari;

while(x--)

{

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

}

}

//--------------------------------------

voidmain()

{

uchari;

P2=0x01;//P2端口初始化

while

(1)//死循环

{

for(i=0;i<7;i++)//i自加1,当i=7时执行第二个for语句

{

P2=_crol_(P2,1);//P2端口循环左移1位

delayMs(150);

}

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

{

P2=_cror_(P2,1);//P2端口循环右移1位

delayMs(150);

}

}

}

//注释for(i=0;i<7;i++).i初始值为0,

//i++就是i自加1,每加一次执行

//P2=_crol_(P2,1);//P2端口循环左移1位

//delayMs(150);延时

//当i=7时,跳出第一个for语句,

//执行第二个for语句

实验四花样流水灯

//名称:

花样流水灯

//说明:

16只LED分两段组按预设的多种花样变换显示

//-------------------------------------

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodepattern_P0[]={0xfc,0xf7,0x5f};//定义P0显示数组

ucharcodepattern_P2[]={0xff,0x07,0xf5};//定义P2显示数组

//调整数组{}里的内容,可以实现自定义的花样显示

//-------------------------------------

voiddelayMs(uintx)

{

uchari;

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

}

//-------------------------------------

voidmain()

{

uchari;

while

(1)

{

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

{

P0=pattern_P0[i];//i自加1次,P0数组重新扫描1次

P2=pattern_P2[i];//i自加1次,P2数组重新扫描1次

delayMs(150);

}

}

}

//数组定义格式为

//ucharcodepattern_P0[]={0xfc,0xf7};

//uhar为数组类型,pattern_P0数组名称

//code数组存储类型

//{0xfc,0xf7}为数组显示参数,为0xff为全部关闭

实验五Led模拟交通灯

//Led模拟交通灯

//说明:

东西向绿灯亮若干秒,黄灯闪烁,闪烁5秒后亮红灯,

//红灯亮后,南北向有红灯变为绿灯,若干秒后南北向黄灯闪烁,

//闪烁5次后,亮红灯,东西向绿灯亮,如此重复

//-------------------------------------------------

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitred_a=P0^0;

sbityellow_a=P0^1;

sbitgreen_a=P0^2;

sbitred_b=P0^3;

sbityellow_b=P0^4;

sbitgreen_b=P0^5;//sbit为LED控制位定义

ucharFlash_Count=0,Operation_Type=1;

//Flash_Count闪烁次数和Operation_Type操作类型变量定义

//---------------------------------------------

voiddelayMs(uintx)

{

uchari;

while(x--)

{

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

}

}

//---------------------------------------------

//交通灯切换子程序

voidTraffic_Light()

{

switch(Operation_Type)

{

case1:

//东西向绿灯亮与南北向红灯亮

red_a=1;yellow_a=1;green_a=0;

red_b=0;yellow_b=1;green_b=1;

delayMs(2000);

Operation_Type=2;

break;

case2:

//东西向黄灯开始闪烁,绿灯关闭

delayMs(300);

yellow_a=!

yellow_a;green_a=1;

//黄灯闪烁5次

if(++Flash_Count!

=10)return;

Flash_Count=0;

Operation_Type=3;

break;

case3:

//东西向红灯与南北向绿灯亮

red_a=0;yellow_a=1;green_a=1;

red_b=1;yellow_b=1;green_b=0;

delayMs(2000);

Operation_Type=4;

break;//中断case3执行case4

case4:

//南北向黄灯开始闪烁

delayMs(300);

yellow_b=!

yellow_b;green_b=1;

if(++Flash_Count!

=10)return;

Flash_Count=0;

Operation_Type=1;

}

}

//--------------------------------------------

voidmain()

{

while

(1)Traffic_Light();

}

//switch是多分支选择语句常用格式

//switch(表达式)

//{case常量表达式1;语句1

//case常量表达式2;语句2

//case常量表达式3;语句3

//case常量表达式n;语句n

//default:

语句n+1}

//return是返回值,break的返回是指停止这一次执行,返回开始

实验六单只数码管循环显示0--9

//单只数码管循环显示0--9

//说明:

主程序中的循环语句反复将0--9的段码送至P0端口

//使数字0--9循环显示

//------------------------------------------------

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeDSY_CODE[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0xff};

//{}内为共阳数码管0-9的编码

//---------------------------------------

voidDelayMs(uintx)

{

uchari;

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

}

//----------------------------------------

voidmain()

{

uchari=0;

P0=0x00;

while

(1)

{

P0=~DSY_CODE[i];//显示数组取反

i=(i+1)%10;//

DelayMs(180);

}

}

//说明;电路中数码管接法是共阴,段码表是共阳的

//;所以用P0=Y~DS_CODE[i]语句取反显示

实验七8只数码管滚动显示单个不同数字

用三极管驱动显示不正常,最好去掉三级管驱动

//8只数码管滚动显示单个不同数字

//说明:

数码管从左到右依次滚动显示0--9,

//程序通过每次仅循环选通一只数码管

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

当前位置:首页 > 自然科学 > 天文地理

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

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