?? pinl.c
字號(hào):
/*--------------------------------------------------------
暫時(shí)不理想 還不能顯示漢字 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復(fù)位
delay(200);
set_reset;
clr_answer;
delay(200);
}
/*************寫數(shù)據(jù)到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++;
}
}
}
/******************定時(shí)器T0初始化 1秒***********************/
void timer0_init(void)
{
TCCR0 = 0x00; //stop timer
ASSR = 0x08; //set async mode
TCNT0 = 0x00; //set count
//TCCR0 = 0x05; //start timer
}
/*******************定時(shí)器T1初始化 計(jì)數(shù)模式******************/
void timer1_init(void)
{
TCCR1A=0X00;
TCCR1B=0X00;
TCNT1 =0x0000;
}
/*****************定時(shí)器T0中斷服務(wù)程序**************************/
#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; //定時(shí)計(jì)數(shù)器中斷屏蔽寄存器
DDRA=0xff;
PORTA=0xff;
ocmj_init(); //液晶初始化
ocmj_write(0xf4);//清屏
delay(20000);
hanz_tran(0,0,"頻率測(cè)量");
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]);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -