Keil及C语言常用程序(70页).doc
《Keil及C语言常用程序(70页).doc》由会员分享,可在线阅读,更多相关《Keil及C语言常用程序(70页).doc(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-Keil及C语言常用程序-第 69 页在个人的单片机开发板c语言程序及模块设计总结目录Keil 软件的使用2*LED 显示输出*8一. 闪烁灯9二.广告灯的左移右移10三. 按键识别14四.数码管动态显示15五.44 矩阵式键盘识别17六按键中断识别19七.定时器 T0 的应用-9.9 秒计时设计21八.利用定时器产生乐曲23九数摸转换 ADC0804 的应用26十摸数转换 DAC0832的应用32十一24CO8 的读写操作35十二PC 机与单片机通信(RS232 协议)39十三.DS18B20 测量温度系统41十四.128X64 液晶显示器的基本应用45十五.标准键盘 PS2与单片机通信4
2、7十六,128X64无字库液晶4X4键盘输入使用(密码锁)51十七、串口下载线57*LED 显示输出*很明显,要点亮使发光二极管,必须使单片机的I/O口P1.0输出低电平。于是我们的任务就是编程序使P1.0输出地电平。#include /*LED 显示输出 具体口输出*/sbit P1_0=P10; /*定义p1.0为p1_0 */sbit P1_2=P32;/*定义p3.2为p1_2 */sbit P1_3=P03;/*定义p0.3为p1_3 */main()P1_0=0;/*输出高电平 即:灯亮 */P1_1=0;P1_2=0;P1_3=0;#include /* LED 显示输出 整体输
3、出*/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;i0;i-)for(j=20;j0;j-)for(k=248;k0;k-);sbit P1_0=P10;main()while(1)/*永远为真,一直执行下去*/P1_0=0;del();P1_0=
4、1;del();#include reg52.h /#define uchar unsigned char /#define uint unsigned int sbit P10=P10; void mDelay(unsigned int Delay) unsigned int i; for(;Delay0;Delay-) for(i=0;i124;i+) void main() for(;) P10=!P10; /取反 mDelay(1000); /延时1秒。如果是2000那么是2秒实验任务上,输出“0”P3.0亮,重复循环。(当然,四个输出口可以同时实现广告灯)硬件电路#include /
5、*广告灯的左移右移*/unsigned char i;unsigned char temp;unsigned char a,b;delay()/延时程序unsigned char m,n,s;for(m=20;m0;m-)for(n=20;n0;n-)for(s=248;s0;s-);main()while(1)temp=0xfe;P3=P2=P0=P1=temp;/直接对1/0口p3赋值,使批p3.0输出低电平。delay();/延时for(i=1;i8;i+)/实现广告灯的从右到左移动a=temp(8-i);P3=P2=P0=P1=a|b;delay();for(i=1;ii;b=temp
6、0;Delay-) for(i=0;i124;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;m0;m-)for(n=20;n0;n-)for(s=248;s0;s-);main(
7、)while(1)temp=0xfe;P1=temp;/直接对1/0口p3赋值,使批p3.0输出低电平。delay();/延时for(i=1;i8;i+)/实现广告灯的从右到左移动a=temp(8-i);P1=b;/P1=a|b;delay();for(i=1;ii;b=temp(8-i);P1=b;/P1=a|b;delay();三. 按键识别实验任务通过按下一次按键,使广告灯向左移动一位,直到最后一位,在向右移动。硬件电路(大家注意到这一个电路图与上一个实验的电路图只多了一个按键和一个5.1K的电阻。)实验原理从图中可以看出P2.1在按键没有按下时接的是高电平,按键按下时接的就是低电平了。
8、所以我们只要判断P2.1的电平就可以知道按键是否被按下了。而在按键按下的过程中,由于抖动,将产生干扰,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。因此在按键按下的时候,要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用软件滤波的方法去除这些干扰信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。我们在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平
9、,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程。C语言源程序#include sbit BY1=P21; /定义按键的输入端unsigned char count; /按键计数,每按一下,count 加1unsigned char temp;unsigned char a,b;void delay10ms(void) /延时程序unsigned char i,j;for(i=20;i0;i-)for(j=248;j0;j-);key() /按键判断程序if(BY1=0) /判断是否按下键盘delay10ms(); /延时,软件去干扰if(BY1=0) /
10、确认按键按下count+; /按键计数加1if(count=8) /计8次重新计数 count=0; /将count 清零while(BY1=0);/按键锁定,每按一次count 只加1.move( ) a=temp(8-count);P3=a|b;main()count=0;temp=0xfe;P3=0xff;P3=temp;while(1)key();move();实验任务P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,动态显示“1234”字样;硬件电路实验原理 七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型
11、和共阳极型。LED 数码管的 a-dp 七个发光二极管因以不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。下面给出共阴极的字形码:TKVZ,0 1 2 3 4 5 6 7 8 9 a b c d e f 0 0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e 1 2 3 4 5 6 7 8 9 a b c d e f C语言源程序#include code unsigned char seg7code10= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0
12、x80,0x90; /显示段码 数码管字跟:/0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x40,/ 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 /0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e/ 1 2 3 4 5 6 7 8 9 a b c d e fDelay(unsigned int tc) /延时程序while( tc != 0 ) /如果tc
13、 为0 则终止延时unsigned int i; /局部正整数变量 ifor(i=0; i100; i+); /执行100 次将耗时1毫秒tc-; /tc计数减一void Led(int date) /显示函数P2=P2&0x7f; /P2.7 输出低电平,选通千位数P0=seg7codedate/1000; /取出千位数,查表,输出。Delay(8); /延时P2=P2|0xf0; /销隐P2=P2&0xbf; /P2.6 输出低电平,选通百位数P0=seg7codedate%1000/100; /取出百位数,查表,输出。Delay(8); /延时P2=P2|0xf0; /销隐P2=P2&0
14、xdf; /P2.5 输出低电平,选通十位数P0=seg7codedate%100/10; /取出十位数,查表,输出。Delay(8); /延时P2=P2|0xf0; /销隐P2=P2&0xef;P0=seg7codedate%10; /取出个位数,查表,输出。Delay(8);P2=P2|0xf0;main()int display_date=1234; /定义并赋值要显示的数据while(1)Led(display_date);/调用显示函数显示数据display_date4 矩阵式键盘识别实验任务用AT89S51的并行口P3接4P3.7作输出线;在每一个数码管上显示每个按键的“0F”序号
15、。硬件电路 实验原理每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。C语言源程序#include unsigned char code seg7code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
16、0xc6,0xa1,0x86,0x8e ;unsigned char k;void delay10ms(void) /延时程序unsigned char i,j;for(i=20;i0;i-)for(j=248;j0;j-);void Getch ( ) unsigned char X,Y,Z;P3=0xff;P3=0x0f; /先对P3 置数 行扫描if(P3!=0x0f) /判断是否有键按下delay10ms(); /延时,软件去干扰if(P3!=0x0f) /确认按键按下X = P3;X=P3; /保存行扫描时有键按下时状态P3=0xf0; /列扫描Y=P3; /保存列扫描时有键按下时状
17、态Z=X|Y; /取出键值switch ( Z ) /判断键值(那一个键按下)case 0xee: k=0; break; /对键值赋值case 0xde: k=1; break;case 0xbe: k=2; break;case 0x7e: k=3; break;case 0xed: k=4; break;case 0xdd: k=5; break;case 0xbd: k=6; break;case 0x7d: k=7; break;case 0xeb: k=8; break;case 0xdb: k=9; break;case 0xbb: k=10;break;case 0x7b: k
18、=11;break;case 0xe7: k=12;break;case 0xd7: k=13;break;case 0xb7: k=14;break;case 0x77: k=15;break; /请注意写程序时的格式规范,此处是为了节省纸张void main(void)while(1) P3=0xff;Getch();P0=seg7codek; /查表LED输出P2=0x0f; /输出相同的四位数据。六按键中断识别实验任务采用中断技术,每按一下按键,计数器加1,并用LED显示出来。硬件电路注意:我们只用4位数码管中的两位。注意: 2H接P2.0; 1H接P2.1; 中断按键已经接好。C语言
19、源程序#includeunsigned char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char dispcount=0; /计数sbit gewei=P20; /个位选通定义sbit shiwei=P21; /十位选通定义void Delay(unsigned int tc) /延时程序 while( tc != 0 )unsigned int i;for(i=0; i=10) /显示两位数shiwei=0;P0=tabledispcount/10;Delay(8);shiwei=1;gew
20、ei=0;P0=tabledispcount%10;Delay(5);gewei=1;else /显示一位数shiwei=1; gewei=0;P0=tabledispcount;Delay(8);void main() TCON=0x01; /中断设置IE=0x81;while(1) /循环执行LED(); /只须调用显示函数七.定时器 T0 的应用-9.9 秒计时设计实验任务开始时,显示“00”,第 1 次按下 BY1 后就开始计时。第 2 次按 BY1 后,计时停止。 第3次按BY1后,计时归零。硬件电路C语言源程序#include /必须用这个子函数库unsigned char cod
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Keil 语言 常用 程序 70
限制150内