c51单片机独立按键控制三种c51流水灯汇编程序

51单片机学习之陆 —— 1.2 第一个c51程序(点亮流水灯) - 51单片机 - 电子工程世界网
51单片机学习之陆 —— 1.2 第一个c51程序(点亮流水灯)
10:54:21来源: eefocus 关键字:&&&&
由于学校的板子跟我买的板子有些差异,为了大家的阅读,以后的所有程序编写烧录都以老师发的板子为主。1 事先准备&  a&驱动安装,注意群中已经发了,吧板子的驱动装好哦。&  b&烧写软件(烧录器) stc -
&(这里说明下,板子上的芯片是stc的,你还能看到它的型号RC,用stc的烧写软件就可以了)   提问:什么是烧写软件?    答:就是把你写好代码(C或者是汇编)专程的机器语言通过一定的方式下载到中。称为烧写。(就先这样简单理解吧)&  c&编写软件 & uVision 4 (我仅用它编译生成hex 文件)        nod++ (我用它写的代码,然后复制到keil中。写代码很棒哦,而且是国产软件,最重要的是免费哦)   提问 :什么是编译软件?    答 : &编译软件可以将你在中写的一大堆代码编译成可以执行的相应文件。       &而在单片机中,利用keil将写好的c代码文件编译成可执行的.HEX文件。   &&2 开始吧!  1 通过usb将板子和电脑连接起来。(你应该会吧?)  2 打开notapad++ 写c (你也可以在keil中直接写,不过我不喜欢,原因到时候在说明)      注意! 1 #为头文件(有点像c语言对吧)必须有        2 sbit 1 = P1^0; 是位操作,记下来注意语句的结束要有 分号“;”哦         LED1 其实是一个变量名        3
main()是主函数有且只有一个    分析 :        &&&&&&&&&&P1^0 就是P10 也就是P1.0引脚 在主函数中有这样一句  LED1 = 0;  就是将P1.0 引脚置  关于电平  我们的学习中 0 就是低电平 0v &        &1 就是高电平 5v  这里计算机的的电平是MAX 高电平-12v,低电平+12v 所以不能直接与单片机相连  but! 单片机中有一个MAX232芯片,可以将电平经行转化 (可以查找pdf)  ok,这样我们就不用担心电平的问题了,再回到上,我们让P1.0置低电平这张图有些复杂,来看另外一张其实是一样的,P1.0置于低电平 左侧是vcc, 右侧低电平则电路有电势差,就有流过。如果反过来呢, P1.0置于高电平,电流无法通过二极管哦。ok 我想你应该理解了吧!3 编译程序生成hex文件  新建一个工程&&选择文件名,然后确定选择型号 AT这里说明下,keil是国外的软件并没有stc的型号(不过你可以自行添加)不过由于Ac51内核是一样的,所以用atmel AT89c51也是可以的继续new 或者(crtl+n)创建 然后将natePad++中写的代码复制进去(ctrl+c 和ctrl+v)点击保存,注意文件名(请最好不要出现中文,后缀一定的.c 应为是c文件)双击源组,添加c文件。&&&点击那个锤头再traget中设置下频率,11.0592Mhz (这个现在没用,不过先设置好吧)&一定记得勾引选create HEx File 点击确定&&点击rebuild 生成hex file 文件(此文件再你创建的51c文件目录中)&注意:hex文件名是工程名&  4 打开烧写软件 stc-isp(烧录器)&注意 1 选择好单片机型号 我们是    型号不对是无法成功烧写的哦。  2 选择好串口, 当驱动装好后,插上usb选择串口,一般是那个很长名字的这里就是com3  3 打开目标程序&&点击重复编程。显示检测目标单片机然后 按下单片机中的电源按键,关闭电源。再打开电源按键(这是单片机的冷启动~)显示操作成功即编写成功&5 效果图&&&&如图LED1 第一个流水灯就亮了。
关键字:&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。51单片机矩阵键盘与左右流水灯控制C程序
> 51单片机矩阵键盘与左右流水灯控制C程序
51单片机矩阵键盘与左右流水灯控制C程序
//第二次矩阵按键检测P3 = 0 //给P3口赋初值,使得矩阵按键的第二行置0,其余行为高电平;temp = P3;//将用于检测的值赋给变量temptemp &= 0xf0;if(temp != 0xf0){ delay(5);//消抖 //重新装入待于检测的初值; temp = P3; temp &= 0xf0; if(temp != 0xf0) { //确定矩阵按键有键被按下 //将此时的P3口的值赋给temp FM = 0; temp = P3; //开始检测switch(temp) { case 0xed: key1 = 5 * 5; case 0xdd: key1 = 6 * 6; case 0xbd: key1 = 7 * 7; case 0x7d: key1 = 8 * 8; default: } //检测按下释放 while(temp != 0xf0) { //重新装入初值 temp = P3; temp &= 0xf0; } delay(5);//释放去抖 while(temp != 0xf0) { //重新装入初值 temp = P3; temp &= 0xf0; } //按键释放关闭蜂鸣器 FM = 1; }}//第三次矩阵按键检测P3 = 0temp = P3;temp &= 0xf0;if(temp != 0xf0){ delay(5);//消抖 //重新装入检测初值 temp = P3; temp &= 0xf0; if(temp != 0xf0) { //将此时P3口的值赋给temp temp = P3; FM = 0;//蜂鸣器发声 //检测按下的是哪一个按键,行列检测switch(temp) { case 0xeb: key1 = 9 * 9; case 0xdb: key1 = 10 * 10; case 0xbb: key1 = 11 * 11; case 0x7b: key1 = 12 * 12; default: } //检测按键释放 while(temp != 0xf0) { temp = P3; temp &= 0xf0; } delay(5); while(temp != 0xf0) { temp = P3; temp &= 0xf0; } //按键释放关闭蜂鸣器 FM = 1; }}//第四次检测矩阵按键P3 = 0xf7;//第四行为低电平,其余行为高电平;temp = P3;//将待检测的值赋给temp;temp &= 0xf0;if(temp != 0xf0){ delay(5); //消抖 //重新装入检测初值 temp = P3; temp &= 0xf0; if(temp != 0xf0) { //确认有按键按下 //将此时的P3口的实际值赋给temp; temp = P3; FM = 0; //开始检测switch(temp) { case 0xe7: key1 = 13 * 13; case 0xd7: key1 = 14 * 14; case 0xb7: key1 = 15 * 15; case 0x77: key1 = 16 * 16; default: } //检测按键释放 while(temp != 0xf0) { //重新装入初值 temp = P3; temp &= 0xf0; } delay(5); while(temp != 0xf0) { temp = P3; temp &= 0xf0; } //关闭蜂鸣器 FM = 1; }}}//定时器0中断服务子程序void int_time0() interrupt 1{TH0 = 0xB8;TL0 = 0X00;counter++;if(flag== 0){ //流水灯左移流动 if(counter % 1 == 0) { P1 = ~(1 << x++); if(x == 8) { x = 0; } }}else{ //流水灯右移流动 if(counter % 1 == 0) { P1 = ~(0x80 >> x++); if(x == 8) { x = 0; } }}}本文引用地址:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一独立按键控制流水灯、蜂鸣器 - 其他技术 - 电子工程世界网
独立按键控制流水灯、蜂鸣器
11:57:35来源: 51hei
sbit KEY1=P2^0;
sbit KEY2=P2^1;
sbit KEY3=P2^2;
sbit KEY4=P2^3;
sbit BELL=P2^4;
sbit RED1=P1^0;
sbit YEL1=P1^1;
sbit GRE1=P1^2;
sbit RED2=P1^3;
sbit YEL2=P1^4;
sbit GRE2=P1^5;
sbit RED3=P1^6;
sbit YEL3=P1^7;
sbit GRE3=P3^0;
sbit RED4=P3^1;
sbit YEL4=P3^2;
sbit GRE4=P3^3;
#define uint unsigned int
void Delay(uint);
void Key();
void Bell(uint);
void main()
void Key()
if(KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0)
& Delay(2);&&&& //20??????????&????&??????
& if(KEY1 == 0)
&& RED1=0;
&& RED2=0;
&& RED3=0;
&& RED4=0;
&& Bell(10);
& else if(KEY2 == 0)
&& YEL1=0;
&& YEL2=0;
&& YEL3=0;
&& YEL4=0;
&& Bell(10);
& else if(KEY3 == 0)
&& GRE1=0;
&& GRE2=0;
&& GRE3=0;
&& GRE4=0;
&& Bell(10);
&& RED1=0;
&& RED2=0;
&& RED3=0;
&& RED4=0;
&& YEL1=0;
&& YEL2=0;
&& YEL3=0;
&& YEL4=0;
&& GRE1=0;
&& GRE2=0;
&& GRE3=0;
&& GRE4=0;
&& Bell(10);
& Delay(50);&& //??????&0.5????????????????????????&????&??????&????
&&&& RED2=1;
void Bell(uint a)
for(b=100;b>0;b--)
& Delay(a);
& Delay(a);
void Delay(uint z)
for(x=100;x>0;x--)
& for(y=z;y>0;y--);
关键字:&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。按键控制流水灯程序
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
按键控制流水灯程序
&&&&& 最近有很多学弟来问我流水灯该怎么做,程序怎么写,现在在这里统一说下,很多时候没有时间让你们白跑一趟了,O(&_&)O~。
&&&&& 首先就说到单片机了,单片机对于你们来说是个新概念,可能以前都没听说过。我想说的是它不是传统意义上的集成电路,只能按照特定的焊接来能工作,而是一块类似电脑CPU的芯片,对于一块正常的单片机,只要你提供合适的工作电源(4V都5.5V左右)、复位电路 、起振电路它就可以工作了。所有的输入输出口(以P开头的)都是可以灵活配置的,可以根据你焊接的硬件电路写程序,也可以根据你写的程序焊接硬件电路。所以没有必要死板硬套。前天没事写了一下,仿真了一下还可以用。源码贴于下方供入门者参考,高手勿嘲笑,大家都是从流水灯程序写起的 (*^__^*) 嘻嘻&&
&&&&& 再就是我的51开发板不知道是谁借走了,很久没有用过51单片机了,所以下载程序的事就不要来找我了。我把编译过后的代码也贴在下面,如果硬件和我做的一样的同学又不会写程序的就直接复制下面编译过后的代码,在电脑上新建一个文本文档(.txt)命名任意,将复制后的代码粘贴于记事本上,然后重命名,将&.txt&改为&.hex&,保存,然后通过下载器下载到单片机里面去就可以用了。
&&&&& 不会的多去 看一下教程。以下仅供参考,不得一味模仿&&&&&&&
/***************************************************************************************************************
晶振频率12Mhz
八位数码管采用共阳极接法(所有阳极接一起接Vcc,阴极接P0口)
按键分别接P2.0& P2.1& P2.2(低电平有效)
编译软件采用keil 4
*******************************************************************************************************************************************************/
#include &reg52.h&
#define uint unsigned int
#define uchar unsigned char
sbit key1 =P2^0; //按键1
sbit key2 =P2^1; //按键2
sbit key3 =P2^2; //按键3
uchar flag1=0,flag2=0,flag3=0;
void delay_ms(uint z)
&&&& uint i,j;
&&&& for(i=0;i&z;i++)
&&&& for(j=0;j&110;j++);
void O_to_E() //1,3,5,7与2,4,6,8交替闪烁
&&&& P0=0X
&&&& delay_ms(200);
&&&& P0=~0X
&&&& delay_ms(200);
void key_scan()&&& //键盘扫描
&&&& if(!key1)
&&&&&&&&& delay_ms(10); //延时消抖
&&&&&&&&& if(!key1)
&&&&&&&&& flag1=1;
&&&& if(!key2)
&&&&&&&&& delay_ms(10); //延时消抖
&&&&&&&&& if(!key2)
&&&&&&&&&& flag2=1;
&&&&&&&& }
&&&& if(!key3)
&&&&&&&&& delay_ms(10); //延时消抖
&&&&&&&&& if(!key3)
&&&&&&&&&& flag3=1;
void main()
&&&& while(1)
&&&&&&&&&&& key_scan();
&&&&&&&&&&& if(flag1)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //按键一按下?&&&&&&&&&&&&&&&
&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&& for(i=0;i&8;i++)&&&&&&&&&&& //从左至右亮,每次一盏&&&&&&&&&&&
&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&& P0=~(0x80&&i);
&&&&&&&&&&&&&&&&&&&&&&&&&&& delay_ms(100);
&&&&&&&&&&&&&&&&&&&&&&&&&&& key_scan();&&&&&&&&&&&&&&&& //按键扫描&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& if(flag2||flag3){flag1=0;}&&&&&&& //如果有其它按键按下响应其它按键
&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&& }
&&&&&&&&&&&& if(flag2)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //按键一按下?&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& for(i=0;i&8;i++)&&&&&&&&&&&& //从右至左亮,每次一盏&
&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&& P0=~(0x01&&i);
&&&&&&&&&&&&&&&&&&&&&&&&&&& delay_ms(100);
&&&&&&&&&&&&&&&&&&&&&&&&&&& key_scan();
&&&&&&&&&&&&&&&&&&&&&&&&&&& if(flag1||flag3){flag2=0;}
&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&& }
&&&&&&&&&&&&& if(flag3)
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&& O_to_E();&&&&&&&&&&&&&&&&&&&&&&&&&&&& //奇偶交替闪烁
&&&&&&&&&&&&&&&&&& key_scan();
&&&&&&&&&&&&&&&&&& if(flag1||flag2)flag3=0;
&&&&&&&&&&&&& }
/***********************************************************************************************************************
编译过后的文件
注意:复制下面的代码(注意不要包含本句,注意不要改变格式)
:FDFCC3ED9FEC9E5015E4FBFA0BBB000E
:0FAEB646E4A70F50DBD
:0A00F400F4F20127FE
:AAA10912D6
:FE1200FEEF
:02C313D8FC
:01A3D8FCDB
:04E50A09B908E3E50AD5
:BFEE60A344
:F50A809E0B
:0CFE4F6D8FDAFF
:8FE493A3F8E493AF278
:DFFFC333F2
:60BCA3FF543F30E509541FFEE493B6
:010ECF54C025E060A840B8E493A37D
:10006F00FAE493A3F8E493A3C8C582C8CAC583CAA8
:A3C8C582C8CAC583CADFE9DEE780BE60
结束(注意不要包含本句及上面的※号,注意不要改变格式!)
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
利用80c51单片机实现按键控制流水灯及其显示
下载积分:200
内容提示:利用80c51单片机实现按键控制流水灯及其显示
文档格式:DOC|
浏览次数:596|
上传日期: 21:20:48|
文档星级:&#xe60b;&#xe60b;&#xe60b;&#xe60b;&#xe60b;
全文阅读已结束,如果下载本文需要使用
&#xe71b; 200 积分
&#xe602;下载此文档
该用户还上传了这些文档
利用80c51单片机实现按键控制流水灯及其显示
关注微信公众号

我要回帖

更多关于 c51单片机流水灯程序 的文章

 

随机推荐