transfomer Posted April 22, 2008 Report Share Posted April 22, 2008 /************************************************************ MCU:ATega16L 8MHz ************************************************************/ #include <mega16.h> //#include <delay.h> //#include <stdio.h> #include "hzk.h" /*LCD引脚定义 PB0-7对应LCD DB0-DB7*/ #define CS1 PORTA.6 #define CS2 PORTA.5 #define RS PORTA.2 #define RW PORTA.3 #define E PORTA.4 #define RST PORTA.7 #define SPEAK PORTA.0 #define LCDEL PORTA.1 #define MOTO1A PORTD.6 #define MOTO1B PORTD.7 #define MOTO2A PORTC.0 #define MOTO2B PORTC.1 #define HD7279CS 0 #define HD7279CLK 1 #define HD7279DATA 4 #define HD7279KEY 5 #define PD2 2 #define PD3 3 #define URSEL 7 //#define UMSEL 6 //#define UPM1 5 //#define UPM0 4 //#define USBS 3 #define UCSZ1 2 #define UCSZ0 1 //#define UCPOL 0 #define RXCIE 7 #define TXCIE 6 #define UDRIE 5 #define RXEN 4 #define TXEN 3 #define UCSZ2 2 #define RXB8 1 #define TXB8 0 #define RXC 7 #define TXC 6 #define UDRE 5 #define FE 4 #define DOR 3 #define OVR 3 /*This definition differs from the databook*/ #define PE 2 #define U2X 1 #define MPCM 0 typedef const struct { unsigned char X; unsigned char Y; }LCDPos; LCDPos const LCDInfo[]={{0x28,0x00},{0x30,0x00},{0x38,0x00},{0x40,0x00},{0x48,0x00}, {0x50,0x00},{0x58,0x00}, {0x30,0x02},{0x38,0x02},{0x40,0x02}, {0x48,0x02},{0x50,0x02}, {0x30,0x04},{0x40,0x04}, {0x30,0x06},{0x40,0x06},{0x48,0x06}}; unsigned char LCDInfoBuf[17]; int Count = 1234; void delay_us(int time) { do { time--; } while (time>1); } void Delay(int x) { int i,j; for(j=0;j<x;j++) { for(i=0;i<250;i++); } } unsigned char receive_byte(void) { unsigned char i,temp=0; DDRD &= ~(1<<HD7279DATA); delay_us(90); for(i=0;i<8;i++) { temp=temp<<1; PORTD |= (1<<HD7279CLK); delay_us(10); if((PIND & (1<<HD7279DATA))!=0) temp|=0x01; PORTD &= ~(1<<HD7279CLK); delay_us(10); } DDRD |= (1<<HD7279DATA); return temp; } void send_byte(unsigned char para) { unsigned char i; PORTD &= ~(1<<HD7279CS); delay_us(90); for(i=0;i<8;i++) { if((para&0x80)==0x80) PORTD |= (1<<HD7279DATA); else PORTD &= ~(1<<HD7279DATA); PORTD |= (1<<HD7279CLK); delay_us(10); PORTD &= ~(1<<HD7279CLK); delay_us(10); para=para<<1; } } void write7279(unsigned char cmd1, unsigned char cmd2) { send_byte (cmd1); send_byte (cmd2); PORTD |= (1<<HD7279CS); } void Rst7279(void) { send_byte(0xa4); PORTD |= (1<<HD7279CS); } unsigned char Read7279(void) { unsigned char keyval; if((PIND & (1<<HD7279KEY))==0) { send_byte(0x15); keyval=receive_byte(); PORTD |= (1<<HD7279CS); return keyval; } return 0xff; } void LCD_NOP(void) { unsigned char i; for(i=0;i<50;i++); // #asm("NOP"); } void LCD_Write_ComL(unsigned char x) { CS1=0; CS2=1; LCD_NOP(); RS=0; E=1; LCD_NOP(); RW=0; PORTB=x; E=1; E=0; CS1=1; CS2=1; } void LCD_Write_DatL(unsigned char x) { CS1=0; CS2=1; LCD_NOP(); RS=0; E=1; LCD_NOP(); RS=1; RW=0; PORTB=x; E=1; E=0; CS1=1; CS2=1; } void LCD_Write_ComR(unsigned char x) { CS1=1; CS2=0; LCD_NOP(); RS=0; E=1; LCD_NOP(); RW=0; PORTB=x; E=1; E=0; CS1=1; CS2=1; } void LCD_Write_DatR(unsigned char x) { CS1=1; CS2=0; LCD_NOP(); RS=0; E=1; LCD_NOP(); RS=1; RW=0; PORTB=x; E=1; E=0; CS1=1; CS2=1; } void LCD_Init(void) { RST = 1; RST = 0; Delay(200); RST = 1; LCD_Write_ComL(0x3e); LCD_Write_ComR(0x3e); LCD_Write_ComL(0x3f); LCD_Write_ComR(0x3f); LCD_Write_ComL(0xc0); LCD_Write_ComR(0xc0); } void LCD_Clr(void) { unsigned char i,j; for(j=0;j<8;j++) { LCD_Write_ComL(0xb8|j); LCD_Write_ComL(0x40); LCD_Write_ComR(0xb8|j); LCD_Write_ComR(0x40); for(i=0;i<64;i++) { LCD_Write_DatL(0x00); LCD_Write_DatR(0x00); } } } void CCW_PR(unsigned int neima,unsigned char X,unsigned char Y,unsigned char fan) { unsigned char k,com,dat1,hz; unsigned int i; Y=Y|0xb8; LCD_Write_ComL(Y); LCD_Write_ComR(Y); if(neima<CB1B1) hz=8; else hz=0; if(X<0x40) { com=X+0x40; LCD_Write_ComL(com); k='L'; } else { com=X; LCD_Write_ComR(X); //Com=X-0x40+0x40 } com=com&0x3f; for(i=neima;i<(16+neima-hz);i++) { dat1=hzdot; if(fan) dat1=~dat1; if(k=='L') { LCD_Write_DatL(dat1); } else { LCD_Write_DatR(dat1); } com++; if(com==0x40) { LCD_Write_ComR(com); k='R'; } } Y++; LCD_Write_ComL(Y); LCD_Write_ComR(Y); if(X<0x40) { com=X|0x40; LCD_Write_ComL(com); k='L'; } else { com=X; LCD_Write_ComR(X); //Com=X-0x40+0x40 } com=com&0x3f; for(i=(16+neima-hz);i<(32+neima-hz-hz);i++) { dat1=hzdot; if(fan) dat1=~dat1; if(k=='L') { LCD_Write_DatL(dat1); } else { LCD_Write_DatR(dat1); } com++; if(com==0x40) { LCD_Write_ComR(com); k='R'; } } } void logo(void) { CCW_PR(CB5E7,0x4-2,0x06,0); CCW_PR(CBBB0,0x14-2,0x06,0); CCW_PR(CHAR_30,0x28-2,0x06,0); CCW_PR(CHAR_31,0x30-2,0x06,0); CCW_PR(CHAR_32,0x38-2,0x06,0); CCW_PR(CHAR_33,0x40-2,0x06,0); CCW_PR(CHAR_34,0x48-2,0x06,0); CCW_PR(CHAR_35,0x50-2,0x06,0); CCW_PR(CHAR_36,0x58-2,0x06,0); CCW_PR(CHAR_37,0x60-2,0x06,0); CCW_PR(CHAR_38,0x68-2,0x06,0); CCW_PR(CHAR_39,0x70-2,0x06,0); // CCW_PR(ASC0,0x78-2,0x06,0); } // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here if(PIND & (1<<PD3)) Count++; else Count--; } //主程序 void main(void) { unsigned int i; unsigned char Key; DDRB=0xff; PORTB=0x00; DDRA=0xff; DDRC = 0xff; PORTC = 0x00; // Port D initialization // Func7=Out Func6=Out Func5=In Func4=Out Func3=In Func2=In Func1=Out Func0=Out // State7=0 State6=0 State5=P State4=0 State3=P State2=P State1=0 State0=0 PORTD=0x2C; DDRD=0xD3; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x03; MCUCSR=0x00; GIFR=0x40; Rst7279(); #asm("wdr"); #asm("SEI"); //开总中断 LCD_Init(); //LCD初始化 LCD_Clr(); //LCD清屏 MOTO1A = 0; MOTO1B = 1; MOTO2A = 0; MOTO2B = 1; SPEAK = 1; LCDEL = 1; logo(); Delay(200); Delay(200); while(1) { Key = Read7279(); if(Key != 0xff) Count = Key; LCDInfoBuf[0]=(Count/10000)%10; LCDInfoBuf[1]=(Count/1000)%10; LCDInfoBuf[2]=(Count/100)%10; LCDInfoBuf[3]=(Count/10)%10; LCDInfoBuf[4]=(Count)%10; for (i=0;i<7;i++) { CCW_PR(LCDInfoBuf*16,LCDInfo.X,LCDInfo.Y,0); } } } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now