longsong 发表于 2006-7-23 17:15

您喜欢单片机吗?(献给太湖的初学者们)

/*************************名称:矩阵式键盘的典型应用*********************************
**************************设计:黄龙松*******************************************
**************************日期:2006年7月23日于南京******************************/
#include \"include.h\"
sbit sclk = Port3^1;      //定义P3.1为CP脉冲信号
sbit dat = Port3^0;      //定义P3.0为数据信号
sbit beep = Port3^7;
//******************************************************************************
void Send_data (uchar dat1);    //发送键值至74LS164
uchar Key_Scan(void);            //键码扫描
void delay(uchar t);            //延时
void Display(uchar Led_dat);    //字符显示
void Key_Display(void);          //发送键值至LED
void Speaker (void);
//******************************************************************************
uchar Key_Scan(void)
{
uchar code_h;
uchar code_l;
Port1=0xf0;
if((Port1&0xf0)!=0xf0)
{
    delay(20);
    if((Port1&0xf0)!=0xf0)
    {
      code_h = 0xfe;
      while((code_h&0x10)!=0)
      {
      Port1=code_h;
      if((Port1&0xf0)!=0xf0)
      {
          code_l=(Port1&0xf0|0x0f);
          return(~code_l+~code_h);
      }
      else   code_h=(code_h<<1)|0x01;
      }
    }
      
}
return(0);
}
//******************************************************************************
void delay(uchar t)
{   
    uchar i;
    for(;--t;)
    {
      for(i=0;i<100;i++);
    }
}
//******************************************************************************
void Speaker (void)
{
beep = 0;
delay(250);
delay(250);
delay(250);
beep = 1;
}
//******************************************************************************
void Send_data (uchar dat1)
{
uchar j;
for(j=0;j<8;j++)
{
    if((dat1<<j)&0x80)         //识别位状态
       dat = 1;         
    else dat = 0;
    sclk = 1;            //产生脉冲信号,上升沿有效
    sclk = 0;
}
}
//******************************************************************************
void Display(uchar Led_dat)//字符显示,基于74LS164
{
    sclk = 0;
    Send_data(Led_dat);
    Speaker ();
}
//******************************************************************************      
void Key_Display(void)
{
switch(Key_Scan())
    {
      case 0x88:
       Display(ZK);break;
      case 0x48:
       Display(ZK);break;
      case 0x28:
       Display(ZK);break;
      case 0x18:
       Display(ZK);break;
      case 0x84:
      Display(ZK);break;
      case 0x44:
      Display(ZK);break;
      case 0x24:
      Display(ZK);break;
      case 0x14:
      Display(ZK);break;
      case 0x82:
      Display(ZK);break;
      case 0x42:
      Display(ZK);break;
      case 0x22:
      Display(ZK);break;
      case 0x12:
      Display(ZK);break;
      case 0x81:
      Display(ZK);break;
      case 0x41:
      Display(ZK);break;
      case 0x21:
      Display(ZK);break;
      case 0x11:
      Display(ZK);break;
//case 0x00:
//Display(0xff);break;
}
}
void main (void)
{
while(1)      
{
    Key_Display();
}
}
//************************************END*********************************

蓝调音乐 发表于 2006-7-23 19:25

这是什么啊?
我刚开始没看清楚题目
还以为是说RPG呢

tkxyzr 发表于 2006-7-24 08:04

我学过,现在不用了,还老师了,呵呵

城相识 发表于 2006-7-24 12:49

单片机运用很广泛,可是理论学习太枯燥

爱你久久 发表于 2006-7-25 10:12

嘿嘿,这是很有用的一门专业知识

太陽 发表于 2006-7-25 10:35

樓主是在讀書還是在那家公司上班呀,有機會想找樓主學習學習,呵呵,

指谈笑间 发表于 2006-9-13 18:30

这个呀,楼主习惯用C语言呀,我是用汇编呀,楼主QQ号多少呀,

wuguoying 发表于 2006-9-15 11:00

想学啊,有机会就在这交流吧
页: [1]
查看完整版本: 您喜欢单片机吗?(献给太湖的初学者们)