马上大四了,即将找工作。所以便把我学过的东西总结一下,系统一下。
接下来,就把我总结的结果跟大家分享下。
这一章是51单片机,主要是程序实例。代码参考郭天祥的单片机教材。
是总括性的,适合于有一定单片机基础的同学,也可以给初学者做一个系统的学习主线。
这个博客里的涉及的源代码大家可以在这里下载http://download.csdn.net/detail/zhaole20094463/4427745
1.流水灯
/************************流水灯******************************/
#include<reg52.h>
#include<intrins.h>//包含_crol_函数所在的头文件
#define uint unsigned int //宏定义 定义uint 在大项目中更加的方便
#define uchar unsigned char
void delayms(uint);
uchar aa;
void main()
{
aa=0xfe;
while(1)
{
P1=aa;
delayms(500);
aa=_crol_(aa,1);//aa左移一位
}
}
void delayms(uint xms)//延时时间约为1ms通过程序单步执行,看运行时间可得到
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
通过调用系统函数的方式使流水灯实现循环左移。
2.数码管显示程序
/*锁存器用的是74HC573高电平通,低电平锁存*/
/*作用:高阻态 ,数据锁存 ,数据缓冲 (加强驱动能力)*/
/*循环显示1-A的数据*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
uchar code table[]={数码管段码表};
void main()
{
wela=1;//打开锁存器
P0=0xc0;//送入锁存信号
wela=0;//关闭锁存器
while(1)
{
for(num=0;num<16;num++)
dula=1;
P0=table[num];
delayms(500);
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
3.独立键盘检测
/*通过按键控制led亮灭*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;
sbit led=P1^0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
P3=0xff;//在对51单片机进行按键检测时,先要将引脚置1;
while(1)
{
if(key1==0)
{
delay(5);
if(key1==0)//按键消抖
{
led=0;
num++;
if(num==2)
num=0;
led=1;
}
}
4.矩阵键盘检测
/*******检测矩阵键盘数码管显示0-F**********/
矩阵键盘的四列与P3.4~P3.7相连
4行与P3.0~P3.3
#include<reg52.h>
#define uchar unsinged char
#define uint unsigned int
sbit dula=P2^6;
sbint wela=P2^7;
uchar code table[]={段码表};
void delayms(uint xms);
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)显示函数
{
P0=table[num];
dula=1;
dula=0;
}
void matrixkeyscan()//矩阵键盘的检测
{
uchar temp,key;
P3=0xfe;//打开P3.7,P3.7置0.检测高四位
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)//是否有键被按下
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)//按键消抖
{
temp=P3;
switch(temp)
{
case 0xee:key=0;break;
case 0xde:key=1;break;
case 0xbe:key=2;break
case 0x7e:key=3:break;
}
while(temp!=0xf0)//检测按键是否弹起,如果没有弹起循环停在这里。