这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » jianzhangx MCU DIY进程帖

共25条 1/3 1 2 3 跳转至

jianzhangx MCU DIY进程帖

助工
2011-12-13 08:44:45     打赏
按键控制数码管加减实验
按下S1后加1计数,按下S2后减1计数,按下S3后清零。
图片如下:

程序如下:

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//段码

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//待显示的3位缓冲

uchar Num_Buffer[]={0,0,0};

//按键代码,按键计数

uchar Key_Code,Key_Counts=0;

//延时

void DelayMS(uint x)

{

       uchar i;

       while(x--) for(i=0;i<120;i++);

}    

//显示函数

void Show_Counts_ON_DSY()

{

       uchar i,j=0x00;

       Num_Buffer[0]=Key_Counts/100;

       Num_Buffer[1]=Key_Counts/10%10;

       Num_Buffer[2]=Key_Counts%10;

       for(i=0;i<3;i++)

       {

              P2=i;

              P0=0x00;

              P0=~DSY_CODE[Num_Buffer[i]];

             

              DelayMS(20);

       }

}

//主程序

void main()

{

       uchar i;

       P0=0x00;

       P2=0x00;

       //P2=0x00;

       Key_Code=0xff;

       while(1)

       {

              Show_Counts_ON_DSY();

              P3=0xff;

             

              //有键按下时,数码管刷新显示30次,该行代码同时起到延时作用

             

              for(i=0;i<30;i++) Show_Counts_ON_DSY();

              Key_Code=P3;

              if(Key_Code!=0xff)

              switch(Key_Code)

              {

                     case 0xfe:       if(Key_Counts<255) Key_Counts++;

                                          break;

                     case 0xfd:       if(Key_Counts>0) Key_Counts--;

                                          break;

                     case 0xfb:       Key_Counts=0;

              }

              Key_Code=0xff;

       }

}



关键词: jianzhangx     进程    

院士
2011-12-13 08:57:13     打赏
2楼
原来代码是要回复可见的哦

助工
2011-12-14 08:39:00     打赏
3楼

4X4键盘扫描数码管显示键值,按不同键时蜂鸣器响:



记得把短路冒拨到P3.7的一边。
程序如下:欢迎指正

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

//段码

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};

sbit BEEP=P1^0;

//上次按键和当前按键的序号,该矩阵中序号范围0~1516表示无按键

uchar Pre_KeyNo=16,KeyNo=16;

//延时

void DelayMS(uint x)

{

       uchar i;

       while(x--) for(i=0;i<120;i++);

}    

//矩阵键盘扫描

void Keys_Scan()

{

       uchar Tmp;

       P3=0x0f; //4位置0,放入4

       DelayMS(1);

       Tmp=P3^0x0f;//按键后0f变成0000XXXXX中一个为03个仍为1,通过异或把31变为0,唯一的0变为1

       switch(Tmp)   //判断按键发生于0~3列的哪一列

       {

              case 1:     KeyNo=0;break;

              case 2:     KeyNo=1;break;

              case 4: KeyNo=2;break;

              case 8:     KeyNo=3;break;

              default:KeyNo=16; //无键按下    

       }

       P3=0xf0;   //4位置0,放入4

       DelayMS(10);

       Tmp=P3>>4^0x0f;//按键后f0变成XXXX0000X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值

       switch(Tmp)   //0~3行分别附加起始值04812

       {

              case 1:     KeyNo+=0;break;

              case 2:     KeyNo+=4;break;

              case 4:     KeyNo+=8;break;

              case 8:     KeyNo+=12;

       }

}

//蜂鸣器

void Beep()

{

       uchar i;

       for(i=0;i<100;i++)

       {

              DelayMS(10);

              BEEP=~BEEP;

       }

       BEEP=0;

}

//主程序

void main()

{

       P0=0x00;

       BEEP=0;

       while(1)

       {

              P3=0xf0;

              if(P3!=0xf0) Keys_Scan();  //获取键序号

              if(Pre_KeyNo!=KeyNo)

              {

                     P0=~DSY_CODE[KeyNo];

                     Beep();

                     Pre_KeyNo=KeyNo;

              }

              DelayMS(1000);

       }

}


助工
2011-12-14 09:47:21     打赏
4楼
经典

助工
2011-12-15 18:53:57     打赏
5楼

液晶1602显示:


助工
2011-12-15 18:55:09     打赏
6楼

视频怎么上传?


助工
2011-12-18 09:38:11     打赏
7楼

温度传感器实验成果:


助工
2011-12-18 10:11:32     打赏
8楼

电路板的焊接已圆满完成,测试了一个流水邓程序,实现了,但是那块单片机好像是下载不进程序,总是说单片机型号错误,但就是原件清单里提到的那种类型,但就是下载不了,后来换了一块单片机,为STC89C52,就可以下载程序了


助工
2011-12-19 08:32:19     打赏
9楼

下载软件中选上所用的单片机型号就可以下载


助工
2011-12-19 08:33:44     打赏
10楼
我的实时时钟怎么实现不了?
谁有实现的

共25条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]