📄 main-last.c
字号:
// dis_add_two_num(0x8f,sed);
*/
// wrc(0x90);
// wrc(you_on);
//显示当前页数
wrc(0x98);
wrd(0x30+page);
}
// BT基础定时器中断服务程序
// 每4ms中断一次,16ms一个循环,显示刷新频率为1000/16=62.5Hz
//interrupt [BASICTIMER_VECTOR] void BT_ISP( void )
#pragma vector=BASICTIMER_VECTOR
__interrupt void BT_ISP (void)
{
//BTCTL =BT_ADLY_1000;
//显示时钟
if(sed<59)
{
sed++;
}
else if(min<59)
{
sed=0;
min++;
}
else if(hour<23)
{
min=0;
hour++;
}
else
{
hour=0;
}
page1();
/*
add(2,1);
dis_num(hour);
add(2,3);
dis_num(min);
add(2,5);
dis_num(sed);
*/
/*
//每xx次中断钟发射1次
if(dat==250)
{
super_on();
//dis_ch(0x88,0xb7,0xa2); //显示 发
//dis_ch(0x89,0xc9,0xe4); //显示 射
led_on();
dat=0;
}
else
{
super_off();
//dis_ch(0x88,0xcd,0xa3); //显示停
//dis_ch(0x89,0xd6,0xb9); //显示止
led_off();
dat++;
}
*/
}
void ini_sys(void)
{
// WDTCTL=WDTPW+WDTHOLD; //STOP W D T
WDTCTL = WDTPW +WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
// FLL_CTL0 |= XCAP14PF; //SET FLL
}
void ini_lcd(void)
{
// WDTCTL=WDTPW+WDTHOLD; //STOP WDT
uchar com;
P4SEL &=(~(BIT1+BIT2+BIT3+BIT4));
P3DIR |=0XFF;//方向设置为输出
P4DIR |=0XFF;//方向设置为输出
delay(100);
P4OUT &=~(psb);
P4OUT |=psb;//PSB 设置为1,通信方式设为8位
// wrc(com);
delay(100);
// com &=~(rs+rw);//设置RS R/W为低
// wrc(com);
// delay(100);
com =0x30;//功能设置-8位 基本指令集
wrc(com);
delay(200);
delay(200);
wrc(com);
delay(100);
com=0x0c;
//com =BIT3+BIT2;//显示打开 光标关 翻白显示关
//com =BIT3+BIT2+BIT1+BIT0;//显示打开 光标关 翻白显示关
wrc(com);
delay(200);
com =BIT0;//清除屏幕显示 地址计数器归零
wrc(com);
ldelay(200);
com =0x06;
wrc(com);
delay(100);
}
void check_busy(void)
{
P4SEL &=(~(BIT1+BIT2+BIT3+BIT4));
P4DIR =0XFF;//输出
P3DIR =0X00;//输入
// P3OUT =0X00;
P4OUT &=~rs;//rs=0
P4OUT |=rw;//RW=1;
P4OUT |=en;//en=1
do
{
;
}
while (P3IN>0x7f);
/*
do
{
P4OUT =BIT2;
uchar xx=P3IN;
P4OUT &=~BIT2;
}
while(xx&&BIT7=1);
*/
}
void wrd(uchar dat)
{
/*
RS=0;
RW=1;
P0=0XFF;
E=1;
*/
check_busy();
P4SEL &=(~(BIT1+BIT2+BIT3+BIT4));
P4DIR =0XFF;
P3DIR =0XFF;
P4OUT |=rs;//rs=1
P4OUT &=~rw;//rw=0
P3OUT =dat;//dat 数据传过去
P4OUT |=en;//en=1;
P4OUT &=~en;//en=0 下降沿写数据或指令
// P3OUT =0XFF;
}
void wrc(uchar cmd)
{
check_busy();
P4SEL &=(~(BIT1+BIT2+BIT3+BIT4));
P4DIR =0XFF;//方向为输出
P3DIR =0XFF;
P4OUT &=~rs;//rs=0
P4OUT &=~rw;//rw=0
P3OUT =cmd;//命令传过去
P4OUT |=en;//en=1
P4OUT &=~en;//en=0;en下降沿写数据或指令
// P3OUT =0XFF;
}
void delay (uchar n)
{
while (n--);
}
void ldelay(uchar n)
{
uchar a=100;
while(a--)
{
while(n--);
}
}
void led() //led亮一下
{
P5DIR |=BIT1;
P5OUT &=(~BIT1);
delay(100);
P5OUT |=BIT1;
}
void led_on()
{
P5DIR |=BIT1;
P5OUT &=(~BIT1);
}
void led_off()
{
P5DIR |=BIT1;
P5OUT |=BIT1;
}
void dis_add_ch(uchar add,uchar h,uchar l)//显示汉字函数
{
wrc(add);
delay(100);
wrd(h);
wrd(l);
}
void dis_add_en(uchar add,uchar dat1,uchar dat2) //显示字符
{
wrc(add);
delay(100);
wrd(dat1);
wrd(dat2);
}
void dis_add_num(uchar add,uint dat) //显示数字
{
uchar a=0;
wrc(add);
delay(100);
dat =dat%10000;
a =dat/1000;
wrd(0x30+a);
dat =dat%1000;
a =dat/100;
wrd(0x30+a);
dat =dat%100;
a=dat/10;
wrd(0x30+a);
dat =dat%10;
wrd(0x30+dat);
delay(100);
}
void dis_ch(uchar h,uchar l)//只显示汉字函数
{
wrd(h);
wrd(l);
}
void dis_en(uchar dat1,uchar dat2) //只显示字符
{
wrd(dat1);
wrd(dat2);
}
void dis_num(uint dat) //只显示数字
{
uchar a=0;
// dat =dat%10000;
// a =dat/1000;
// wrd(0x30+a);
// dat =dat%1000;
// a =dat/100;
// wrd(0x30+a);
dat =dat%100;
a=dat/10;
wrd(0x30+a);
dat =dat%10;
wrd(0x30+dat);
delay(100);
}
void dis_two_num(uchar dat) //只显示两位数字
{
uchar a=0;
dat =dat%100;
a=dat/10;
wrd(0x30+a);
dat =dat%10;
wrd(0x30+dat);
delay(100);
}
void dis_add_two_num(uchar add,uchar dat) //只显示两位数字
{
uchar a=0;
wrc(add);
dat =dat%100;
a=dat/10;
wrd(0x30+a);
dat =dat%10;
wrd(0x30+dat);
delay(100);
}
void add(uchar h,uchar l) //定位地址
{
l--;
switch(h)
{
case 1:
{
wrc(0x80+l);
break;
}
case 2:
{
wrc(0x90+l);
break;
}
case 3:
{
wrc(0x88+l);
break;
}
case 4:
{
wrc(0x98+l);
break;
}
}
}
unsigned char key_data() //判断键值
{
int a=0,b=0,c=0,d=0,i=0;
/*
unsigned char sccode,recode;
PC=0X0F;
if((PC&0X0F)!=0X0F)
{
delay(100);
if((PC&0X0F)!=0X0F)
{
sccode=0xEF;
while((sccode&0x01)!=0)
{
PC=sccode;
if((PC&0X0F)!=0X0F)
{
recode=(PC&0X0F)|0XFF;
return((~sccode)+(~recode));
}
else
{
sccode=(sccode<<1)|0x10;
}
}
}
}
return(0);
*/
a=0xF7;
for(i=0;i<4;i++) //读行
{
P6DIR |=0X0F; //低四位输出
P6DIR &=0X0F; //高四位输入
P6OUT =a;
b=P6IN&0XF0;
b=b>>4;
if(b!=0x00) //表示有键按下
{
// delay(200); //软件延时 确认有键按下
if(b!=0x00)
{
c=b;
if(c==1)
{
d=4-i;
}
else if(c==2)
{
d=8-i;
}
else if(c==4)
{
d=12-i;
}
else if(c==8)
{
d=16-i;
}
break;
}
}
else
{
a=a>>1;
if(a==0)
{
break;
}
}
}
d=d-1;
return(d);
}
unsigned char ask_key() //判断是否有键按下
{
P6DIR |=0X0F; //低四位输出
P6DIR &=0X0F; //高四位输入
P6OUT &=0xf0;
return(P6IN&0XF0);
}
uchar read_ac(void) //读出地址计数器ac的值
{
P4SEL &=(~(BIT1+BIT2+BIT3+BIT4));
P4DIR =0XFF;//输出
P3DIR =0X00;//输入
P4OUT &=~rs;//rs=0
P4OUT |=rw;//RW=1;
P4OUT |=en;//en=1
return(P3IN&0x7f);
}
void key_deal(uchar keydata) //键值处理
{
uchar acdata; //当前游标地址变量
acdata=read_ac();//读当前游标地址
switch(keydata) //keydata 为键值
{
case 0: //第0个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x30);
break;
}
case 1: //第1个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x31);
break;
}
case 2: //第2个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x32);
break;
}
case 3: //第3个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x33);
break;
}
case 4: //第4个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x34);
break;
}
case 5: //第5个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x35);
break;
}
case 6: //第6个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x36);
break;
}
case 7: //第7个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x37);
break;
}
case 8: //第8个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x38);
break;
}
case 9: //第9个键按下
{
// xiu=0; //不能修改 要set一下才能修改
// wrd(0x39);
break;
}
case 10: //第10个键按下 #define down 10
{
// xiu=0; //不能修改 要set一下才能修改
switch(page)
{
case 1://第一页
{
if(acdata<=7) //在第一行
{
add(2,(acdata+1));
// wrc(acdata+0x90);
}
else if(acdata<=15) //在第三行
{
add(4,(acdata-7));
// wrc(acdata+0x10);
}
else if(acdata<=23) //在第二行
{
add(3,(acdata-15));
// wrc(acdata-0x08);
}
else if(acdata<=31) //在第四行
{
add(1,(acdata-23));
// wrc(acdata-23+0x80);
}
break;
}
case 2://第二页
{
acdata=read_ac();
if(acdata==16)
{
wrc(you_on);
if(hour==0)
{
hour=24;
}
else
{
hour--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -