分享

单片机

 SHIFAN8518 2012-04-04
51单片机+12864+时钟1302程序
2009年09月02日 星期三 12:33

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,
0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0E};

///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
unsigned char code lcd_letter_8_16[]=
{


0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00
};
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
unsigned char code lcd_lattice16_16[]={


0x80,0x84,0x44,0xC4,0xA4,0x94,0x8C,0xFF,0x8C,0x94,0xA4,0x24,0x44,0xC4,0x40,0x00,
0x00,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x00,

0x08,0x08,0x08,0xFF,0x48,0x28,0xFE,0x42,0xD2,0xD2,0x52,0x52,0x52,0x52,0x42,0x00,
0x02,0x42,0x81,0x7F,0x40,0x30,0x0F,0x00,0xFF,0x40,0x23,0x04,0x1C,0x63,0x22,0x00,

0x00,0x40,0xB2,0x96,0x9A,0x92,0xF6,0x9A,0x93,0x91,0x99,0x97,0x91,0x90,0x30,0x00,
0x40,0x20,0xA0,0x90,0x4C,0x47,0x2A,0x2A,0x12,0x1A,0x26,0x22,0x40,0xC0,0x40,0x00,

0x00,0x00,0xF8,0x28,0x29,0x2E,0x2A,0xF8,0x28,0x2C,0x2B,0x2A,0xF8,0x00,0x00,0x00,
0x08,0x08,0x0B,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x0B,0x08,0x08,0x00,

0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x18,0x10,0x00,
0x80,0x40,0x30,0x0F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,

0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00,

0x80,0x40,0xF0,0x2C,0x43,0x20,0x98,0x0F,0x0A,0xE8,0x08,0x88,0x28,0x1C,0x08,0x00,
0x00,0x00,0x7F,0x00,0x10,0x0C,0x03,0x21,0x40,0x3F,0x00,0x00,0x03,0x1C,0x08,0x00,

0xFE,0x02,0x02,0xFE,0x80,0x91,0xFF,0x91,0x91,0xFF,0x00,0xFF,0x21,0xDD,0x03,0x00,
0x07,0x02,0x42,0x27,0x10,0x0C,0x03,0x20,0x40,0x3F,0x00,0x7F,0x08,0x10,0x0F,0x00,

0x02,0x42,0x42,0xFE,0x42,0x42,0xFE,0x02,0x02,0xFA,0x02,0x02,0xFE,0x00,0x00,0x00,
0x08,0x08,0x08,0x07,0x84,0x44,0x23,0x18,0x06,0x01,0x3E,0x40,0x43,0x40,0x78,0x00,

0x00,0x04,0x04,0xC4,0x64,0x9C,0x87,0x84,0x84,0xE4,0x84,0x84,0x84,0x84,0x04,0x00,
0x04,0x02,0x01,0x7F,0x00,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x00,

0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,

0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,

0x80,0x80,0x80,0x80,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x80,0x80,0x80,0x00,
0x00,0x40,0x20,0x10,0x0E,0x10,0x20,0x3F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00,

};

/
/
}
void displaycls(uchar background) //1清白屏,0清成黑屏
{
uchar i;
uchar j;
lcdinit();
wrst_le(0xc0);
wrst_ri(0xc0) ; //设置显示起始行
for(i=0;i<8;i++)
{
wrst_le(0xb8|i); //设置页地址
wrst_le(0x40|0); //设置列地址
for(j=0;j<64;j++)
{
if (background==0)
{
wrda_le(0xff);//清成白屏
}
else
{
wrda_le(0);//清成黑屏
}
}
}
for(i=0;i<8;i++)
{
wrst_ri(0xb8|i);//设置页地址
wrst_ri(0x40|0);//设置列地址
for(j=0;j<64;j++)
{
if (background==0)
{
wrda_ri(0xff);//清成白屏
}
else
{
wrda_ri(0);//清成黑屏
}
}
}
}
void displayword(uchar lcdrow,uchar lcdline,uchar wordnumber)
{ //在指定的列和行显示一个汉字
uchar i;
uint j;
if(lcdline<64)
{
lcdinit();
wrst_le(0xc0);
wrst_le(0xb8|lcdrow); //设置页地址
wrst_le(0x40|lcdline); //设置列地址
j=(wordnumber-1)*32; //确定从第几个字开始显示
for(i=0;i<32;i++)
{
if(dot_not==1) wrda_le(~lcd_lattice16_16[i+j]);//取反显示
else wrda_le(lcd_lattice16_16[i+j]); //直接显示
if(i==15) //如果前16个数据显示完(一组),刷新一下
{
lcdinit();
wrst_le(0xb8|(lcdrow+1)); //设置页地址
wrst_le(0x40|lcdline); //设置列地址
}
}
}
else
{
lcdinit();
wrst_ri(0xc0); //设置显示起始行
wrst_ri(0xb8|lcdrow); //设置页地址
wrst_ri(0x40|(lcdline-64)); //设置列地址
j=(wordnumber-1)*32;
for(i=0;i<32;i++)
{
if(dot_not==1)wrda_ri(~lcd_lattice16_16[i+j]);
else wrda_ri(lcd_lattice16_16[i+j]);
if(i==15)
{
wrst_ri(0xb8|(lcdrow+1)); //设置页地址
wrst_ri(0x40|(lcdline-64));//设置列地址
}
}
}
}
void display_8_16(uchar lcdrow,uchar lcdline,uchar datanumber)
{ //在指定的列和行显示一个字符
uchar i;
uint j;
if(lcdline<64)
{
wrst_le(0xc0);
wrst_le(0xb8|lcdrow);//设置页地址
wrst_le(0x40|lcdline);//设置列地址
j=datanumber;
j=(16*j);
for(i=0;i<16;i++)
{
if(dot_not) {wrda_le(~lcd_letter_8_16[i+j]);}
else {wrda_le(lcd_letter_8_16[i+j]);}
if(i==7)
{wrst_le(0xb8|(lcdrow+1));//设置页地址
wrst_le(0x40|lcdline);//设置列地址
}
}
}
else if(lcdline<122)
{
wrst_ri(0xc0);//设置显示起始行
wrst_ri(0xb8|lcdrow);//设置页地址
if(lcdline<121)
{
wrda_ri(0x40|(lcdline-64));//设置列地址
}
j=datanumber*16;
for(i=0;i<16;i++)
{
if(dot_not)
{
wrda_ri(~lcd_letter_8_16[i+j]);
}
else {wrda_ri(lcd_letter_8_16[i+j]);}
if(i==7)
{wrst_ri(0xb8|(lcdrow+1));//设置页地址
wrst_ri(0x40|(lcdline-64));//设置列地址
}
}
}
}

void displaycoslight(uchar which_bmp) //显示一幅图像函数
{
uchar i;
uchar j;
wrst_le(0xc0);
wrst_ri(0xc0);
for(i=1;i<6;i++)
{
wrst_ri(0xb8|i);
wrst_ri(0x40|32);
for(j=0;j<32;j++)
{
wrda_ri(lcd_lattice_coslight[which_bmp][(64*(i-1))+j]);
}
wrst_le(0xb8|i);
wrst_le(0x40|00);
for(j=32;j<64;j++)
{
wrda_le(lcd_lattice_coslight[which_bmp][(64*(i-1))+j]);
}
}
}
//*************************************************************************************
//DS18B20温度传感器程序
//*************************************************************************************
void delay_18B20( uint i) //12,一次6us,加进入退出14us(8M晶振,一次9us)
{
while(i--);
}
void delay(uchar n)
{
uchar i,j;
for(i=n;i>0;i--)
for(j=20;j>0;j--);
}
void ds1820rst()
{
unsigned char x=0;
DQ = 1;
delay_18B20(4); //4
DQ = 0;
delay_18B20(60); //603us
DQ = 1;
delay_18B20(14);//40
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay_18B20(20);
}
uchar ds1820rd()
{ unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{ DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
delay_18B20(4);//10
}
return(dat);
}

void ds1820wr(uchar wdata)
{unsigned char i=0;
for (i=8;i>0;i--)
{ DQ = 0;
DQ = wdata&0x01;
delay_18B20(5); //10
DQ = 1;
wdata>>=1;
}
}
uint read_temp()
{
float aaa;
uchar a,b;
ds1820rst();
ds1820wr(0xcc);
ds1820wr(0x44);
delay_18B20(80);
ds1820rst();
ds1820wr(0xcc);
ds1820wr(0xbe);
delay_18B20(80);
a=ds1820rd();
b=ds1820rd();
aaa=(b*256+a)*6.25;
tvalue=(uint)aaa;
return(tvalue);
}
void ds1820disp( unsigned int tvalue1)
{
disdata[0]=tvalue1/1000;
disdata[1]=tvalue100/100;
disdata[2]=tvalue10/10;
disdata[3]=tvalue1;
delay_18B20(5);
display_8_16(3,8*8,11);
display_8_16(3,8*9,disdata[0]);
display_8_16(3,8*10,disdata[1]);
display_8_16(3,8*11,10);
display_8_16(3,8*12,disdata[2]);
display_8_16(3,8*13,disdata[3]);
}
//************************************************************************************
//主函数
//************************************************************************************
void main()
{
// uchar temp=0x80; // 地址80:秒写入寄存器

uint temp1;
WE=0;
displaycls (1); //清屏
displayword(0,16*0,1); //李振爱片机
displayword(0,16*1,2);
displayword(0,16*2,3);
displayword(0,16*3,4);
displayword(0,16*4,5);
displayword(0,16*5,6);
displayword(0,16*6,7);
displayword(0,16*7,8);

displayword(3,16*0,9);
displayword(3,16*1,10);
displayword(3,16*2,11);
displayword(3,16*3,12);

set_time(clk_time); //调用设置时间函数

while(1)
{
temp1=read_temp();
ds1820disp(temp1);
//get_time(curtime); //调用取时间函数
display1302();
}
}


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多