个人的单片机开发板c语言程序及模块设计总结目录Keil 软件的使用 2*LED 显示输出* 8一. 闪烁灯 9二.广告灯的左移右移 10三. 按键识别 14四.数码管动态显示 15五.4×4 矩阵式键盘识别 17六.按键中断识别 19七.定时器 T0 的应用---9.9 秒计时设计 21八.利用定时器产生乐曲 23九.数摸转换 ADC0804 的应用 26十.摸数转换 DAC0832的应用 32十一.24CO8 的读写操作 35十二.PC 机与单片机通信(RS232 协议) 39十三.DS18B20 测量温度系统 41十四.128X64 液晶显示器的基本应用 45十五.标准键盘 PS/2与单片机通信 47十六,128X64无字库液晶4X4键盘输入使用(密码锁) 51十七、串口下载线 57Keil 软件的使用软件是目最流行开发 80C51 系列单片机的软件,Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案1. 使用Keil 前必须先安装安装过程简单,这里不在叙述2. 安装好了Keil 软件以后,我们打开它打开以后界面如下:3. 我们先新建一个工程文件,点击“p工程”菜单,如下图::4. 选择工程文件要存放的路径 ,输入工程文件名 LED, 最后单击保存:5. 在弹出的对话框中选择 CPU 厂商及型号:6. 选择好 Atmel 公司的 AT89S52或AT89C52 后 , 单击确定:7.新建一个 C51 文件 , 单击左上角的 New File (新建文件)如下图所示:8.保存新建文件使文件名为*.C的扩展名:9.保存好后把此文件加入到工程中方法如下 : 用鼠标在 Source Group1 上单击右键 , 然后再单击 添加文件到组‘Source Group 1'如下图:10. 选择要加入的文件 , 找到led.C 后 , 单击 Add, 然后单击关闭:11.程序编辑后选择左窗口“目标Target 1属性”点击右键选择 “输出”将E生成HEX文件打钩。
然后,点击确定,如下图所示12.按一下,快捷键F7,编译程序LED 显示输出*很明显,要点亮使发光二极管,必须使单片机的I/O口P1.0输出低电平于是我们的任务就是编程序使P1.0输出地电平include /*LED 显示输出 具体口输出*/sbit P1_0=P1^0; /*定义p1.0为p1_0 */sbit P1_1=P2^1; /*定义p2.1为p1_1 */sbit P1_2=P3^2;/*定义p3.2为p1_2 */sbit P1_3=P0^3;/*定义p0.3为p1_3 */main(){P1_0=0;/*输出高电平 即:灯亮 */P1_1=0;P1_2=0;P1_3=0;}#include /* LED 显示输出 整体输出*/main(){P1=0;/*输出高电平 */P2=0;P3=0;P0=0;AT89S52单片机从简单到复杂程序演示一. 闪烁灯[实验任务]在 P1.0 端口上接一个发光二极管 L1,使 L1 在不停地一亮一灭,一亮一灭的时间间隔为0.2秒[硬件电路]与上面点亮小灯的连接完全相同include /*闪烁灯*/del() /*延时0.2秒*/{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}sbit P1_0=P1^0;main(){while(1)/*永远为真,一直执行下去*/{P1_0=0;del();P1_0=1;del();}}#include "reg52.h" //#define uchar unsigned char //#define uint unsigned int sbit P10=P1^0; void mDelay(unsigned int Delay) { unsigned int i; for(;Delay>0;Delay--) { for(i=0;i<124;i++) {;} } } void main() { for(;;) { P10=!P10; //取反 P1.0 mDelay(1000); //延时1秒。
如果是2000那么是2秒 } }二.广告灯的左移右移[实验任务]做广告灯的左移右移,八个发光二极管分别接在单片机的P3.0-P3.7接口上,输出“0”时,发光二极管亮,开始时P3.0→P3.1→P3.2→P3.3→┅→P3.7→P3.6→┅→P3.0亮,重复循环当然,四个输出口可以同时实现广告灯)[硬件电路]#include /*广告灯的左移右移*/unsigned char i;unsigned char temp;unsigned char a,b;delay()//延时程序{unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}main(){while(1){temp=0xfe;P3=P2=P0=P1=temp;//直接对1/0口p3赋值,使批p3.0输出低电平delay();//延时for(i=1;i<8;i++)//实现广告灯的从右到左移动{a=temp<>(8-i);P3=P2=P0=P1=a|b;delay();}for(i=1;i<8;i++)//实现广告灯的从左到右移动{a=temp>>i;b=temp<<(8-i);P3=P2=P0=P1=a|b;delay();}}} 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、#include "reg52.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int void mDelay(unsigned int Delay) { unsigned int i; for(;Delay>0;Delay--) { for(i=0;i<124;i++) {;} } } void main() { unsigned char OutData=0xfe; for(;;) { P1=OutData; OutData=_crol_(OutData,1); // 循环左移 mDelay(1000); // 1000延时1s } }\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#include /*广告灯的缩短*/unsigned char i;unsigned char temp;unsigned char a,b;delay()//延时程序{unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}main(){while(1){temp=0xfe;P1=temp;//直接对1/0口p3赋值,使批p3.0输出低电平。
delay();//延时for(i=1;i<8;i++)//实现广告灯的从右到左移动{a=temp<>(8-i);P1=b;//P1=a|b;delay();}for(i=1;i<8;i++)//实现广告灯的从左到右移动{a=temp>>i;b=temp<<(8-i);P1=b;//P1=a|b;delay();}}}三. 按键识别[实验任务]通过按下一次按键,使广告灯向左移动一位,直到最后一位,在向右移动[硬件电路](大家注意到这一个电路图与上一个实验的电路图只多了一个按键和一个5.1K的电阻[实验原理]从图中可以看出P2.1在按键没有按下时接的是高电平,按键按下时接的就是低电平了所以我们只要判断P2.1的电平就可以知道按键是否被按下了而在按键按下的过程中,由于抖动,将产生干扰,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的因此在按键按下的时候,要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用软件滤波的方法去除这些干扰信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。
我们在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程[C语言源程序]#include sbit BY1=P2^1; //定义按键的输入端unsigned char count; //按键计数,每按一下,count 加1unsigned char temp;unsigned char a,b;void delay10ms(void) //延时程序{unsigned char i,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}key() //按键判断程序{if(BY1==0) //判断是否按下键盘{delay10ms(); //延时,软件去干扰if(BY1==0) //确认按键按下{count++; //按键计数加1if(count==8) //计8次重新计数{ count=0; } //将count 清零}while(BY1==0);//按键锁定,每按一次count 只加1.}}四.数码管动态显示[实验任务]P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,动态显示“1234”字样;[硬件电路]注意:a接P0.0;b接P0.1;c接P0.3……注意:4H接P2.4;3H接P2.5;2H接P2.6;1H接P2.7[实验原理] 七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。
LED 数码管的 a-dp 七个发光二极管因以不同亮暗的组合就能形成不同的字形,这种组合称之为字形码下面给出共阴极的字形码:TKVZ,0 1 2 3 4 5 6 7 8 9 a 。