2008年F题 简易多功能计数器 - 图文(5)

2018-12-29 19:24

//===================================================== // DS18D20写数据/命令

//===================================================== void writebyte(uchar dat) {

unsigned char m;

for(m=0;m<8;m++) {

CLR_OP;

if(dat&0X01) {

SET_OP;

delayus(70); } else {

CLR_OP;

delayus(70); SET_OP; }

dat>>=1; } }

//===================================================== // DS18D20读数据

//===================================================== uchar readbyte() { uchar i,dat; for(i=0;i<8;i++) {

dat>>=1; SET_DIR; CLR_OP; SET_OP; CLR_DIR;

if(CHECK_IP==1) dat|=0X80; delayus(50); }

return (dat);

}

//===================================================== // DS18D20初始化

//===================================================== config() {

reset();

writebyte(0xCC); writebyte(0x4E); writebyte(0xFF); writebyte(0xFF);

writebyte(0x7F);//设置精度为1/16摄氏度 }

//===================================================== // 读取温度,并转换成BCD码,显示在tempre数组中

//===================================================== void read_temper() {

uchar lsb=0,msb=0,temper=0;//定义变量的时候记得赋初值 float backbit=0;//小数点后的数值×1000 unsigned int temper1;

reset();//复位

writebyte(0xCC);//跳过序列号 writebyte(0x44);//开启温度转换

reset();//复位

writebyte(0xCC);//跳过序列号

writebyte(0xBE);//开始ds18b20的寄存器

lsb=readbyte();//读温度寄存器的低8位 msb=readbyte();//读温度寄存器的高8位

backbit=(lsb&0x0F)*625;//获取温度的小数部分 temper1=backbit;//将浮点型数据转化为int型

lsb=(lsb>>4)&0x0F;//获取温度的整数部分 msb=(msb<<4)&0xF0;

temper=(msb|lsb)%0x7f;

//温度缓存区

temperature[0]=(temper0)/10+'0';

temperature[1]=temper+'0'; temperature[2]='.',

temperature[3]=temper1/1000+'0';

temperature[4]=(temper100)/100+'0'; temperature[5]=(temper10)/10+'0'; temperature[6]=temper1+'0'; }

/*================================================= 头文件名:2402.h

功能:LCM2402液晶的驱动程序

==================================================*/ #include #include

#define uchar unsigned char #define uint unsigned int //BGHSDGHDSGH #define LCM_rs 0 #define LCM_wr 1 #define LCM_en 2

#define DDR_LCM_CONTROL DDRA #define DDR_LCM_DATA DDRB

#define PORT_LCM_CONTROL PORTA #define PORT_LCM_DATA PORTB

void LCM_delay(uint ms) {

uint i,j;

for(i=0;i

for(j=0;j<1141;j++); } }

void LCM_delay1(uint time) //delay about 1.25us { uint i,j;

for(i=0;i

void LCM_write_cmd(uchar cmd)

{

PORT_LCM_CONTROL&=~BIT(LCM_rs); PORT_LCM_CONTROL&=~BIT(LCM_wr); PORT_LCM_DATA=cmd;

PORT_LCM_CONTROL|=BIT(LCM_en); LCM_delay1(2);

PORT_LCM_CONTROL&=~BIT(LCM_en); }

void LCM_write_dat(uchar dat) {

PORT_LCM_CONTROL|=BIT(LCM_rs); PORT_LCM_CONTROL&=~BIT(LCM_wr); PORT_LCM_DATA=dat;

PORT_LCM_CONTROL|=BIT(LCM_en); LCM_delay1(2);

PORT_LCM_CONTROL&=~BIT(LCM_en); }

void LCM_initial() {

DDR_LCM_DATA=0XFF;

DDR_LCM_CONTROL|=BIT(LCM_rs)|BIT(LCM_wr)|BIT(LCM_en); PORT_LCM_CONTROL&=~BIT(LCM_wr);

LCM_write_cmd(0X38); LCM_delay(5);

LCM_write_cmd(0X01); LCM_delay(5);

LCM_write_cmd(0X0C); LCM_delay(5);

LCM_write_cmd(0X06); LCM_delay(5); }

void LCM_shift_left(uchar k) {

uchar i;

for(i=0;i

LCM_write_cmd(0X18); LCM_delay(500); } }

void LCM_write_line(uchar pos,uchar data[]) {

uchar i;

LCM_write_cmd(0X80+pos); LCM_delay1(2);

for(i=0;data[i]!='\\0';i++) {

LCM_write_dat(data[i]); LCM_delay1(2); } }

/*======================================================= 头文件名:key.h

功能:4*4矩阵键盘驱动程序

=======================================================*/ //矩阵键盘的扫描程序

//键值保存在全局变量key中

uchar scancode[4]={0XF7,0XFB,0XFE,0XFD};//扫描 uchar keyboard() {

uchar i,key=16; DDRC=0X0F; PORTC=0XFF;

for(i=0;i<4;i++) {//start for

PORTC=scancode[i]; LCM_delay(1); switch(PINC) {//start switch

case 0XEE:key=0;break; case 0XDE:key=1;break; case 0XBE:key=2;break; case 0X7E:key=3;break; case 0XED:key=4;break; case 0XDD:key=5;break; case 0XBD:key=6;break; case 0X7D:key=7;break; case 0XEB:key=8;break; case 0XDB:key=9;break; case 0XBB:key=10;break;


2008年F题 简易多功能计数器 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七年级数学

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: