MC9S12单片机(学生实验用)PIT编程实例

代码;)在编辑器里总是自动变成笑脸是很讨厌的。。

1.PIT跑马灯

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define  LED_data PORTB
#define LED_dir DDRB

void Init_PIT(void) {
  PITCFLMT_PITE=0;
  PITCE_PCE0=1;
  PITMUX_PMUX0=0;
  PITMTLD0=200-1 ;
  PITLD0=20000-1;
  PITINTE_PINTE0=1;
  PITCFLMT_PITE=1;
}

void interrupt 66 PIT0(void) {
  PITTF_PTF0=1;
  LED_data>>=1;LED_data|=0x80;
  if(LED_data==0xff)LED_data=0x7f;
}
void Init_PORT() {
  LED_dir=0xff;
  LED_data=0x7f;
}


void main(void) {
  /* put your own code here */
   Init_PORT();
   Init_PIT();



EnableInterrupts;

for(; ; ) ;
    
}


2.数字秒表
计时器最终程序(完整调试无锁相环)

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define CONT_data PORTK
#define CONT_dir DDRK
#define SHOW_data PTP
#define SHOW_dir DDRP
#define  LED_data PORTB
#define LED_dir DDRB
 const unsigned char DisplayDecode[]={
  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
 };
 const unsigned char KeyDecode[];
 unsigned char i,j,Input,point;
 unsigned char showbuffer[4];

void Init_PORT() 
{
  CONT_dir|=0x0f;
  SHOW_dir=0xff;
 
}

 void Init_PIT(void) 
{
  PITCFLMT_PITE=0;
  PITCE_PCE0=1;
  PITMUX_PMUX0=0;
  PITMTLD0=200-1 ;
  PITLD0=40000-1;
  PITINTE_PINTE0=1;
  PITCFLMT_PITE=1;
}


 void interrupt 66 PIT0(void) { PITTF_PTF0=1; i++;
 
if(i== 60){
  j=j++ ;i=0;
}
if(j==60){
  j=0; 
}
 

 }

  
  void delay(unsigned int counter){
  unsigned int i,j;
  for(i=0;i<counter;i++)
  for(j=0;j<4000;j++);
}

void show(unsigned char*showdata,unsigned char point) {
      unsigned char DisplayNumber;
      unsigned char showcon[4]={
        0x01,0x02,0x04,0x08
      };
      for(DisplayNumber=0;DisplayNumber<4;DisplayNumber++){
        CONT_data&=0xf0;
        SHOW_data=DisplayDecode[*showdata++] ;
        if(DisplayNumber==point)SHOW_data|=0x80;
        CONT_data|=showcon[DisplayNumber];
        delay(1); 
      }
 }

  
 
  
void main(void) {
  /* put your own code here */   
   Init_PORT();

	i=0;
	j=0;
	Init_PIT();
	EnableInterrupts; 
  for(;; ){showbuffer[0]=i%10;
  showbuffer[1]=i/10;
  showbuffer[2]=j%10;
  showbuffer[3]=j/10;
     show(showbuffer,2);
}
}

3.键盘输入周期实现跑马灯

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define CONT_data PORTK
#define CONT_dir DDRK
#define SHOW_data PTP
#define SHOW_dir DDRP
#define  LED_data PORTB
#define LED_dir DDRB
#define KEY_data PORTA
#define KEY_dir DDRA 
#define ColumnSize 4
#define RowSize 4
unsigned char time=1,i,j,Keyvalue1;
 const unsigned char DisplayDecode[]={
  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
 };
 const unsigned char KeyDecode[]={
  0x0d,0x0c,0x0b,0x0a,0x0e,0x09,0x06,0x03,0x00,0x08,0x05,0x02,0x0f,0x07,0x04,0x01
 };
 unsigned char i,j,Input,point;
 unsigned char showbuffer[4];

void Init_PORT() {
   CONT_dir|=0x0f;
  SHOW_dir=0xff; 
  DDRA=0x0f;
  PUCR|=0x01;
   LED_dir=0xff;
  LED_data=0x7f;
}                          


void Init_PIT(void) {
  PITCFLMT_PITE=0;
  PITCE_PCE0=1;
  PITMUX_PMUX0=0;
  PITMTLD0=200-1 ;
  PITLD0=5000-1;
  PITINTE_PINTE0=1;
  PITCFLMT_PITE=1;
}

void interrupt 66 PIT0(void) {
  PITTF_PTF0=1; i++;
  if(i== time){    
  LED_data>>=1;LED_data|=0x80;
  if(LED_data== 0xff)LED_data=0x7f;
  i=0;
  }
  if(i==10)i=0;
}

unsigned char time,i ,Keyvalue1 ;

unsigned char KeyScan()
{
  unsigned char i,Output,Keynumber;
  Keyvalue1=0x01;
  KEY_data=0xf0;
    if((KEY_data>>4)!=0x0f)
    {
      Output=0x01;
      for(i=0;i<RowSize;i++) 
      {
        KEY_data=~Output;
      if((KEY_data>>4)!=0x0f)
      { 
      switch((KEY_data>>4))
      {
        case 0x0e:Keynumber=0;break;
         case 0x0d:Keynumber=1;break; 
          case 0x0b:Keynumber=2;break;
           case 0x07:Keynumber=3;break;  
      }
      Keynumber=Keynumber+i*ColumnSize;
      j=Keynumber;
      Keyvalue1= KeyDecode[Keynumber];
      
       break;
     
      }   else Output<<=1;
      }
    }
     
      
  return(Keyvalue1);
}
  
  void delay(unsigned int counter){
  unsigned int i,j;
  for(i=0;i<counter;i++)
  for(j=0;j<4000;j++);
}

void show(unsigned char*showdata,unsigned char point) {
      unsigned char DisplayNumber;
      unsigned char showcon[4]={
        0x01,0x02,0x04,0x08
      };
      for(DisplayNumber=0;DisplayNumber<4;DisplayNumber++){
        CONT_data&=0xf0;
        SHOW_data=DisplayDecode[*showdata++] ;
        if(DisplayNumber==point)SHOW_data|=0x80;
        CONT_data|=showcon[DisplayNumber];
        delay(1); 
      }
 }

  
 
  
void main(void) {
  /* put your own code here */   

	i=0;
  Init_PORT();
  Init_PIT();
	EnableInterrupts; 
  for( ; ; ){
  time=KeyScan();
  showbuffer[0]=time%10;
  showbuffer[1]=time/10;
  showbuffer[2]=0;
  showbuffer[3]=0;
     show(showbuffer,2);
  }
    
}

/*笔芯 */

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值