📄 as____.c
字号:
#include <90USB1287.H>
//#include <intrins.h>
//#include <fm3130.h>
#include <macros.h>
#include <string.h>
#asm
.equ __i2c_port=0xb ;//PORTD
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
//unsigned char TextLogo[]={"液晶显示模块(LCDM)"};
#define uint unsigned int
#define uchar unsigned char
uchar command_data;
#define CS PORTC.6//LCD片选(串行) 0:禁止 1:允许
#define SID PORTC.5//LCD输入串行数据(串行)
#define clk PORTC.4//LCD输入串行脉冲(串行)
#define ak PORTC.3/
unsigned char buf[10]={0};
#include <i2c.h>
#include <delay.h>
#include <math.h>
#include <stdio.h>
//#include <lcdA.h>
uchar DTIME[30]={0};
uchar pi[20]={0};
unsigned int sec_speed=0,speed=0x0, speed1=0x0, mai=0x0,mi=0x0,tt2=0,tt=0,tt1=0,temp_outspeed=0;
int t0,t1;
uchar ii=0,ss=16 ;
uchar display_buffer[33];
unsigned int speek[6]={0},speek1[6]={0},speek2[6]={0};
void port_init(void)
{
DDRB = 0xff; //设置B口全为输入
DDRC = 0x3f; //设置C口全为输入
DDRD = 0xFF; //设置D口全为输入
PORTB = 0xff; //设置B口全部上拉
PORTC = 0xff; //设置C口全部上拉
PORTD = 0xff; //设置D口全部上拉
}
void delay(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void delay_1ms(uint x) // 延时
{
uint j;
uchar i;
for(j=0;j<x;j++)
{
for(i=0;i<120;i++);
}
}
void send_command(uchar command_data)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
i_data=0xf8;
delay_1ms(10);
CS=1;
clk=0;
for(i=0;i<8;i++)
{
SID=(i_data&0x80);
clk=0;
clk=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(i_data&0x80);
clk=0;
clk=1;
i_data=i_data<<1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(i_data&0x80);
clk=0;
clk=1;
i_data=i_data<<1;
}
CS=0;
}
void send_data(uchar command_data)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
i_data=0xfa;
delay_1ms(10);
CS=1;
for(i=0;i<8;i++)
{
SID=(i_data&0x80);
clk=0;
clk=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(i_data&0x80);
clk=0;
clk=1;
i_data=i_data<<1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(i_data&0x80);
clk=0;
clk=1;
i_data=i_data<<1;
}
CS=0;
}
void lcd_init()
{
delay_1ms(100);
command_data=0x30;
send_command(command_data); /*功能设置:一次送8位数据,基本指令集*/
command_data=0x04;
send_command(command_data); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
command_data=0x0C;
send_command(command_data); /*显示设定:开显示,显示光标,当前显示位反白闪动*/
command_data=0x01;
send_command(command_data); /*清DDRAM*/
command_data=0x02;
send_command(command_data); /*DDRAM地址归位*/
command_data=0x80;
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/
}
unsigned char FMCompanionRandomRead( int address)//unsigned char
{
unsigned char data;
i2c_start();
i2c_write(0xd0);
i2c_write(address);
i2c_start();
i2c_write(0xd1);
data=i2c_read(0);
i2c_stop();
return data;
}
void FMCompanionRandomWrite(int address, unsigned char data)
{
//if (address>0x0018)return 0;
i2c_start();
i2c_write(0xa0);
i2c_write(address);
i2c_write(data);
i2c_stop();
/* 10 延时等待写操作完成 */
delay_ms(10);
}
#define RW_CTL 0x0000
#define CAL_CTL 0X0001
#define RTC_Second 0X0002
#define RTC_Minute 0X0003
#define RTC_Hours 0x0004
#define RTC_Day 0X0005
#define RTC_Date 0X0006
#define RTC_Month 0X0007
#define RTC_Years 0X0008
#define RTC_A_Second 0X0009
#define RTC_A_Minute 0X000a
#define RTC_A_Hours 0x000b
#define RTC_A_Date 0X000c
#define RTC_A_Month 0X000d
#define Alarm_WP_Ctrl 0X000e
unsigned char ReadFMYYMMDD(unsigned char *p)
{
unsigned char temp,temp1;
// EIMSK=0x00;
//PutC(0xe0); PutC(0x01);
//temp1=FMCompanionRandomRead(RW_CTL);
//temp=(temp1&0xfe);
//FMCompanionRandomWrite(RW_CTL,temp);//set bit R to 0
//temp1=FMCompanionRandomRead(RW_CTL);
//temp=temp1|0x01;
//FMCompanionRandomWrite(RW_CTL,temp);//set bit R from 0 to 1 cause the time capture
p[0]=FMCompanionRandomRead(RTC_Years);
DTIME[0]=2;
DTIME[1]=0;
DTIME[2]=p[0]>>4;
DTIME[3]=p[0]&0xf;
DTIME[4]=37;
p[1]=FMCompanionRandomRead(RTC_Month);
DTIME[5]=p[1]>>4;
DTIME[6]=p[1]&0xf;
DTIME[7]=37;
p[2]=FMCompanionRandomRead(RTC_Date);
DTIME[8]=p[2]>>4;
DTIME[9]=p[2]&0xf;
DTIME[10]=39;
DTIME[11]=39;
p[3]=FMCompanionRandomRead(RTC_Hours);
DTIME[12]=p[3]>>4;
DTIME[13]=p[3]&0xf;
DTIME[14]=36;
p[4]=FMCompanionRandomRead(RTC_Minute);
DTIME[15]=p[4]>>4;
DTIME[16]=p[4]&0xf;
DTIME[17]=36;
/*
if(p[4]!=MINUTE)
{
MINUTE=p[4];
if(MOVED)
{
if(MOVETIME>=245)MOVETIME=245;
else MOVETIME++;
}
else if(STOPD)
{
if(RESTTIME>=245)RESTTIME=245;
else RESTTIME++;
}
}
*/
p[5]=FMCompanionRandomRead(RTC_Second);
DTIME[18]=p[5]>>4;
DTIME[19]=p[5]&0xf;
temp1=FMCompanionRandomRead(RW_CTL);
temp=(temp1&0xfe);
FMCompanionRandomWrite(RW_CTL,temp);
EIMSK=0x20;
return(0);
}
void display(void)
{
command_data=0x01;
send_command(command_data);
command_data=0x80;
send_command(command_data);
for(ii=0;ii<16;ii++)
{
command_data=DTIME[ii];
send_data(command_data);//读对应地址数据
}
/*
tt=t0; // result_speed
speek[5]=tt/100000;
speek[4]=tt/10000-speek[5]*10;
speek[3]=tt/1000-speek[5]*100-speek[4]*10;
speek[2]=tt/100-speek[5]*1000-speek[4]*100-speek[3]*10;
//speek[2]=tt/100-speek[3]*10;
speek[1]=tt/10-speek[5]*10000-speek[4]*1000-speek[3]*100-speek[2]*10;
speek[0]=tt-speek[5]*100000-speek[4]*10000-speek[3]*1000-speek[2]*100-speek[1]*10;
//command_data=(char)mai;
send_data(48+speek[5]);
send_data(48+speek[4]);
send_data(48+speek[3]);
send_data(48+speek[2]);
send_data(48+speek[1]);
send_data(48+speek[0]);*/
//delay_1ms(3000);
}
void main(void)
{
//port_init();
lcd_init();
i2c_init();
PORTC.3=1;
while (1)
{
ReadFMYYMMDD(pi);
// t0=eeprom_read(0X02);
//sprintf(display_buffer,"t0=%-i.%-u%cC",t0/10,abs(t0%10),0xdf);
display() ;
delay_1ms(500);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -