单片机实验c语言编程Word文件下载.docx
《单片机实验c语言编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机实验c语言编程Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
P3=temp;
//直接对I/O口P3赋值,使.P3.0输出低点平。
delay();
//延时
for(i=1;
i<
8;
i++)//实现灯的移动
temp=(temp<
<
1)|0x01;
//P3口I/O轮流低电平
//延时,肉眼可以看到
闪烁灯
发光二极管维持一闪一闪的状态。
regx51.H>
/******************************************************************************
第一行是一个"
文件包含"
处理。
所谓"
是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有4行,但C编译器在处理的时候却要处理几十或几百行。
这里程序中包含REG51.h文件的目的是为了要使用P1这符号即通知C编译器,程序中所写的P1是指80C51单片机的P1端口而不是其它变量。
******************************************************************************/
voiddelay02s(void)//延时0.2秒子程序
unsignedchari,j,k;
//定义3个无符号字符型数据。
for(i=20;
i>
i--)//作循环延时
for(j=20;
j>
j--)
for(k=248;
k>
k--);
voidmain(void)//每一个C语言程序有且只有一个主函数,
P3_0=0;
//I/O口P3.0输出低电平,小灯被点亮。
delay02s();
//延时经过0.2秒。
P3_0=1;
//I/O口P3.0输出高电平,小灯熄灭。
按键识别
按下开关,D1变亮并保持。
再按开关,D1熄灭,并保持。
C语言程序如下:
sbitINT_0=P3^2;
//定义按键的输入端注意此处按键判断使用的是扫
//描方式而表示中断判断方式
sbitD1=P3^0;
//D1小灯定义
voiddelay10ms(void)//延时程序
unsignedchari,j;
i--)
for(j=248;
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。
AT89X51.H>
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//显示一位数
P2=table[dispcount];
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.
regX51.H>
unsignedcharcodeseg7code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsignedchark;
voidGetch()
unsignedcharX,Y,Z;
P2=0xff;
P2=0x0f;
//先对P2置数行扫描
if(P2!
=0x0f)//判断是否有键按下
=0x0f)//确认按键按下;
X=P2;
//保存行扫描时有键按下时状态
P2=0xf0;
//列扫描
Y=P2;
//保存列扫描时有键按下时状态
Z=X|Y;
//取出键值
switch(Z)//判断键值(那一个键按下)
case0x77:
k=0;
break;
//对键值赋值
case0x7b:
k=1;
case0x7d:
k=2;
case0x7e:
k=3;
case0xb7:
k=4;
case0xbb:
k=5;
case0xbd:
k=6;
case0xbe:
k=7;
case0xd7:
k=8;
case0xdb:
k=9;
case0xdd:
k=10;
break;
case0xde:
k=11;
case0xe7:
k=12;
case0xeb:
k=13;
case0xed:
k=14;
case0xee:
k=15;
voidmain(void)
while
(1)
{P2=0xff;
Getch();
P3=seg7code[k];
//查表LED输出
P1=0xf0;
//输出相同的四位数据。
数码管动态显示
液晶显示器显示“1234”。
XX文库-让每个人平等地提升自我sbitqian=P1^0;
sbitbai=P1^1;
sbitshi=P1^2;
sbitge=P1^3;
codeunsignedcharseg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
//显示段码
=0)//如果tc为0则终止延时
//局部正整数变量i
//执行400次将耗时1毫秒
//tc计数减一
voidLed(intdate)//显示函数
qian=0;
//P1.0输出低电平,选通千位数
P3=seg7code[date/1000];
//取出千位数,查表,输出。
Delay(10);
qian=1;
//销隐
bai=0;
//P1.1输出低电平,选通百位数
P3=seg7code[date%1000/100];
//取出百位数,查表,输出。
bai=1;
shi=0;
//P1.2输出低电平,选通十位数
P3=seg7code[date%100/10];
//取出十位数,查表,输出。
shi=1;
ge=0;
//P1.3输出低电平,选通十位数
P3=seg7code[date%10];
//取出个位数,查表,输出。
ge=1;
intdisplay_date=1234;
//定义并赋值要显示的数据
Led(display_date);
//调用显示函数显示数据display_date
数码管静态显示
液晶显示器最左边第一位将显示“4”
sbitGE=P1^3;
codeunsignedcharseg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
unsignedchardisplay_date=4;
P3=seg7code[display_date];
//查表,输出
GE=0;
//P1^3为低电平,相当于把数码管的4H端接地