专栏中心

EEPW首页 > 专栏 > Freescale NSS08Kit-R1开发板KBI演示程序

Freescale NSS08Kit-R1开发板KBI演示程序

发布人:0750long 时间:2009-07-07 来源:工程师 发布文章
Freescale NSS08Kit-R1开发板KBI演示程序

 

这个简单的程序用来演示NSS08Kit-R1开发板上的KBI功能,飞思卡尔的几乎所有s08系列mcu都支持KBI。

 


 

/*******************************
@ Nicrosystem Freescale S08 DevKit(NSS08Kit-R1)
@ author:bluehacker<
nicrosystem@gmail.com>
@ date:2009-04-06
*********************************/

/*****************************
@说明:
本能程序测试MC9S08AC16的KBI功能
用户可以按开发板上4个按键的任意一个,单片机在检测到
按键后,将按键的编号通过串口发送给PC,
你可以通过串口调试助手来观察
****************************/

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include <stdio.h>

#define BUS_CLK 4000000L
#define KBI1_MASK   PTGD_PTGD0_MASK 
#define KBI2_MASK  PTGD_PTGD1_MASK
#define KBI3_MASK  PTGD_PTGD2_MASK
#define KBI4_MASK  PTGD_PTGD3_MASK

unsigned char g_key;//which key been press?
unsigned char g_keyReady;//if or not any key been pressed?
//初始化KBI0~KBI3为下降沿敏感的键盘中断
void init_kbi()
{
  KBISC="0x02";//enable KBI interrupt, edge-only detection
  KBIPE="0x0f"; 
  PTGDD&=0xf0;
  PTGPE_PTGPE0=1;
  PTGPE_PTGPE1=1;
  PTGPE_PTGPE2=1;
  PTGPE_PTGPE3=1;
}
//初始化sci2
//设置sci2为8bit,一个停止位,无校验模式
//设置sci2发送,接收使能,中断全部禁止
//设置波特率为9600
void init_sci2()
{
    unsigned int BaudRate;
   
    BaudRate="BUS"_CLK/9600/16;
    SCI2BDH=(unsigned char)(BaudRate>>8);
    SCI2BDL=(unsigned char)(BaudRate&0x00ff);
   
    SCI2C1=0x00;
    SCI2C2=0x0c;
    SCI2C3=0x00;
}
//在禁止中断的情况下,用查询方式发送完一个字节
void uart2_send_byte_poll(unsigned char c)
{
  SCI2D=c;
  while(SCI2S1_TC==0);
}
//在禁止中断的情况下,同查询方式发送完一个字符串
void uart2_send_string_poll(unsigned char *str)
{
  while(*str!=0)
  {
    uart2_send_byte_poll(*str);
    str++;
  }
}

interrupt VectorNumber_Vkeyboard1 void kbi_isr()
{
  KBISC_KBACK=1;
  g_key=PTGD&0x0f;
  g_keyReady=1;
}

//设置系统时钟模式,为FEE,8MHZ的系统主频,BUS CLK为4MHZ
void init_system_clock()
{
     ICGC1=0xf8;
     ICGC2=0x89;
     while(ICGS1_LOCK==0);
}

char calculate_key_number(unsigned char keyvalue) {
  char ret;
 
  switch(keyvalue){
    case 0x0e:
    ret="1";
    break;
   
    case 0x0d:
    ret="2";
    break;
   
    case 0x0b:
    ret="3";
    break;
   
    case 0x07:
    ret="4";
    break;
   
    default:
    ret="0";
    break;
  }
  return ret;
}

void main(void) {
  unsigned char buf[50];
  char keyno;
  EnableInterrupts; /* enable interrupts */
  /* include your code here */
  SOPT_COPE=0;//disable cop watchdog
  init_system_clock();
  init_sci2();
  init_kbi();
  g_keyReady=0;
  g_key=0x0f;
  uart2_send_string_poll((unsigned char*)("start......\n"));
  for(;;) {
    //__RESET_WATCHDOG(); /* feeds the dog */
    if(g_keyReady)
    {
      keyno="calculate"_key_number(g_key);
      sprintf(buf,"you press KEY#%d\n",keyno);
     
      uart2_send_string_poll(buf);
      g_keyReady=0;
    }
 
  } /* loop forever */
  /* please make sure that you never leave main */
}

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

如何发现并修复模拟仿真中隐藏的建模缺陷

基于大规模并行GPU光栅化器加速计算光刻技术

机器学习与人工智能如何应用于电力变换?(上篇)

1601液晶程序

资源下载 2007-02-16

NCL30000单段式功率因数校正LED驱动器原理及TRIAC调光LED驱动器设计方案(上)

视频 2010-06-12

IEEE MagNet挑战赛如何利用人工智能实现功率磁性器件建模?

Bourns 扩展 Multifuse® MF-LSMF 系列 PPTC 可复式保险丝产品线,提供更广泛的保持电流与更高电压型号

采用ADP1043A的数字电源设计实例

视频 2010-06-12

NCL30000单段式功率因数校正LED驱动器原理及TRIAC调光LED驱动器设计方案(下)

视频 2010-06-12

深入理解 I²C 协议

基于SMD封装的高压CoolMOS

视频 2010-06-12

AI 硬件设计如何破解 “内存墙” 瓶颈?

是德科技XR8示波器平台:重构测量本质,开启高速测试新纪元

打破12V瓶颈:迈向48V供电系统

汽车电子 2026-03-20

用带平均电流限幅功能的半桥式电路拓朴结构提高砖电源模块的功率密度(下)

视频 2010-06-12

贸泽电子再度携手2026“创造未来”全球设计大赛, 创新赋能 点燃科技新动能

2026-03-20
更多 培训课堂
更多 焦点
更多 视频

技术专区