TA的每日心情 | 奋斗 2016-6-12 21:59 |
---|
签到天数: 647 天 连续签到: 1 天 [LV.9]以坛为家II
|
本帖最后由 小鸟愤怒 于 2012-10-15 17:18 编辑
最近一直宅寝室(你懂的),实验室没开,本想分享个简易数字示波器的,没示波器还真不好调,无奈暂时分享一个同样是画曲线的温度波形采集系统吧,其实和简易数字示波器没多大区别,但愿有盆友有精力把我的代码加以修改。。。。
这次分享的心得其实也不难,贵在程序算法,我写的不够完善,bug肯定是有的,欢迎留言并拍砖,不胜感激。。。。新手一枚,我需要进步。。。
晒图————————————————————————————————————
开机显示LOGO。。。。QQ哥。。。
下面是主要代码:
float temp=0;
void display_temp()
{
char ptr[3];
POINT_COLOR = RED;BACK_COLOR = BLUE;
temp=DS18B20_Get_Temp();
ptr[0] = (int)temp/100; //数据分离
ptr[1] = (int)temp/10%10;
ptr[2] = (int)temp%10;
SPILCD_ShowNum( 62,2,ptr[0],1,ASCII1608); //三位数字显示
SPILCD_ShowNum(70,2,ptr[1],1,ASCII1608);
SPILCD_ShowChar(78,2,'.',ASCII1608,0);
SPILCD_ShowNum(86,2,ptr[2],1,ASCII1608);
ChineseChar(94,2,1,LIGHTGREEN,BLUE,1); //℃
}
int main(void)
{
u8 x=30,y,h1,h2,point,num_t,t=90,s=0;
DelayInit();
LED_Init();
DS18B20_Init();
SPILCD_Init(); //初始化SPILCD
BMP24Shutter(8); //显示QQ哥图片
DelayMs(3000);
SPILCD_Clear(BLUE);
ChineseChar(10,2,1,LIGHTGREEN,BLUE,6); //温
ChineseChar(26,2,1,LIGHTGREEN,BLUE,7); //度
SPILCD_Fill(30,20,127,140,BLACK); //初次刷新描线背景
POINT_COLOR = YELLOW;
for(h1=20;h1<=140;h1+=10) //画纵轴温度刻度线
{
SPILCD_DrawLine(22,h1,29,h1);
}
for(h1=25;h1<140;h1+=10)
{
SPILCD_DrawLine(27,h1,29,h1);
}
for(h2=29;h2<128;h2+=10) //画横轴时间刻度线
{
SPILCD_DrawLine(h2,141,h2,148);
}
for(h2=34;h2<128;h2+=10)
{
SPILCD_DrawLine(h2,141,h2,143);
}
SPILCD_ShowNum(1,25,120,3,ASCII1206); //画温度刻度值
SPILCD_ShowNum(1,35,110,3,ASCII1206);
SPILCD_ShowNum(1,45,100,3,ASCII1206);
SPILCD_ShowNum(12,135,0,1,ASCII1206);
for(num_t=55;num_t<=130;num_t+=10)
{
t-=10;
SPILCD_ShowNum(6,num_t,t,2,ASCII1206);
}
for(num_t=27;num_t<=160;num_t+=10) //画时间刻度值
{
SPILCD_ShowNum(num_t,148,s,1,ASCII1206);
s+=1;
}
while(1)
{
DelayMs(1000); //此延时可控制描点速率
LED0=!LED0;
LED1=!LED1;
display_temp();
point=(int)temp;
x=x+1;
if(temp>750) //绘曲线算法,根据本液晶打点代码而写,
{y=159-point*0.1-44-95;} //有点奇怪为什么不是线性的
if((temp<=750.0)&&(temp>700.0))
{y=159-point*0.1-44-75;}
if((temp<=700.0)&&(temp>650.0))
{y=159-point*0.1-44-55;}
if((temp<=650.0)&&(temp>510.0))
{y=159-point*0.1-44-25;}
if((temp<=510.0)&&(temp>255.0))
{y=159-point*0.1-44;}
else
{y=159-point*0.1-44+25;} //纵轴打点规则公式
if(x>127)
{
x=30;
SPILCD_Fill(30,20,127,140,BLACK); //画完一个周期曲线需要再刷新下背景
}
SPILCD_DrawPoint(x,y); //采集点完成后,开始描绘曲线
}
}
代码分享:超核KinetisV2.2温度曲线显示--QQ哥.zip
天气不好,阴沉沉地下了点小雨,背景音乐有点小悲
|
|