单片机实验C语言编程.doc
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
14
积分
还剩页未读,继续阅读
关 键 词:单片机C语言
单片机c语言编程
C单片机C语言编程
单片机C语言实验
C 语言程序
资源描述:
流水灯
效果:发关二级管依次独个被点亮,一直循环下去。
C语言程序如下:
#include unsigned char i;
unsigned char temp;
void delay(void) //延时子程序
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
void main(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 端口而不是其它变量。
******************************************************************************/
void delay02s(void) //延时0.2 秒子程序
{
unsigned char i,j,k; //定义3 个无符号字符型数据。
for(i=20;i>0;i--) //作循环延时
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main(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 sbit INT_0=P3^2; //定义按键的输入端注意此处按键判断使用的是扫
//描方式而表示中断判断方式
sbit D1=P3^0; //D1 小灯定义
void delay10ms(void) //延时程序
{
unsigned char i,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 unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char dispcount=0; //计数
sbit gewei=P3^1; //个位选通定义
sbit shiwei=P3^0; //十位选通定义
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{
unsigned int i;
for(i=0; i<100; i++);
tc--;
}
}
void ExtInt0() interrupt 0 //中断服务程序
{
dispcount++;
if (dispcount==100)
{dispcount=0;}
}
void LED( ) //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);
}
}
void main()
{ 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 unsigned char code seg7code[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
unsigned char k;
void delay10ms(void) //延时程序
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void Getch ( )
{
unsigned char X,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 ) //判断键值(那一个键按下)
{
case 0x77: k=0; break; //对键值赋值
case 0x7b: k=1; break;
case 0x7d: k=2; break;
case 0x7e: k=3; break;
case 0xb7: k=4; break;
case 0xbb: k=5; break;
case 0xbd: k=6; break;
case 0xbe: k=7; break;
case 0xd7: k=8; break;
case 0xdb: k=9; break;
case 0xdd: k=10;break;
case 0xde: k=11;break;
case 0xe7: k=12;break;
case 0xeb: k=13;break;
case 0xed: k=14;break;
case 0xee: k=15;break;
}
}
}
}
void main(void)
{
while(1)
{ P2=0xff;
Getch();
P3=seg7code[k]; //查表LED 输出
P1=0xf0; //输出相同的四位数据。
}
}
数码管动态显示
效果:液晶显示器显示“1234”。
C语言程序如下:
#include sbit qian=P1^0;
sbit bai=P1^1;
sbit shi=P1^2;
sbit ge=P1^3;
code unsigned char seg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //显示段码
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 ) //如果tc 为0 则终止延时
{
unsigned int i; //局部正整数变量i
for(i=0; i<100; i++); //执行400 次将耗时1 毫秒
tc--; //tc 计数减一
}
}
void Led(int date) //显示函数
{
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()
{
int display_date=1234; //定义并赋值要显示的数据
while(1)
{
Led(display_date);//调用显示函数显示数据display_date
}
}
数码管静态显示
效果:液晶显示器最左边第一位将显示“4”
C语言程序如下:
#include sbit GE=P1^3;
code unsigned char seg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f}; //显示段码
main()
{
unsigned char display_date=4; //定义并赋值要显示的数据
while(1)
{
P3=seg7code[display_date]; //查表,输出
GE=0; //P1^3 为低电平,相当于把数码管的4H 端接地
}
}
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:单片机实验C语言编程.doc
链接地址:https://www.renrendoc.com/p-18300669.html