📄 main._c
字号:
/**********************************************************************
//ICC-AVR application builder : 2006-6-27 15:04:57
// Target : M8
// Crystal: 3.6864Mhz
//
***********************************************************************/
#include <iom8v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define setbit(x,y) (x|=(1<<y)) //set bit y in byte x
#define clrbit(x,y) (x&=(~(1<<y))) //clear bit y in byte x
uchar exampl[]="北京";
void ledon(void)
{
DDRB = (1<<PB2);
PORTB = (0<<PB2);
}
void ledoff(void)
{
DDRB = (1<<PB2);
PORTB = (1<<PB2);
}
//延时
// Delay n*(5ms)
void delay(uint n)
{
while(n--)
{
uint i = 5236; //Delay 5ms
while(i--);
};
}
void delayms(uint i)
{
while(i--)
{
uchar j = 125;//125;//250;
while(j--);
}
}
void delayus(uchar i)
{
while(i--);
}
void wait(void)
{
DDRB = ((1<<PB0)|(1<<PB1));
DDRC = 1<<PC1;
DDRD = 0xff;
//PORTD = 0xff;
PORTB = ((1<<PB0)|(0<<PB1)); //RW = 1 WRITE RS =0 INSTRUCTION
PORTC = (1<<PC1); //E = 1
DDRD = 0;
while(PIND&0x80);
PORTB = ((0<<PB0)|(0<<PB1)); //RW = 0 WRITE RS =0 INSTRUCTION
}
void send_i(uchar i)
{
DDRB = ((1<<PB0)|(1<<PB1));
DDRC = 1<<PC1;
DDRD = 0xff;
wait();
PORTB = ((0<<PB0)|(0<<PB1)); //RW = 0 WRITE RS =0 INSTRUCTION
PORTD = i;
//setbit(PORTC,PC1);
//NOP();
//clrbit(PORTC,PC1);
PORTC = (1<<PC1); //E = 1
NOP();
PORTC = (0<<PC1); //E = 0
}
void send_d(uchar d)
{
DDRB = ((1<<PB0)|(1<<PB1));
DDRC = 1<<PC1;
DDRD = 0xff;
wait();
PORTB = ((0<<PB0)|(1<<PB1)); //RW = 0 WRITE RS =1 DATA
PORTD = d;
PORTC = (1<<PC1); //E = 1
NOP();
PORTC = (0<<PC1); //E = 0
//setbit(PORTC,PC1);
//NOP();
//clrbit(PORTC,PC1);
}
void lw(uchar x,uchar y,uchar d)
{
send_i(0xB8|y);
send_i(0x40|x);
send_d(d);
//PORTD = 0xff;
}
void lcd_init(void)
{
uchar x,y;
delay(100); //>40ms 800
send_i(0x30); //select basic instruction
delay(10); //>100us
send_i(0x30); //set basic mode
delay(10); //>37us
send_i(0x0c); //turn on lcd 0c
delay(10); //>100us
send_i(0x01); //clr screen text
delay(20); //>10ms
send_i(0x06); //enter dot setup 06
}
void putstring(uchar addr,uchar *str)
{
uchar j;
send_i(addr|0x80);
for(j=0;j<3;j++)
{
send_d(exampl[j]);
}
}
/*=======================================================
显示光标定位
=======================================================*/
void locateXY( uchar posx,uchar posy) {
uchar temp;
temp = posx & 0xf;
posy &= 0x1;
if ( posy )temp |= 0x40;
temp |= 0x80;
send_i(temp);
}
/*=======================================================
按指定位置显示数出一个字符
=======================================================*/
void disponechar(uchar x,uchar y,uchar wdata) {
locateXY( x, y ); // 定位显示地址
send_d( wdata ); // 写字符
}
/*=======================================================
显示字符串
=======================================================*/
void eputstr(uchar x,uchar y, uchar *ptr) {
uchar i,l=0;
while (ptr[l] >31){l++;};
for (i=0;i<l;i++) {
disponechar(x++,y,ptr[i]);
if ( x == 16 ){
x = 0; y ^= 1;
}
}
}
void main(void)
{
ledon();
lcd_init();
delay(50);
eputstr(0,0,exampl); // 上面一行显示一个预定字符串
//putstring(0x80,exampl);
delayus(500000);
delayus(500000);
delayus(500000);
delayus(500000);
delayus(500000);
delayus(500000);
delayus(500000);
delayus(500000);
ledoff();
PORTD = 0;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -