AVR128的程序——DS18B20与12864液晶时钟综合运用
#define uchar unsigned char
#define uint
#define DQ_IN DDRE &= ~(1 < PE6)
#define DQ_OUT DDRE |= (1 < PE6)
#define DQ_CLR PORTE &= ~(1 < PE6)
#define DQ_SET PORTE |= (1 < PE6)
#define DQ_R PINE & (1 < PE6)
#define psbset
#define psbset
#define psbclr
#define rsout
#define rsset
#define rsclr
#define rwout
#define rwset
#define rwclr
#define enout
#define enset
#define enclr
unsigned char table1[]="
unsigned char table2[]="星期六
unsigned char table3[]="
unsigned char table4[]="
uint num=10,fen=07,shi=14,ri=06,yue=02;;
void mcu_init(void);
void timer1_init(void)
{
}
void Delayus(uint US)
{
}
void Delayms(uint MS)
{
} void write_12864com(uchar com) { rwclr; rsclr; Delayus(500); PORTA=com; enset; Delayus(1000); enclr; Delayus(1000); } void write_12864dat(uchar dat) { rwclr; rsset; Delayus(500); PORTA=dat; enset; Delayus(1000); enclr; Delayus(1000); } void init12864lcd(void) { Delayms(500); write_12864com(0x30); Delayus(500); write_12864com(0x30); Delayus(500); write_12864com(0x0f); Delayus(500); write_12864com(0x01); Delayms(25); write_12864com(0x06); Delayus(2500); write_12864com(0x0c); Delayus(500); } void display(void) { uchar i; write_12864com(0x80); for(i=0;i<16;i++) { write_12864dat(table1[i]); Delayms(10); } } void display1(void) { uchar i; write_12864com(0x90); for(i=0;i<16;i++) { write_12864dat(table2[i]); Delayms(10); } } void display2(void) { uchar i; write_12864com(0x88); for(i=0;i<12;i++) { write_12864dat(table3[i]); Delayms(10); } } void display3(void) { uchar i; write_12864com(0x98); for(i=0;i<14;i++) { write_12864dat(table4[i]); Delayms(10); } } void write_sfm(uchar add,uchar date) { uchar shi,ge; shi=date/10; ge=date; write_12864com(add); write_12864dat(0x30+shi); write_12864dat(0x30+ge); } void write_wendu(uchar add,uchar date) { uchar shi,ge; shi=date/10; ge=date; write_12864com(add); write_12864dat(0x30+shi); write_12864dat(0x30+ge); } unsigned char ds1820_reset(void) { unsigned char i; DQ_OUT; DQ_CLR; Delayus(500); DQ_SET; DQ_IN; Delayus(100); i = DQ_R; Delayus(500); return i; } unsigned char ds1820_read_byte(void) { unsigned char i; unsigned char value = 0; for (i = 0; i < 8; i++) { value >>= 1; DQ_OUT; DQ_CLR; Delayus(10); DQ_SET; DQ_IN; if (DQ_R) value|=0x80; Delayus(60); } return value; } void ds1820_write_byte(unsigned char value) { unsigned char i; for (i = 0; i < 8; i++) { DQ_OUT; DQ_CLR; Delayus(10); if (value & 0x01) DQ_SET; Delayus(100); DQ_SET; value >>= 1; } } void main(void) { uchar i,j; uint temp; mcu_init(); init12864lcd(); timer1_init(); SEI(); display(); display1(); display2(); display3(); while(1) { write_sfm(0x8B,fen); write_sfm(0x89,shi); write_sfm(0x86,ri); write_sfm(0x84,yue); ds1820_reset(); ds1820_write_byte(0xCC); ds1820_write_byte(0x44); Delayms(2); ds1820_reset(); ds1820_write_byte(0xCC); ds1820_write_byte(0xbe); i=ds1820_read_byte(); j=ds1820_read_byte(); temp=j*256+i; temp=temp*0.0625; write_wendu(0x96,temp); } } void mcu_init(void) { } #pragma interrupt_handler timer1_ovf_isr:15 void timer1_ovf_isr(void) { TCNT1H = 0xE1; if(num==60) { fen++; if(fen==60) { shi++; if(shi==24) { ri++; if(ri==32) { } } } } }
AVR128DS18B2012864液晶时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)