📄 wode.c
字号:
#include <math.h>
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
#define a_8255 XBYTE[0x2ffc]
#define b_8255 XBYTE[0x2ffd]
#define c_8255 XBYTE[0x2ffe]
#define k_8255 XBYTE[0x2fff]
#define da_a XBYTE[0x5000]
#define unchar unsigned char
#define unint unsigned int
void lcd_write_dat(unchar dat);
void lcd_init();
void lcd_write_command(unchar command);
void delay(int ms);
unint jp();
void get(unchar t);
int log2(unchar t);
void int_intr();
long midlle,second;
long sp,sp1;
unchar key_wr[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
unchar key,keyk,key1,key2,k;
void main()
{
unchar a=0,b=0;
unint y,z=0;
k_8255=0x82; //。。。。。。初始化8255
lcd_init();
int_intr();
while(1)
{
/* c_8255=0x00;
while(~b_8255!=0)//如果有按键关中断
{
EA=0;
ET0=0;
second=0;
midlle=0;
k=0;
if(z==3) {z=0;EA=1;ET0=1; }//显示三个键植后开中断
y=jp();
z+=y; //记录按键次数
while(b_8255!=0xff)//。。。。。等待放键
key=key_wr[keyk];
lcd_write_command(0x80+z);
lcd_write_dat(key);//。。。。。。显示键zi
}*/
}
}
//。。。。。。液晶。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
void lcd_init() //初始化液晶
{
lcd_write_command(0x38);
delay(10);
lcd_write_command(0x38);
lcd_write_command(0x38);
lcd_write_command(0x0c);
lcd_write_command(0x06);
lcd_write_command(0x01);
}
void lcd_write_command(unchar command) //给液晶写控制指令
{
c_8255=0x00; //RS=0,RW=0,E=0
delay(5);
a_8255=command;
delay(5);
c_8255=0x04; //RS=0,RW=0,E=1
delay(5);
c_8255=0x00; //RS=0,RW=0,E=0
delay(5);
}
void lcd_write_dat(unchar dat) //给液晶写显示数据
{
c_8255=0x01;
delay(5);
a_8255=dat;
delay(5);
c_8255=0x05;
delay(5);
c_8255=0x01;
}
void delay(int ms) //。。。。。。。延时ms毫秒
{ int i;
for(;ms!=0;ms--)
for(i=1110;i!=0;i--);
}
// 。。。。。。。键盘。。。。。。。。。。。。。。。。。。。。。。。。。。。
unint jp() //判断有无按键,及读键值。放到全局变量key中
{
get(0xe0);
key1=keyk;
delay(1);
get(0xe0);
key2=keyk;
if(key1==key2)
key=key2;
// else
//lcd_write_command(0x10) ;//如果两次判键不一样key还保持前一次的值光标向左移一位
return(1) ;
}
int log2(unchar t) //log以2为底的对数函数
{
int i;
for(i=0;t!=0;i++)
t=t/2;
return(i-1);
}
void get( unchar t) //取键值函数
{
int i;
unchar z;
c_8255=t;
for(i=0;~b_8255==0;i++)//。。。。。for语句得到列值i
{
t=t<<1;
c_8255=t;
}
z=~b_8255;
keyk=log2(z)*4+i;//。。。。。得到键值
delay(1);
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void int_intr()
{
TMOD=0x26;//t1定时。t0计数
TL0=0xff;
TH0=TL0;
TL1=6;
TH1=TL1;
EA=1;
ET0=1;
ET1=1;
TR0=1;
}
void jishu() interrupt 1 //t0外部计数
{
k++;
// TL0=0xff;
// TH0=TL0;
if(k==1) TR1=1;//开定时中断
if(k==7)
{
EA=0;
TR1=0;ET1=0;
TR0=0;ET0=0;
k=0;
sp1=sp;
sp=360000/(second*1000+midlle*1000/3686);
lcd_write_command(0x85);//在液晶屏第一行显示速度
lcd_write_dat(sp/100+0x30);
lcd_write_dat(sp%100/10+0x30);
lcd_write_dat(sp%100%10+0x30);
second=0;
midlle=0;
//TL0=0xf;
//TH0=TL0;
TR0=1;
ET1=1;
ET0=1;
EA=1;
delay(8);
}
}
void time() interrupt 3
{
midlle++;
if(midlle==3686)
{
second++;
midlle=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -