单片机实验C语言编程.docx

上传人:b****1 文档编号:10427418 上传时间:2023-05-25 格式:DOCX 页数:16 大小:121.09KB
下载 相关 举报
单片机实验C语言编程.docx_第1页
第1页 / 共16页
单片机实验C语言编程.docx_第2页
第2页 / 共16页
单片机实验C语言编程.docx_第3页
第3页 / 共16页
单片机实验C语言编程.docx_第4页
第4页 / 共16页
单片机实验C语言编程.docx_第5页
第5页 / 共16页
单片机实验C语言编程.docx_第6页
第6页 / 共16页
单片机实验C语言编程.docx_第7页
第7页 / 共16页
单片机实验C语言编程.docx_第8页
第8页 / 共16页
单片机实验C语言编程.docx_第9页
第9页 / 共16页
单片机实验C语言编程.docx_第10页
第10页 / 共16页
单片机实验C语言编程.docx_第11页
第11页 / 共16页
单片机实验C语言编程.docx_第12页
第12页 / 共16页
单片机实验C语言编程.docx_第13页
第13页 / 共16页
单片机实验C语言编程.docx_第14页
第14页 / 共16页
单片机实验C语言编程.docx_第15页
第15页 / 共16页
单片机实验C语言编程.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机实验C语言编程.docx

《单片机实验C语言编程.docx》由会员分享,可在线阅读,更多相关《单片机实验C语言编程.docx(16页珍藏版)》请在冰点文库上搜索。

单片机实验C语言编程.docx

单片机实验C语言编程

流水灯

效果:

发关二级管依次独个被点亮,一直循环下去。

C语言程序如下:

#include

unsignedchari;

unsignedchartemp;

voiddelay(void)//延时子程序

{

unsignedcharm,n,s;

for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);

}

voidmain(void)//主程序

{

while

(1)//循环条件永远为真,以下程序一直执行下去。

{

temp=0xfe;

P3=temp;//直接对I/O口P3赋值,使.P3.0输出低点平。

delay();//延时

for(i=1;i<8;i++)//实现灯的移动

{

temp=(temp<<1)|0x01;//P3口I/O轮流低电平

P3=temp;

delay();//延时,肉眼可以看到

}

}

}

闪烁灯

效果:

发光二极管维持一闪一闪的状态。

C语言程序如下:

#include

/******************************************************************************

第一行是一个"文件包含"处理。

所谓"文件包含"是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有4行,但C编译器在处理的时候却要处理几十或几百行。

这里程序中包含REG51.h文件的目的是为了要使用P1这符号即通知C编译器,程序中所写的P1是指80C51单片机的P1端口而不是其它变量。

******************************************************************************/

voiddelay02s(void)//延时0.2秒子程序

{

unsignedchari,j,k;//定义3个无符号字符型数据。

for(i=20;i>0;i--)//作循环延时

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

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

}

voidmain(void)//每一个C语言程序有且只有一个主函数,

{

while

(1)//循环条件永远为真,以下程序一直执行下去。

{

P3_0=0;//I/O口P3.0输出低电平,小灯被点亮。

delay02s();//延时经过0.2秒。

P3_0=1;//I/O口P3.0输出高电平,小灯熄灭。

delay02s();//延时经过0.2秒。

}

}

按键识别

效果:

按下开关,D1变亮并保持。

再按开关,D1熄灭,并保持。

C语言程序如下:

#include

sbitINT_0=P3^2;//定义按键的输入端注意此处按键判断使用的是扫

//描方式而表示中断判断方式

sbitD1=P3^0;//D1小灯定义

voiddelay10ms(void)//延时程序

{

unsignedchari,j;

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

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

}

key()/按键判断程序

{

if(INT_0==0)//判断是否按下键盘

{

delay10ms();//延时,软件去干扰

if(INT_0==0)//确认按键按下

{

D1=!

D1;//D1亮灭交替变化

}

while(INT_0==0);//按键锁定,每按一次D1只变化一次.

}

}

main()

{

while

(1)//永远循环,扫描判断按键是否按下

{

key();//对于此处CPU对按键判断一直扫描;

}

}

 

按键中断识别

效果:

一开始显示“0”,每按一次开关,显示的数字就加1。

C语言程序如下:

#include

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

unsignedchardispcount=0;//计数

sbitgewei=P3^1;//个位选通定义

sbitshiwei=P3^0;//十位选通定义

voidDelay(unsignedinttc)//延时程序

{

while(tc!

=0)

{

unsignedinti;

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

tc--;

}

}

voidExtInt0()interrupt0//中断服务程序

{

dispcount++;

if(dispcount==100)

{dispcount=0;}

}

voidLED()//LED显示函数

{

if(dispcount>=10)//显示两位数

{

shiwei=1;

P2=table[dispcount/10];

Delay(8);

shiwei=0;

gewei=1;

P2=table[dispcount%10];

Delay(5);

gewei=0;

}

else//显示一位数

{

shiwei=0;

gewei=1;

P2=table[dispcount];

Delay(8);

}

}

voidmain()

{TCON=0x01;//INT0为0电平触发为1负边沿触发

IE=0x81;//开总中断和允许INT0外部中断

while

(1)//循环执行

{LED();}//调用显示函数

}

 

4×4矩阵式键盘识别

效果:

按下不同的按键将显示不同的内容,从右到左,从上到下,按键分别代表 0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F.

C语言程序如下:

#include

unsignedcharcodeseg7code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsignedchark;

voiddelay10ms(void)//延时程序

{

unsignedchari,j;

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

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

}

voidGetch()

{

unsignedcharX,Y,Z;

P2=0xff;

P2=0x0f;//先对P2置数行扫描

if(P2!

=0x0f)//判断是否有键按下

{

delay10ms();//延时,软件去干扰

if(P2!

=0x0f)//确认按键按下;

{

X=P2;//保存行扫描时有键按下时状态

P2=0xf0;//列扫描

Y=P2;//保存列扫描时有键按下时状态

Z=X|Y;//取出键值

switch(Z)//判断键值(那一个键按下)

{

case0x77:

k=0;break;//对键值赋值

case0x7b:

k=1;break;

case0x7d:

k=2;break;

case0x7e:

k=3;break;

case0xb7:

k=4;break;

case0xbb:

k=5;break;

case0xbd:

k=6;break;

case0xbe:

k=7;break;

case0xd7:

k=8;break;

case0xdb:

k=9;break;

case0xdd:

k=10;break;

case0xde:

k=11;break;

case0xe7:

k=12;break;

case0xeb:

k=13;break;

case0xed:

k=14;break;

case0xee:

k=15;break;

}

}

}

}

voidmain(void)

{

while

(1)

{P2=0xff;

Getch();

P3=seg7code[k];//查表LED输出

P1=0xf0;//输出相同的四位数据。

}

}

 

数码管动态显示

效果:

液晶显示器显示“1234”。

C语言程序如下:

#include

sbitqian=P1^0;

sbitbai=P1^1;

sbitshi=P1^2;

sbitge=P1^3;

codeunsignedcharseg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};//显示段码

voidDelay(unsignedinttc)//延时程序

{

while(tc!

=0)//如果tc为0则终止延时

{

unsignedinti;//局部正整数变量i

for(i=0;i<100;i++);//执行400次将耗时1毫秒

tc--;//tc计数减一

}

}

voidLed(intdate)//显示函数

{

qian=0;//P1.0输出低电平,选通千位数

P3=seg7code[date/1000];//取出千位数,查表,输出。

Delay(10);//延时

qian=1;//销隐

bai=0;//P1.1输出低电平,选通百位数

P3=seg7code[date%1000/100];//取出百位数,查表,输出。

Delay(10);//延时

bai=1;//销隐

shi=0;//P1.2输出低电平,选通十位数

P3=seg7code[date%100/10];//取出十位数,查表,输出。

Delay(10);//延时

shi=1;//销隐

ge=0;//P1.3输出低电平,选通十位数

P3=seg7code[date%10];//取出个位数,查表,输出。

Delay(10);//延时

ge=1;//销隐

}

main()

{

intdisplay_date=1234;//定义并赋值要显示的数据

while

(1)

{

Led(display_date);//调用显示函数显示数据display_date

}

}

 

数码管静态显示

效果:

液晶显示器最左边第一位将显示“4”

C语言程序如下:

#include

sbitGE=P1^3;

codeunsignedcharseg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f};//显示段码

main()

{

unsignedchardisplay_date=4;//定义并赋值要显示的数据

while

(1)

{

P3=seg7code[display_date];//查表,输出

GE=0;//P1^3为低电平,相当于把数码管的4H端接地

}

}

 

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

当前位置:首页 > 工作范文 > 行政公文

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

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