




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 点亮开发板上的第1个发光管#include <reg51.h> /包含头文件,在“reg51.h”上右键单击,并打开,可以看到它里面的定义 /当然也可以改成 reg52.h STC.H 功能一样的,只是定义的IO口有一点区别,51单片机可以通用。sbit led=P10; /定义一个LED 为P1.0 IO口void main() /C语言主函数 led=0; /单片机IO P1.0脚输出一个低电平,点亮发光管。 高电平为5V 低电平为0。while(1);2. 用逐位赋值的方法点亮第一、第三、第五、第七个发光二极管#include <reg51.h> /包含头文
2、件,在“reg51.h”上右键单击,并打开,可以看到它里面的定义sbit led1=P10; /第一个led是和P10口连接的。sbit led3=P12;sbit led5=P14;sbit led7=P16;void main()led1=0; /参照电路图可知,P10为低电平,可以让led1点亮。led3=0;led5=0;led7=0;while(1);/此处设置一个死循环,让程序停留在这里,防止跑飞。3. 用总线操作的方法点亮第一、第三、第五、第七个发光二极管#include <reg51.h> /包含头文件,在“reg51.h”上右键单击,并打开,可以看到它里面的定义v
3、oid main()P1=0XAA; /对P1口的八位一起操作,高低电平分配为10101010,为0的位对应的二极管被点亮。while(1);4. 让一LED闪烁十次后停止#include <reg51.h>sbit led=P10;void delay(unsigned int i)unsigned int j;unsigned char k;for(j=i;j>0;j-)for(k=125;k>0;k-);void main()unsigned char m;for(m=20;m>0;m-)led=led;/没隔一段时间即对输出取反。delay(3000);
4、/闪烁间隔。while(1); /闪烁十次后,到此不再闪烁。5. 使八位LED逐位移动并不断循环#include <reg51.h>#include <intrins.h> /这个头文件是这个方法的核心,它包含了逐步移位函数功能,即程序中的_crol_(P1,y)sbit led=P10;void delay(unsigned int i)unsigned int j;unsigned char k;for(j=i;j>0;j-)for(k=125;k>0;k-);void main()P1=0xfe;delay(1000);while(1)/unsigne
5、d char m;/P1=0xfe;/delay(1000);/for(m=7;m>0;m-)P1=_crol_(P1,1); /P1逐步左移一位。delay(1000);6. 使八位LED逐位移动并不断循环,该方法采用逐个查表赋值的方法#include <reg51.h>unsigned char table=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;void delay(unsigned int i)unsigned int j;unsigned char k;for(j=i;j>0;j-)for(k=125;k>0;k-
6、);void main()while(1)unsigned char m;for(m=0;m<8;m+)P1=tablem;delay(2000);7. 用四个led指示HJ-3G实验板键盘最下面一排的四个按键状态。当按键按下时,对应led亮;松开后,对应led灭#include<reg51.h>sbit s2=P34;sbit s3=P35;sbit s4=P36;sbit s5=P37;sbit led1=P10;sbit led2=P11;sbit led3=P12;sbit led4=P13;void main()while(1)if(s2=0)led1=0;else
7、led1=1;if(s3=0)led2=0;elseled2=1;if(s4=0)led3=0;elseled3=1;if(s5=0)led4=0;elseled4=1;8.流水灯#include<reg52.h>#include<intrins.h>void delay(unsigned char i)unsigned char m,n;for(m=i;m>0;m-)for(n=125;n>0;n-);void main()unsigned char k;while(1)P1=0xfe;for(k=0;k<8;k+)delay(2000);P1=_c
8、rol_(P1,1);9. 流水灯 #include<reg52.h>void delay(unsigned char i)unsigned char m,n;for(m=i;m>0;m-)for(n=125;n>0;n-);void main()while(1)P1=0x7e;delay(2000);P1=0xbd;delay(2000);P1=0xdb;delay(2000);P1=0xe7;delay(2000);P1=0xdb;delay(2000);P1=0xbd;delay(2000);P1=0x7e;delay(2000);10. 流水灯 #include
9、<reg51.h>void delay(unsigned char i)unsigned char m,n;for(m=i;m>0;m-)for(n=125;n>0;n-);void main()unsigned char m=255;while(1)P1=m;delay(2000);m-;11. 当按键按下时,led亮;松开后,灭。 #include<reg51.h>sbit k1=P34;sbit led=P10;void main()while(1) /通过大循环不断扫描按键状态if(k1=0)led=0;elseled=1;12. 本程序以HL-1
10、学习板中的k1键为例,模拟其具有2种功能, 一是点亮一个发光二极管,二是蜂鸣器发声#include<reg52.h>#define uchar unsigned char uchar num;sbit beep=P23;sbit led=P10;sbit k1=P34;void delay(uchar i)uchar j,k;for(j=i;j>0;j-)for(k=125;k>0;k-);void main()while(1)if(k1=0)delay(20); /消抖if(k1=0)while(!k1); /等待按键松开num+;switch(num)case 1:
11、 led=0;beep=1; break;case 2: beep=0;led=1;num=0; break;13. 使用HL-1 实验板键盘最下面一排左侧的S2键,控制一LED的亮灭。按下后松开,led亮;按下后再松开,led灭。#include<reg51.h>sbit s2=P34; /采集按键状态,此时作为输入引脚sbit led=P10; /此时作为输出引脚。void delay(unsigned char p)unsigned char m,n;for(m=p;m>0;m-)for(n=125;n>0;n-);void main()while(1) if(s
12、2=0) delay(10); /消抖if(s2=0)while(!s2);/等待按键松开。led=led;14. 不管两个开关当前的状态如何,只要有一个开关状态发声变化,都会使照明灯在打亮或者熄灭两种状态间切换。#include <reg52.h>sbit light=P10;sbit s1=P34;sbit s2=P35;bit change,s1sta,s2sta;/s1sta,s2sta为开关s1和s2前一时刻的状态,用来和当前的s1与s2状态进行对比, /进而判决两个开关的状态有无发生变化。bit keyscan()if(s1s1sta)|(s2s2sta) /为异或,若
13、两者不同,则结果为1。即若两开关中,任一开关的状态发生变化,则此条件即为真。change=1;return change;void main()s1sta=s1;s2sta=s2;while(1)keyscan(); /扫描按键状态是否变化,即是否有人更改了按键状态。if(change)change=0; /清零light=light; /一旦发现有开关状态发生了变化,则灯的状态就取反。(若以前亮,则熄灭;反之则打亮)s1sta=s1; /同时,将s1和s2的当前状态送给s1sta和s2sta,为以后的比较做准备。s2sta=s2;15. 4*4键盘检测程序,按下键后相应的代码显示在数码管上#
14、include<reg51.h>sbit beep=P23;sbit dula=P26;sbit wela=P27; unsigned char i=100;unsigned char j,k,temp,key;void delay(unsigned char i) for(j=i;j>0;j-) for(k=125;k>0;k-);unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;display(unsign
15、ed char num) P0=tablenum; dula=1; dula=0; P0=0xc0; wela=1; wela=0;void main() dula=0; wela=0; while(1) P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); 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; bre
16、ak; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P1=0xfe; P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(tem
17、p!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; while(temp!=0xf0) temp=P3; te
18、mp=temp&0xf0; beep=0; beep=1; display(key); P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0;
19、beep=0; beep=1; display(key); 16. 通过键盘采集所按下的数据,并在按下确定键(S17)后,将按下的键组合为一整数。 按键功能S6-S15 数字键09,S17 确定输入#include<reg51.h>#define uchar unsigned charsbit dula=P26;sbit wela=P27;sbit beep=P23;uchar a=16,b=16,c=16,d=16,e=16,f=16;uchar wei,temp,key,ok;uchar s1,s2,s3,s4,s5,s6;unsigned long shu;unsigned
20、char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;void delay(uchar i)uchar j,k;for(j=i;j>0;j-)for(k=125;k>0;k-);void keyscan() P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xee: key
21、=0; wei+; break; case 0xde: key=1; wei+; break; case 0xbe: key=2; wei+; break; case 0x7e: key=3; wei+; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; wei+; br
22、eak; case 0xdd: key=5; wei+; break; case 0xbd: key=6; wei+; break; case 0x7d: key=7; wei+; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=8; wei+; break; case 0x
23、db: key=9; wei+; break; case 0x7b: ok=1; /key=11; /wei+; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f) dula=0; P0=tablea; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=tableb; dula=1; dula=0; P0=0xf
24、d; wela=1; wela=0; delay(5); P0=tablec; dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(5); P0=tabled; dula=1; dula=0; P0=0xf7; wela=1; wela=0; delay(5); P0=tablee; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(5); P0=tablef; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(5);void main()while(1)keysc
25、an();if(wei!=0) /实时显示switch(wei)case 1: a=key;s1=a; break;case 2: b=key;s2=b; break;case 3: c=key;s3=c; break;case 4: d=key;s4=d; break;case 5: e=key;s5=e; break;case 6: f=key;s6=f; break;if(ok) /将采集到的单个数据转化为一个整数。ok=0;switch(wei)case 1: shu=s1; break;case 2: shu=s2+s1*10; break;case 3: shu=s3+s2*10+
26、s1*100; break;case 4: shu=s4+s3*10+s2*100+s1*1000; break;case 5: shu=s5+s4*10+s3*100+s2*1000+s1*10000; break;case 6: shu=s6+s5*10+s4*100+s3*1000+s2*10000+s1*100000; break;wei=0;/f=16;e=16;d=16;c=16;b=16;a=16;s1=0;s2=0;s3=0;s4=0;s5=0;s6=0;display(a,b,c,d,e,f);17. 第一个数码管静态的显示数字3#include <reg51.h>
27、;sbit dula=P26;/段选信号的锁存器控制sbit wela=P27;/位选信号的锁存器控制void main()dula=0;wela=0;P0=0x4f; /数字“3”的代码dula=1;dula=0;P0=0xfe; /选中第一个数码管wela=1;wela=0;while(1);18六个数码管流动地显示数字3#include <reg51.h>sbit dula=P26;/段选信号的锁存器控制sbit wela=P27;/位选信号的锁存器控制unsigned char code table=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/数码管各位的
28、码表void delay(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);void main()unsigned char num;while(1)for(num=0;num<6;num+)P0=tablenum; wela=1;wela=0;P0=0x4f; /数字“3”的代码dula=1;dula=0;delay(2);19. 学习板的第一个数码管动态地显示数字0到F#include <reg51.h>sbit dula=P26;/段选信号的锁存器控制sbit w
29、ela=P27;/位选信号的锁存器控制unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0-F的码表void delay(unsigned int i)unsigned int m,n;for(m=i;m>0;m-)for(n=90;n>0;n-);void main()unsigned char num;while(1)for(num=0;num<16;num+)P0=tablenum; dula=1;dula=
30、0;P0=0xfe; /选中第一个数码管wela=1;wela=0;delay(1000);20. 六位数码管显示任意一个百万以下的整数。程序中的变量num就是被显示的整数(原程序中num=87530)#include<reg52.h>#define uchar unsigned char unsigned long num;uchar j,k;uchar a0,b0,c0,d0,e0,f0;sbit dula=P26;sbit wela=P27;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x
31、7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;void delay(uchar i)for(j=i;j>0;j-)for(k=125;k>0;k-);void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f) dula=0; P0=tablea; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=tableb; dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(5
32、); P0=tablec; dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(5); P0=tabled; dula=1; dula=0; P0=0xf7; wela=1; wela=0; delay(5); P0=tablee; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(5); P0=tablef; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(5);void main()num=87530;/这个是被显示的整数,只要不超过六位,均可显示出来。/同学
33、们可以随意更改这个num变量的值试验下。while(1)if(num<10)a0=num;b0=16;c0=16;d0=16;e0=16;f0=16;elseif(num<100)a0=num/10;b0=num%10;c0=16;d0=16;e0=16;f0=16;elseif(num<1000)a0=num/100;b0=num%100/10;c0=num%10;d0=16;e0=16;f0=16;elseif(num<10000)a0=num/1000;b0=num%1000/100;c0=num%100/10;d0=num%10;e0=16;f0=16;else
34、if(num<100000)a0=num/10000;b0=num%10000/1000;c0=num%1000/100;d0=num%100/10;e0=num%10;f0=16;elseif(num<1000000)a0=num/100000;b0=num%100000/10000;c0=num%10000/1000;d0=num%1000/100;e0=num%100/10;f0=num%10;display(a0,b0,c0,d0,e0,f0);21. 记录HJ-3G 实验板上S2键按下的次数,并用数码管显示出来#include<reg52.h>#define
35、uchar unsigned char unsigned long num;uchar j,k;uchar a0,b0,c0,d0,e0,f0;sbit dula=P26;sbit wela=P27;sbit s2=P34;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;void delay(uchar i)for(j=i;j>0;j-)for(k=125;k>0;k-);void display(uchar
36、a,uchar b,uchar c,uchar d,uchar e,uchar f) dula=0; P0=tablea; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=tableb; dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(5); P0=tablec; dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(5); P0=tabled; dula=1; dula=0; P0=0xf7; wela=1; wela=0; del
37、ay(5); P0=tablee; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(5); P0=tablef; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(5);void keyscan()if(s2=0)while(s2=0);num+;void main()while(1)keyscan();if(num<10)a0=num;b0=16;c0=16;d0=16;e0=16;f0=16;elseif(num<100)a0=num/10;b0=num%10;c0=16;d0=16;e0
38、=16;f0=16;elseif(num<1000)a0=num/100;b0=num%100/10;c0=num%10;d0=16;e0=16;f0=16;elseif(num<10000)a0=num/1000;b0=num%1000/100;c0=num%100/10;d0=num%10;e0=16;f0=16;elseif(num<100000)a0=num/10000;b0=num%10000/1000;c0=num%1000/100;d0=num%100/10;e0=num%10;f0=16;elseif(num<1000000)a0=num/100000;
39、b0=num%100000/10000;c0=num%10000/1000;d0=num%1000/100;e0=num%100/10;f0=num%10;display(a0,b0,c0,d0,e0,f0);22. 让HJ-3G 实验板的第一位闪烁地显示数字3#include <reg51.h>sbit dula=P26;/段选信号的锁存器控制sbit wela=P27;/位选信号的锁存器控制void delay(unsigned int i)unsigned int m,n;for(m=i;m>0;m-)for(n=90;n>0;n-);void main()whi
40、le(1)P0=0xfe; wela=1;wela=0;P0=0x4f; /数字“3”的代码dula=1;dula=0;delay(1000);P0=0x00; /什么都不显示的代码dula=1;dula=0;delay(1000);23. 让HJ-3G 实验板的六位数码管轮流显示数字0到5#include <reg51.h>sbit dula=P26;/段选信号的锁存器控制sbit wela=P27;/位选信号的锁存器控制unsigned char code wei=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/数码管各位的码表unsigned char code duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d;/0-5的码表void delay(unsigned int i)unsigned int m,n;for(m=i;m>0;m-)for(n=90;n>0;n-);void main()unsigned char num;while(1)for(num=0;num<6;num+)P0=weinum; wela=1;wela=0;P0=duannum; dula=1;dula=0;delay(1000); 24. 让HJ-3G 实验板的六位数码管轮流显示数字0到5 #includ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级语文下册 第六课 阿西莫夫短文两篇第1课时教学实录 新人教版
- 北师大版二年级数学下册教学计划及进度表
- 2024-2025学年高中英语 Unit 23 Conflict Section Ⅵ Language Points(Ⅲ)(教师用书)教学实录 北师大版选修8
- 七年级地理上册 第一章 第四节 地形图的判读教学实录2 (新版)新人教版
- 75号令考试内容
- ns金手指使用方法
- 食品行业的质量控制与评估计划
- 不断进步的工作计划
- 年度绩效考核的有效方法计划
- 血液透析并发症护理查房
- DB11T 1832.10-2022 建筑工程施工工艺规程 第10部分:装饰装修工程
- 气胸完整版本
- 湘教版六年级下册全部美术教案课程
- 第一章-政府会计概述
- 2024住院患者静脉血栓栓塞症预防护理与管理专家共识要点(全文)
- 2023年浙江宁波文旅会展集团有限公司招聘考试真题
- 2024年积分制管理实施方案及细则
- 新苏教版科学六年级上实验报告单
- 异地就医备案的个人承诺书
- 电动汽车自用桩安装承诺书
- 2023年10月自考00150金融理论与实务试题及答案含解析
评论
0/150
提交评论