此为12864显示的ds18B20 ************液晶显示子程序**********************************// #define DATA_OUT PORTA #define DATA_IN PINA //端口定义使用============= #define DATA_DIR DDRA //使用寄存器================ #define CNTL PORTB #define CNTL_DIR DDRB #define OUT 0xff #define IN 0x00 #define RS 0 #define RW 1 #define E 2 /******************************************************************** */ #define SETBIT(x,y) (x|=(1<<y)) //set bit y in byte x #define CLRBIT(x,y) (x&=(~(1<<y))) //clear bit y in byte x #define CHKBIT(x,y) (x&(1<<y)) //check bit y in byte x /******************************************************************** */ uchar character1[]="关于显示器的问题"; uchar character2[]="数字信号是要测量"; uchar character3[]="液晶显示效果是好"; uchar character4[]="显示效果还是加强"; uchar adress_table[][8]={ {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87},//第一行汉字位置 {0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97},//第二行汉字位置 {0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F},//第三行汉字位置 {0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F},//第四行汉字位置 }; /************************************************************ * 函数名称:void DelayMS(unsigned int time) * 功 能:软件延时 1/1000s * 入口参数:time 延时时间 MS * 出口参数:无 ************************************************************ void DelayMS(uint time) { uint i; while(time--) { for(i=1;i<(uint)(xtal*143-2);i++) ; } } */ /*----------------------------------------------------- 状态检查函数,判断是否处于忙状态 -------------------------------------------------------*/ void CheckState() { //unsigned char dat; //CLRBIT(CNTL,RS); //RS=0 CLRBIT(CNTL,RS); //RS=0 SETBIT(CNTL,RW); //RW=1 DATA_DIR=IN; // portd as input do { SETBIT(CNTL,E); CLRBIT(CNTL,E); } while (DATA_IN&0x80); } /*---------------------------------------------- 写显示数据 形参dat:显示数据 -------------------------------------------------*/ void write_data(unsigned char dat) { CheckState(); SETBIT(CNTL,RS); CLRBIT(CNTL,RW); DATA_DIR=OUT; //portd as output DATA_OUT=dat; SETBIT(CNTL,E); CLRBIT(CNTL,E); } /*------------------------------------------------- 向LCD发送命令 形参command :命令 --------------------------------------------------*/ void write_command(unsigned char command) { CheckState(); CNTL_DIR=OUT; //PORTB&=0xfc; CLRBIT(CNTL,RS); //RS=0,RW=0 CLRBIT(CNTL,RW); DATA_DIR=OUT; //portd as output DATA_OUT=command; SETBIT(CNTL,E); CLRBIT(CNTL,E); } void LCD_Init(void) { Init_IO(); write_command(0x30);//功能设置 8位数据,基本指令 write_command(0x0C); //显示状态 ON,游标OFF,反白OFF write_command(0x01); //清除显示 write_command(0x02); //地址归位 write_command(0x80); //设置DDRAM地址 } void display_CGROM(uchar row,uchar column,uchar *p) { //while(row<4&&((*p)!='\0')) //{ while(column<8&&((*p)!='\0')) { write_command(adress_table[row][column]); write_data(*p++); write_data(*p++); column++; } //column=0; //row++; // } } //============液晶子程序=========================// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// void main(void) { Init_IO(); //初始化I/O口 TCCR0=0x03; //T/C0工作于定时方式,系统时钟64分频 TCNT0=0x83; //计数初始值83 _SEI(); TIMSK=0x01; LCD_Init(); while(1) { Display_ds18B20(); } }
* 文件名称:18b20.c
* 功 能:读取18B20的温度
* 时 间:2006.8.1
* 端口使用:PD7(DQ)
说 明:晶振:4MHz
************************************************************/
#include<iom16v.h>
#include <macros.h>
#define xtal 4 //1MS
#define uchar unsigned char
#define uint unsigned int
uchar CNT=0; //初始计数值:0
uint temp=0; //初始值:0
#pragma ctask DelayUS //延迟函数
void DelayUS(uchar dt)
{while(dt)
dt--;
asm("nop"); //空操作=========
}
/************************************************************
* 函数名称:void DelayMS(unsigned int time)
* 功 能:软件延时 1/1000s
* 入口参数:time 延时时间 MS
* 出口参数:无
************************************************************/
void DelayMS(uint time)
uint i;
while(time--)
{
for(i=1;i<(uint)(xtal*143-2);i++)
;
}
}
/***********************************************************
* 函数名称:unsigned char Check18B20(void)
* 功 能:检查18B20是否存在
* 入口参数:无
* 出口参数:检查存在是返回 0
不存在是返回 1
**********************************************************/
uchar Check18B20(void)
{
uchar signal=1;
DDRD |= 0x80;
PORTD|=0X80;
PORTD&= 0x7F; //PD7输出低电平 ,(复位)18B20 (与18B20通信)
DelayUS(255); //延时500US
DelayUS(255);
PORTD|= 0x80; //PD7输出高
DDRD |= 0x80; //PD7输入
DelayUS(70); //延时63US
signal = (PIND & 0x80); //读取PD7的值,也就是18B20输出的值
DelayUS(250); //延时200US*********
剩余11页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助