📄 pinl.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 + -