认识Keil C例程.docx
《认识Keil C例程.docx》由会员分享,可在线阅读,更多相关《认识Keil C例程.docx(21页珍藏版)》请在冰豆网上搜索。
![认识Keil C例程.docx](https://file1.bdocx.com/fileroot1/2023-2/11/26b96bde-1017-4267-b987-009aca2b079b/26b96bde-1017-4267-b987-009aca2b079b1.gif)
认识KeilC例程
认识KeilC
例程:
//实例:
使用P3口流水点亮8位LED
#include//包含单片机寄存器的头文件
/*************************************************************
函数功能:
延时一段时间
*************************************************************/
voiddelay(void)//延时子程序开始
{
unsignedchari,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;//空循环
}//子程序结束
/*************************************************************
函数功能:
主程序
*************************************************************/
voidmain(void)
{
while
(1)
{
P3=0xfe;//11111110第一个灯亮
Delay();//调用延时函数
P3=0xfd;//11111101第二个灯亮
Delay();//调用延时函数
P3=0xfb;//11111011第三个灯亮
Delay();//调用延时函数
P3=0xf7;//11110111第四个灯亮
Delay();//调用延时函数
P3=0xef;//11101111第五个灯亮
Delay();//调用延时函数
P3=0xdf;//11011111第六个灯亮
Delay();//调用延时函数
P3=0xbf;//10111111第七个灯亮
Delay();//调用延时函数
P3=0x7f;//01111111第八个灯亮
Delay();//调用延时函数
}
}
/*通过P1口控制,霹雳灯实验程序:
指针移位法*/
//==声明区============================================
#include//定义51系列单片机引入头文件
#defineLEDP1//定义LED接至P1口
voiddelay(int);//声明延迟函数
/*******************************************************
函数功能:
主程序
*******************************************************/
Voidmain()//主程序开始
{
unsignedchari;//声明无号数字元变数i(占1Bytes)
LED=0xfe;//初值=11111110,只有最右1灯亮
while
(1)//无穷循环,程序一直跑
{
for(i=0;i<7;i++)//左移7次
{
delay(100);//延迟100×5ms=0.5s
LED=(LED<<1)|0x01;//左移1位,并设定最低位元为1
}//左移结束,只有最左1灯亮
for(i=0;i<7;i++)//右移7次
{
delay(100);//延迟1005m=0.5s
LED=(LED>>1)|0x80;//右移1位,并设定最高位元为1
}//结束右移,只有最右1灯亮
}//while循环结束
}//主程序结束
/***********************************************************
函数功能:
延时子程序
***********************************************************/
/*延迟函数,延迟约x5ms*/
voiddelay(intx)//延迟函数开始
{
inti,j;//声明整数变数i,j
for(i=0;ifor(j=0;j<600;j++);//计数600次,延迟5ms
}
/*********************************************************
用不同数据类型控制灯的闪烁时间——P1.0口和P1.4口比较
*********************************************************/
#include//包含单片机寄存器头文件
/*********************************************************
函数功能:
用整形数据延时一段时间
*********************************************************/
Voidint_delay(void)//定义整形数据实现的延时函数
{
Unsignedintm;//定义无符号整形变量,双字节数据,0-65535
For(m=0;m<36000;m++)//循环开始
;//空操作
}
/*********************************************************
函数功能:
用字符型数据延时一段时间
*********************************************************/
Voidchar_delay(void)//定义字符型数据实现的延时函数
{
Unsignedchari,j;//定义无符号字符变量,单字节数据,0-255
for(i=0;i<200;i++)
for(j=0;j<180;j++)
;//空操作
}
/**************************************************************
函数功能:
主函数
**************************************************************/
Voidmain(void)
{
Unsignedchari;
While
(1)
{
For(i=0;i<3;i++)
{
P1=0xfe;//点亮P1.0口的灯
Int_delay();//延时一段较长的时间
P1=0xff;//P1.0口灯熄灭
Int_delay();//延时一段较长时间
}
For(i=0;i<3;i++)
{
P1=0xef;//点亮P1.4口的灯
char_delay();//延时一段较长的时间
P1=0xff;//P1.4口灯熄灭
char_delay();//延时一段较长时间
}
}
}
/***********************************************************************/
#include
#defineucharunsignedchar//这里用"uchar"代替"unsignedchar","uchar"用来定义无符号字符型数。
#defineuintunsignedint//"uint"用来定义无符号整型数。
sbitShow_LED=P1^0;//用来声明P1.0口为程序所要控制的端口,"sbit"是KEIL专门用来声明某位IO口
/********************************************************************
*名称:
Delay()
*功能:
延时,延时时间为10ms*del。
这是通过软件延时,有一定误差。
*输入:
del
*输出:
无
*这里只单独控制P1.0口,所以定义成:
sbitShow_LED=P1^0;区分大小写
***********************************************************************/
voidDelay(uintdel)
{
uinti,j;
for(i=0;ifor(j=0;j<1827;j++)//这个是通过软件仿真得出的数
;//空循环
}
/********************************************************************
*名称:
Main()
*功能:
实现灯的闪烁
***********************************************************************/
voidMain(void)
{
while
(1)
{
Show_LED=1;//LED1灯亮
Delay(20);//Delay(del)中的数为延时的时间参数,延时时间为10ms*del.
Show_LED=0;//LED1灯灭
Delay(20);//Delay(del)中的数为延时的时间参数,延时时间为10ms*del.
}
}
顺时针流水灯:
用指针移位法
/***********************************************************************/
#include
#defineucharunsignedchar
#defineuintunsignedint
/********************************************************************
*名称:
Delay()
*功能:
延时,延时时间为10ms*del
*输入:
del
*输出:
无
***********************************************************************/
voidDelay(uintdel)
{
uinti,j;
for(i=0;ifor(j=0;j<1827;j++)
;
}
/********************************************************************
*名称:
Main()
*功能:
实现灯的闪烁
*输入:
无
*输出:
无
***********************************************************************/
voidMain(void)
{
uchari,temp;
while
(1)
{
temp=0xfe;
for(i=0;i<8;i++)
{
P1=temp;//把值赋给P1口
Delay(30);//延时(10毫秒*j)秒
temp=temp<<1;//值右移一位
temp=temp|0x01;
}
P1=0xff;
temp=0xfe;
for(i=0;i<4;i++)
{
P2=temp;//把值赋给P2口
Delay(30);//延时(10毫秒*j)秒
temp=temp<<1;//值右移一位
temp=temp|0x01;
}
P2=0xff;
}
}
/***********************************************************************
12个灯实现模拟交通灯
***********************************************************************/
#include
#defineucharunsignedchar
#defineuintunsignedint
//定义北面的LED
sbitN_Red=P1^0;
sbitN_Yellow=P1^1;
sbitN_Green=P1^2;
//定义东面的LED
sbitE_Red=P1^3;
sbitE_Yellow=P1^4;
sbitE_Green=P1^5;
//定义南面的LED
sbitS_Red=P1^6;
sbitS_Yellow=P1^7;
sbitS_Green=P2^0;
//定义西面的LED
sbitW_Red=P2^1;
sbitW_Yellow=P2^2;
sbitW_Green=P2^3;
/********************************************************************
*名称:
Delay()
*功能:
延时,延时时间为10ms*del
*输入:
del
*输出:
无
***********************************************************************/
voidDelay(uintdel)
{
uinti,j;
for(i=0;ifor(j=0;j<1827;j++)
;
}
/********************************************************************
*名称:
Main()
*功能:
实现灯的闪烁
*输入:
无
*输出:
无
***********************************************************************/
voidMain(void)
{
while
(1)
{
/*南北红灯亮、东西绿灯亮、持续时间20秒*/
N_Red=0;
N_Yellow=1;
N_Green=1;
//
E_Red=1;
E_Yellow=1;
E_Green=0;
//
S_Red=0;
S_Yellow=1;
S_Green=1;
//
W_Red=1;
W_Yellow=1;
W_Green=0;
Delay(2000);
//
/*南北红灯亮、东西黄灯亮、持续时间5秒*/
N_Red=0;
N_Yellow=1;
N_Green=1;
//
E_Red=1;
E_Yellow=0;
E_Green=1;
//
S_Red=0;
S_Yellow=1;
S_Green=1;
//
W_Red=1;
W_Yellow=0;
W_Green=1;
Delay(500);
//
/*南北绿灯亮、东西红灯亮、持续时间20秒*/
N_Red=1;
N_Yellow=1;
N_Green=0;
//
E_Red=0;
E_Yellow=1;
E_Green=1;
//
S_Red=1;
S_Yellow=1;
S_Green=0;
//
W_Red=0;
W_Yellow=1;
W_Green=1;
Delay(2000);
/*南北黄灯亮、东西红灯亮、持续时间5秒*/
N_Red=1;
N_Yellow=0;
N_Green=1;
//
E_Red=0;
E_Yellow=1;
E_Green=1;
//
S_Red=1;
S_Yellow=0;
S_Green=1;
//
W_Red=0;
W_Yellow=1;
W_Green=1;
Delay(500);
}
}
/***********************************************************************/
#include
#defineucharunsignedchar
#defineuintunsignedint
/***********************************************************************
*名称:
Delay()
*功能:
延时,延时时间为10ms*del
*输入:
del
*输出:
渐快流水灯
***********************************************************************/
voidDelay(uintdel)
{
uinti,j;
for(i=0;ifor(j=0;j<1827;j++)
;
}
/**********************************************************************
*名称:
Main()
*功能:
实现灯的闪烁
*输入:
无
*输出:
无
***********************************************************************/
voidMain(void)
{
uchari,j=20,temp;
while
(1)
{
temp=0x7f;
for(i=0;i<8;i++)
{
P1=temp;//把值赋给P1口
Delay(j);//延时(10毫秒*j)秒
temp=temp>>1;//值右移一位
temp=temp|0x80;
}
P1=0xff;
temp=0xf7;
for(i=0;i<4;i++)
{
P2=temp;//把值赋给P2口
Delay(j);//延时(10毫秒*j)秒
temp=temp>>1;//值右移一位
temp=temp|0x08;
}
P2=0xff;
if(j>6)//这里定义一个延时的最低的值,有了这个,灯的闪烁时间最短为0.06秒
{
j-=2;//每转一圈延时减0.02
}
}
}
●逗号运算符
●格式:
表达式1,表达式2,表达式3…
●例如:
x(y=3,z=5,y+2)
●结果:
z=5,y=3,x=y+2=5
●条件运算符——“?
:
”:
可以将3个表达式连成一个条件表达式。
形式如下:
●逻辑表达式?
表达式1:
表达式2
●说明:
先计算逻辑表达式,当其值为真(非0)时,表达式1的值为整个表达式的值;当逻辑表达式为假(0)时,将表达式2的值作为整个表达式的值
●例如:
当a=8,b=13时,求a,b中的最大值
●程序如下:
max=(a>b)?
a:
b
●结果:
max=13
●强制转换运算符
●格式:
(类型名)(表达式)
●示例如下:
●(int)a//将a强制转化为整型
●(int)(3.58)//将实型变量3.58强制转化为整型,结果为3
/***********************************************************************/
#include
#defineucharunsignedchar
#defineuintunsignedint
/********************************************************************
*名称:
Delay()
*功能:
延时,延时时间为10ms*del
*输入:
del
*输出:
渐快流水灯闪烁
***********************************************************************/
voidDelay(uintdel)
{
uinti,j;
for(i=0;ifor(j=0;j<1827;j++)
;
}
/********************************************************************
*名称:
Main()
*功能:
实现灯的闪烁
*输入:
无
*输出:
无
***********************************************************************/
voidMain(void)
{
uchari,j=20,temp;
while
(1)
{
temp=0x7f;
for(i=0;i<8;i++)
{
P1=temp;//把值赋给P1口
Delay(j);//延时(10毫秒*j)秒
temp=temp>>1;//值右移一位
temp=temp|0x80;
}
P1=0xff;
temp=0xf7;
for(i=0;i<4;i++)
{
P2=temp;//把值赋给P2口
Delay(j);//延时(10毫秒*j)秒
temp=temp>>1;//值右移一位