⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pinl.c

📁 频率测量
💻 C
字号:


/*--------------------------------------------------------
暂时不理想 还不能显示汉字  2005年8月15日  晚3:05
很理想了   能显示汉字了    2005年8月16日 下午18:40
没有找到不能显示汉字的原因
作者:黄兴木
--------------------------------------------------------*/
#include <iom128v.h>

#define data_port PORTA
#define ask (PINE&0x40)

#define set_answer asm("sbi 0x03,7")
#define clr_answer asm("cbi 0x03,7")

#define set_reset asm("sbi 0x15,3")
#define clr_reset asm("cbi 0x15,3")

#define wait  asm("nop\n nop")

const unsigned char table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,
0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
unsigned char over;
unsigned int shu;
int n0,n1,n2,n3,n4;

void delay(unsigned int x)
{
  unsigned int k;
  for(k=0;k<x;k++)
  ;
}

/******************液晶初始化***********************/
void ocmj_init(void)
{
 MCUCR=0;
 DDRA=0xff;
 PORTA=0xff;
 DDRE=0b10000000;
 PORTE=0xff;
 clr_reset;//LCD复位
 delay(200);
 set_reset;
 clr_answer;
 delay(200);
}

/*************写数据到LCD *******************/	  
void ocmj_write(unsigned char data)
{
 while(ask!=0)
  ;
 data_port=data;
 wait;
 set_answer;
 wait;
 while(ask==0)
  ;		
 clr_answer;
}

/*******************写ASCII码初始化**************************/
void write_ASCII(unsigned char xx,unsigned char yy,unsigned char data)
{
    ocmj_write(0xf9);
    ocmj_write(xx);
    ocmj_write(yy);
    ocmj_write(data);
}

/*******************显示一组汉字****************************/
void hanz_tran(unsigned char x,unsigned char y,unsigned char *hz)
{
  x+=2;
  while((*hz)!=0)
    {  
        ocmj_write(0xf0);
        delay(50);
        ocmj_write(x);
        delay(50);
        ocmj_write(y);
        delay(50);
        ocmj_write(*hz-0xa0);
          hz++;
        delay(50);
        ocmj_write(*hz-0xa0);
          hz++;
        delay(50);
        if(x<0x09)
           x++;
        else
           {
             x=0x02;
             y++;
            }           
      }
}

/******************定时器T0初始化 1秒***********************/
void timer0_init(void)
{
 TCCR0 = 0x00; //stop timer
 ASSR = 0x08;  //set async mode
 TCNT0 = 0x00; //set count
 //TCCR0 = 0x05; //start timer
}

/*******************定时器T1初始化 计数模式******************/
void timer1_init(void)
{
  TCCR1A=0X00;
  TCCR1B=0X00;
  TCNT1 =0x0000;
 }
 
/*****************定时器T0中断服务程序**************************/
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr()
{
  TCCR1B=0X00;
  TCCR0=0X00;
  shu=TCNT1+over*65535+8;
  TCNT0 =0X00;
  TCNT1 =0x0000;
  TCCR0 =0x05;
  TCCR1B=0X07;
 }
 
#pragma interrupt_handler timer1_ovf_isr:15
void timer1_ovf_isr(void)
{
  over++;
}

 
void main()
{
  SREG=0x80;   //开全局中断
  TIMSK=0x01;  //定时计数器中断屏蔽寄存器
  DDRA=0xff;
  PORTA=0xff;
  ocmj_init();     //液晶初始化	
  ocmj_write(0xf4);//清屏
  delay(20000);  
  hanz_tran(0,0,"频率测量");
  delay(2000); 
  
 write_ASCII(5,20,table[0]); 
  write_ASCII(6,20,table[0]);
  write_ASCII(7,20,0x2e);  //.
  write_ASCII(8,20,table[0]);
  write_ASCII(9,20,table[0]);
  write_ASCII(10,20,table[0]);
  write_ASCII(11,20,0x4b);  //k
  delay(2000);
  timer0_init();
  timer1_init();
  TCCR0=0X05;
  TCCR1B=0X07;
  while(1)
    {
  delay(5000);
  n0=shu/10000;
  n1=(shu%10000)/1000;
  n2=(shu%1000)/100;
  n3=(shu%100)/10;
  n4=shu%10;
  write_ASCII(5,20,table[n0]);
  write_ASCII(6,20,table[n1]);
  write_ASCII(8,20,table[n2]);
  write_ASCII(9,20,table[n3]);
  write_ASCII(10,20,table[n4]);
     }
 }
  
  
 
  
  
  
  

  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -