单片机C语言编程:按键、计数及显示

来源:互联网 发布:suse linux配置vlan 编辑:程序博客网 时间:2024/04/21 00:36

以前写过一个用汇编语言编写的程序,可见:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/d5a529b5320ce57f8ad4b2b4.html
应网友要求,下面写一个用C语言编写的程序。
电路中,共使用了三个按键,两位数码显示。使用12MHz或11.0592MHz的晶振皆可。
用Proteus仿真运行后截图如下:

单片机C语言编程:按键、计数及显示 - 非著名博主 - 电子信息角落

图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/081b44444616af6ecefca38d.html

程序如下:
//===================================================
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit ADD_1 = P3^2;
sbit SUB_1 = P3^3;
sbit RST_0 = P3^4;

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

//---------------------------------------------------
void delay(uint ms)
{
    uint i, j;
    for(i = ms; i > 0; i--) for(j = 110; j > 0; j--);
}
//---------------------------------------------------
void display(uchar num)
{
    P2 = 0;                     //消隐
    P0 = DIS_SEG7[num / 10];    //输出段码
    P2 = 2;                     //显示位置
    delay(3);                   //显约3ms
    P2 = 0;
    P0 = DIS_SEG7[num % 10];
    P2 = 1;
    delay(3);
}
//---------------------------------------------------
void main()
{
    num = 0;
    while(1) {                  //主循环
      display(num);             //显示
      if (ADD_1 == 0) {        //如果有键按下
        display(num);           //用显示代替延时
        if (ADD_1 == 0) {      //如果键还在按下
          num++;                //按键功能处理
          if (num >= 100) num = 0;
          while(ADD_1 == 0) display(num); //等待按键释放
        }
      }
      if (SUB_1 == 0) {
        display(num);
        if (SUB_1 == 0) {
          num--;
          if (num == -1) num = 99;
          while(SUB_1 == 0) display(num);
        }
      }
      if (RST_0 == 0) {
        display(num);
        if (RST_0 == 0) num = 0;
        while(RST_0 == 0) display(num);
      }
}   }
//===================================================

0 0
原创粉丝点击