找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2857|回复: 1
打印 上一主题 下一主题
收起左侧

我是新手,刚接触单片机才两天,做了个小玩意

[复制链接]
跳转到指定楼层
楼主
3个led是共阳三色灯,我的原理是利用P1口的P1.0,P1.1,P1.2输出000-111以到达一个灯显示八种状态,用按键来控制
第一宗方案我用中断,(其实我不会用中断,改别人的程序的)
#include<reg52.h>  
       //库文件
#define uchar unsigned char//宏定义无符号字符型
uchar dispcount=0; //计数初值

/********************************************************************
                            显示函数
*********************************************************************/        
void Led() //显示函数
{

P1=dispcount;
}
/********************************************************************
                            中断服务函数
*********************************************************************/
void ExtInt0() interrupt 0 //中断服务程序
{

dispcount++; //每按一次中断按键,计数加一

if (dispcount==8) //计数范围0-8

{

dispcount=0;

}
}
/********************************************************************
                            主函数
*********************************************************************/
void main()
{

TCON=0x01; //中断设置

IE=0x81;

while(1)

{
  
   
Led();
   }

}
这里用的是中断0,,按键要加P3.2我想问要接P3.3改真名改程序,我还不会用中断
第二种方案我用了按键判断,之前的没加入延时去抖动,这次加了延时去抖动
#include<reg52.h>  
       //库文件
#define uchar unsigned char//宏定义无符号字符型
uchar dispcount=0; //计数初值
sbit BY1=P3^2; //定义按键的输入端(为单片机P3口的P3.2按键)
/********************************************************************
                            显示函数
*********************************************************************/        
void Led() //显示函数
{

P1=dispcount;
}
/********************************************************************
                            延时函数
*********************************************************************/
void delay10ms(void) //延时程序
{
uchar i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
/********************************************************************
                           按键判断函数
*********************************************************************/
void key() //按键判断程序
{

if(BY1==0) //判断是否按下键盘

{

delay10ms(); //延时,软件去干扰

if(BY1==0) //确认按键按下

{

dispcount++; //按键计数加1

if(dispcount==8) //计8次重新计数

{

dispcount=0;//将dispcoun 清零

}

}

while(BY1==0);//按键锁定,每按一次dispcoun 只加1.

}
}
/********************************************************************
                            主函数
*********************************************************************/
void main()
{

while(1)

{
  
   
key();

Led();
    }
}

ourhc.JPG (40.27 KB, 下载次数: 130)

ourhc.JPG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:58502 发表于 2014-1-3 20:11 | 只看该作者
现在打算拿这个三色LED做个七彩流水灯,用七个LED做成流水灯,将它们相同颜色的负极接一块,这样就形成一个类似于三位数码管的东西,打算让七个灯用动态扫描的方式,在同一时刻七个灯显示七种颜色,过一段时间,换一种组合。。。{:soso_e116:}这对刚玩单片机才两天的我还真是有点挑战。。先去弄电路
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表