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

📄 m169y.c

📁 atM169的驱动程序
💻 C
字号:
#include <iom169v.h>
#include <macros.h>
#define	 uchar	   unsigned	char
#define	 uint	   unsigned	int
#define	LCD_ON	0x8060
#define	LCD_OFF	0x8000
#define	LCD_EN	0x8020
#define	BAIS_4	0x8520
#define	LCD_CS	0x01
#define	LCD_CLK	0x02
#define	LCD_DATA	0x04
#define E1set(){PORTD|=0X20;}
#define E2set(){PORTD|=0X40;}
#define E1clr(){PORTD&=0XDF;}
#define E2clr(){PORTD&=0XBF;}
#define A0set(){PORTD|=0X10;}
#define A0clr(){PORTD&=0Xef;}
#define rwset(){PORTD|=0X80;}
#define rwclr(){PORTD&=0X7f;}
const uchar number1[8]={0x00,0x00,0x02,0x7e,0x22,0x00,0x00,0x00};
const uchar ning[]={0x0A,0x32,0x22,0x22,0x22,0x22,0xA2,0x63,
      0x22,0x22,0x22,0x22,0x22,0x2A,0x32,0x00,
      0x00,0x00,0x00,0x00,0x00,0x02,0x01,0xFE,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x04,0x42,0x20,0x30,0x01,0x1F,0x11,0x11,
      0x11,0xFF,0x11,0x11,0x15,0x18,0x00,0x00,
      0x20,0x20,0x7F,0x82,0x0C,0xF1,0x02,0x44,
      0x28,0x10,0x28,0x44,0x82,0x03,0x02,0x00,//波 number=48;
	  0x08,0x30,0x20,0xAA,0xAA,0xAA,0xA0,0xFF,
      0xA0,0xAA,0xAA,0xAA,0x21,0x28,0x30,0x00,
      0x00,0x00,0x82,0x92,0x92,0x92,0x92,0x92,
      0x92,0x92,0x92,0x92,0xFF,0x80,0x00,0x00,
const uchar num_table[]={0x00,0x07,0x08,0x08,0x08,0x07,  // -0-
	0x00,0xE0,0x10,0x10,0x10,0xE0,

	0x00,0x00,0x08,0x0F,0x00,0x00,  // -1-
	0x00,0x10,0x10,0xF0,0x10,0x10,

	0x00,0x04,0x08,0x08,0x09,0x06,  // -2-
	0x00,0x30,0x50,0x90,0x10,0x30,

	0x00,0x04,0x08,0x09,0x09,0x06,  // -3-
	0x00,0x20,0x10,0x10,0x10,0xE0,

	0x00,0x00,0x01,0x06,0x08,0x0F,  // -4-
	0x00,0xC0,0x40,0x40,0x50,0xF0,

	0x00,0x00,0x0F,0x09,0x09,0x08,  // -5-
	0x00,0x20,0x10,0x10,0x10,0xE0,

	0x00,0x03,0x05,0x09,0x09,0x08,  // -6-
	0x00,0xE0,0x10,0x10,0x10,0xE0,

	0x00,0x0C,0x08,0x08,0x09,0x0E,  // -7-
	0x00,0x00,0x00,0x30,0xC0,0x00,

	0x00,0x06,0x09,0x09,0x09,0x06,  // -8-
	0x00,0xE0,0x10,0x10,0x10,0xE0,

	0x00,0x07,0x08,0x08,0x08,0x07,  // -9-
	0x00,0x10,0x90,0x90,0xA0,0xC0,
	
	0x00,0x00,0x00,0x00,0x00,0x00,  // -:-
	0x00,0x00,0x00,0x00,0x00,0x00};
const	table[11]={0xf7,0xb0,0xeb,0xf9,0xbc,0xdd,0xdf,0xf0,0xff,0xfd,0x00}; 
const uchar stra[8]={0x00,0x00,0x00,0x7e,0x11,0x11,0x11,0x7e};
uchar dispdata[7]={0,10,10,10,10,10,10};
uchar dianpin;  //dianpin=0,
uchar getdata,savedata[6],bdata,common,data_flag,click_flag; 
uint subi,cishu;
uchar baojing,maicong,select,adress[4]={23,23,23,23},move,moveback,moveback0,movego,move,data_flag,data_flag1;
uchar getnumber,maicongjishu,clear_flag1,shan_flag,shan_stop;
uchar rusart[12],rusart1[12],rcount,receive_flag,gb_place,clear_flag,writeable_flag,guangbiao;
uchar danma;
void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0xFF;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; 
 DDRC  = 0x00;
 PORTD = 0x06;
 DDRD  = 0xF8;
 PORTE = 0xff;
 DDRE  = 0x02;
 PORTF = 0x00;
 DDRF  = 0x00;
 PORTG = 0x07;
 DDRG  = 0x0F;
}
//===
void delay(uchar time)
{
 for(time;time--;);
}
//==
void write_cmd(uchar cmd)
{
 uchar i;
 delay(10);
 DDRA=0XFF;
 PORTD=0X07;
 E1set();
 PORTA=cmd;
 E1set();
 E1clr(); 
 DDRA=0XFF;
 PORTD=0X07;
 E2set();
 PORTA=cmd;
 E2set();
 E2clr();
}

void write_data(uchar data,uchar bian)
{
 uchar i;
 delay(10);
 DDRA=0XFF;
 PORTD=0X17;
 if(bian==1){
 E1set();
 PORTA=data;
 E1set();
 E1clr();
 }
 else{
 E2set();
 PORTA=data;
 E2set();
 E2clr();
 }
}
void display(uchar address,uchar page,uint number,uchar nn)
{
 uint i;
 write_cmd(0xb8|(page+1));
 write_cmd(address);
 for(i=number;i>number-16;){
 write_data(ning[--i],nn);
 }
 write_cmd(0xb8|page);
 write_cmd(address);
 for(i=number+16;i>number;){
 write_data(ning[--i],nn);
 }
} 

void disp_number(uchar address,uchar page,uchar number,uchar nn)
{
 uchar i;
 write_cmd(0xb8|(page+1));
 write_cmd(address);
 for(i=number;i>number-6;){
 write_data(num_table[--i],nn);
 }
 write_cmd(0xb8|page);
 write_cmd(address);
 for(i=number+6;i>number;){
 write_data(num_table[--i],nn);
 }
} 
void disp_shan(uchar address,uchar page,uchar data,uchar nn)
{
 uchar dat1,dat2;
 if(data==0) dat1=dat2=0;
 else{dat1=0x0f;dat2=0xf0;}
 write_cmd(0xb8|(page+1));
 write_cmd(address);
 write_data(dat1,nn);
 write_cmd(0xb8|page);
 write_cmd(address);
 write_data(dat2,nn);
}
//TIMER1 initialize - prescale:64
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 500mSec
// actual value: 500.000mSec (0.0%)
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0x9C; //setup
 TCNT1L = 0x00;
 OCR1AH = 0x64;
 OCR1AL = 0x00;
 OCR1BH = 0x64;
 OCR1BL = 0x00;
 ICR1H  = 0x64;
 ICR1L  = 0x00;
 TCCR1A = 0x00;
 TCCR1C = 0x00;
 TCCR1B = 0x03; //start Timer
}
#pragma interrupt_handler timer1_ovf_isr:10
void timer1_ovf_isr(void)
{
 //TIMER1 has overflowed
 TCNT1H = 0x9C; //reload counter high value
 TCNT1L = 0x00; //reload counter low value
 if(shan_flag==0){
 shan_flag=1;
 shan_stop=select;
 if(shan_stop==1)disp_shan(guangbiao,2,1,0);
 if(shan_stop==2)disp_shan(guangbiao,2,1,1);
 if(shan_stop==3)disp_shan(guangbiao,0,1,0);
 if(shan_stop==4)disp_shan(guangbiao,0,1,1);
 }
 else{
 shan_flag=0;
 if(shan_stop==1)disp_shan(guangbiao,2,0,0);
 if(shan_stop==2)disp_shan(guangbiao,2,0,1);
 if(shan_stop==3)disp_shan(guangbiao,0,0,0);
 if(shan_stop==4)disp_shan(guangbiao,0,0,1);
 }
}
void sed1520_initial()
{
 write_cmd(0xe2);
 write_cmd(0xa4);
 write_cmd(0xa9);
 write_cmd(0xa0);
 write_cmd(0xc0);
 write_cmd(0xaf);
} 
void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCR = 0x0C; //WATCHDOG ENABLED - dont forget to issue WDRs
// MCUSR=0X00;
// WDTCSR|=0X18;
// WDTCSR=0X0F;
}
void screen_clr(void)
{
 uchar i,j;
 for(j=0;j<4;j++){
 write_cmd(0xb8|j);
 write_cmd(0x00);
 for(i=61;i--;){
 write_data(0x00,0);
 write_data(0x00,1);
 }
 }
}

//====
void display_data(uchar dat1,uint dat2,uchar dat3,uchar dat4,uchar sel)
{
 uchar dd[4];
 if(dat1<10){
 disp_number(23,2,6+dat1*12,0);
 disp_number(17,2,126,0);
 disp_number(11,2,126,0);
 if(sel==1) guangbiao=22;
 }
 else if(dat1<100){dd[0]=dat1%10;dd[1]=dat1/10;
 disp_number(23,2,6+dd[1]*12,0);
 disp_number(17,2,6+dd[0]*12,0);
 disp_number(11,2,126,0);
 if(sel==1) guangbiao=16;
 }
 else{dd[0]=dat1%10;dd[1]=dat1/10%10;dd[2]=dat1/100;
 disp_number(23,2,6+dd[2]*12,0);
 disp_number(17,2,6+dd[1]*12,0);
 disp_number(11,2,6+dd[0]*12,0);
 if(sel==1) guangbiao=10;
 }                                    //dat1显示
 if(dat2<10){
 disp_number(23,2,6+dat2*12,1);
 disp_number(17,2,126,1);
 disp_number(11,2,126,1);
 disp_number(5,2,126,1);
 if(sel==2) guangbiao=22;
 }
 else if(dat2<100){dd[0]=dat2%10;dd[1]=dat2/10;
 disp_number(23,2,6+dd[1]*12,1);
 disp_number(17,2,6+dd[0]*12,1);
 disp_number(11,2,126,1);
 disp_number(5,2,126,1);
 if(sel==2) guangbiao=16;
 }
 else if(dat2<1000){dd[0]=dat2%10;dd[1]=dat2/10%10;dd[2]=dat2/100;
 disp_number(23,2,6+dd[2]*12,1);
 disp_number(17,2,6+dd[1]*12,1);
 disp_number(11,2,6+dd[0]*12,1);
 disp_number(5,2,126,1);
 if(sel==2) guangbiao=10;
 }
 else{dd[0]=dat2%10;dd[1]=dat2/10%10;dd[2]=dat2/100%10;dd[3]=dat2/1000;
 disp_number(23,2,6+dd[3]*12,1);
 disp_number(17,2,6+dd[2]*12,1);
 disp_number(11,2,6+dd[1]*12,1);
 disp_number(5,2,6+dd[0]*12,1);
 if(sel==2) guangbiao=4;
 }            //dat2显示;
 if(dat3<10){disp_number(23,0,6+dat3*12,0);
 disp_number(17,0,126,0);
 disp_number(11,0,126,0);
 if(sel==3) guangbiao=22;
 }
 else if(dat3<100){dd[0]=dat3%10;dd[1]=dat3/10;
 disp_number(23,0,6+dd[1]*12,0);
 disp_number(17,0,6+dd[0]*12,0);
 disp_number(11,0,126,0);
 if(sel==3) guangbiao=16;
 }
 else{dd[0]=dat3%10;dd[1]=dat3/10%10;dd[2]=dat3/100;
 disp_number(23,0,6+dd[2]*12,0);
 disp_number(17,0,6+dd[1]*12,0);
 disp_number(11,0,6+dd[0]*12,0);
 if(sel==3) guangbiao=10;
 }    //显示dat3;
 if(dat4<10){disp_number(23,0,6+dat4*12,1);
 disp_number(17,0,126,1);
 disp_number(11,0,126,1);
 if(sel==4) guangbiao=22;
 }
 else if(dat4<100){dd[0]=dat4%10;dd[1]=dat4/10;
 disp_number(23,0,6+dd[1]*12,1);
 disp_number(17,0,6+dd[0]*12,1);
 disp_number(11,0,126,1);
 if(sel==4) guangbiao=16;
 }
 else{dd[0]=dat4%10;dd[1]=dat4/10%10;dd[2]=dat4/100;
 disp_number(23,0,6+dd[2]*12,1);
 disp_number(17,0,6+dd[1]*12,1);
 disp_number(11,0,6+dd[0]*12,1);
 if(sel==4) guangbiao=10;
 } //显示dat4
}

⌨️ 快捷键说明

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