当前位置:编程学习 > C/C++ >>

您好,我看您曾经问过单片机控制洗衣机C语言程序的问题,我对这个很感兴趣,不知道可不可以看一下您的程序

如果您同意的话,我的邮箱(elever_zjc@126.com),谢谢您!
答案:下列程序已经调好,按键显示电路可见:

//单片机:使用51系列兼容的即可;
//4×4矩阵键盘:接在P1口;
//两位数码显示器: P0口输出七段码,P2口输出位选码。
/========================================
//C语言程序如下。
/************************************************************* 
* 文件名: KEY_LED.c 
* 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。 
**************************************************************/ 
#include <reg51.h> 
#include <intrins.h> 
#define uint unsigned int 
#define uchar unsigned char

uchar code table[10] = ; 
uchar  sec, t_50ms;
/************************************************************** 
* 名称 : Delay_1ms() 
* 功能 : 延时子程序,延时时间为 1ms * x 
* 输入 : x (延时一毫秒的个数) 
* 输出 : 无 
***************************************************************/ 
void Delay_1ms(uint x) 
{ 
    uint i; 
    uchar j; 
    for(i = 0; i < x; i++) for(j = 0; j <= 148; j++); 
} 
/************************************************************** 
* 名称: Display(uchar k) 
* 功能: 将参数分成十位、个位分别显示
* 输入: k (键盘数值) 
* 输出: P0口输出七段码,P2口输出位选码
***************************************************************/ 
void Display(uchar k)
{
    P2 = 0;                    //消隐
    P0 = table[k / 10]; 
    P2 = 0x02; Delay_1ms(5);   //显示5ms十位
    P2 = 0;                    //消隐
    P0 = table[k % 10];     
    P2 = 0x01; Delay_1ms(5);   //显示5ms个位 
}
/************************************************************** 
* 名称: Keyscan() 
* 功能: P1外接4×4按键, 按照扫描法读出键值
* 输出: 按键值0~15/如无键按下, 返回16
***************************************************************/ 
uchar Keyscan(void) 
{ 
    uchar i, j, temp, Buffer[4] = ; 
    for(j = 0; j < 4; j++) { //循环四次
      P1 = Buffer[j];         //在P1高四位分别输出一个低电平
      temp = 0x01;            //计划先判断P1.0位
      for(i = 0; i < 4; i++) { //循环四次
        if(!(P1 & temp))      //从P1低四位,截取1位
          return (i + j * 4); //返回取得的按键值 
        temp <<= 1;           //判断的位,左移一位
    } }
    return 16;                //判断结束,没有键按下,返回16
}   //呵呵,实质性的语句不过8行,就是这么简练!
/************************************************************** 
* 名称: GetKey() 
* 功能: 读出按键、消抖、等待按键释放
* 输出: 按键值0~15/如无键按下, 返回16
***************************************************************/ 
uchar GetKey(void) 
{ 
    uchar  Key_Temp1, Key_Temp2; //两次读出的键值 
    P1 = 0xff; 
    Key_Temp1 = Keyscan();       //先读入按键
    if(Key_Temp1 == 16)  return 16; //没有键按下,返回16
    Display(sec);                //用显示代替延时
    Key_Temp2 = Keyscan();       //再读一次按键
    if(Key_Temp1 != Key_Temp2)  return 16; //不同,返回16
    while(Keyscan() < 16)    //等待按键释放
      Display(sec);          //等待期间显示
    return Key_Temp1;
}  
/************************************************************** 
* 名称 : Main() 
* 功能 : 主函数 
***************************************************************/ 
void Main(void) 
{ 
    uchar Key_Value;           //读出的键值
    sec = 0;
    TMOD = 0x01;
    TH1 = (65536-50000)/256;
    TL1 = (65536-50000)%256;
    TR0 = 1;
    ET0 = 1;
    EA = 1;
    while(1) {
      Display(sec);            //显示
      if (GetKey() == 10) {
        TR0 = 0;
        while (TR0 == 0) {
          Display(sec);        //显示
          Key_Value = GetKey();
          if (Key_Value < 10) {
            sec %= 10;
            sec = sec * 10 + Key_Value;
          }
          if (Key_Value == 10)  TR0 = 1;
    } } } 
}
/************************************************************** 
* 名称 : T0_INT() 
* 功能 : T0中断函数
***************************************************************/ 
void T0_INT() interrupt 1
{
    TH1 = (65536-50000)/256;
    TL1 = (65536-50000)%256;
    t_50ms++;
    if(t_50ms >= 20)  {
      t_50ms = 0;
      sec++;
      sec %= 60;
    }
}
/*************************************************************/
其他:那么久以前的,已经不在了哦。不好意思

上一个:C语言 里面的FOR是什么意思
下一个:c语言中如何求一个数的阶乘

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,