OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5075|回复: 16

大家来看看小弟这程序,

[复制链接]

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
发表于 2014-12-20 20:24:20 | 显示全部楼层 |阅读模式
5金钱
帮忙啊,我用示波器的测试了一下,sck正常工作的呀,就是12864上显示异常
[mw_shl_code=c,true]#include <reg52.h> #include <intrins.h> #include <string.h> #define uchar unsigned char #define uint unsigned int char wendu[5]; sbit so=P1^0; sbit cs=P1^1; sbit sck=P1^2; sbit lcd_en=P1^5; sbit lcd_rw=P1^6; sbit lcd_rs=P1^7; sbit lcd_psb=P3^3; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=100;y>0;y--); } void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=1;y>0;y--); } uchar read_data() { uint i,temp=0; cs=0; _nop_(); sck=0; _nop_(); sck=1; _nop_(); sck=0; for(i=12;i>0;i--) { sck=0; temp=temp<<1; temp=temp | so; _nop_(); sck=1; } sck=0; _nop_(); sck=1; _nop_(); sck=0; _nop_(); sck=0; _nop_(); sck=1; _nop_(); sck=0; _nop_(); sck=1; cs=1; return temp; } bit lcd_busy() { bit result; lcd_rs = 0; lcd_rw = 1; lcd_en = 1; _nop_(); _nop_(); result = (bit)(P2 & 0x80); _nop_(); lcd_en = 0; return(result); } void lcd_wcmd(uchar cmd) { while(lcd_busy()); lcd_rs = 0; lcd_rw = 0; lcd_en = 0; _nop_(); _nop_(); P2 = cmd; delay_ms(1); lcd_en = 1; delay_ms(1); lcd_en = 0; } void lcd_wdat(uchar dat) { while(lcd_busy()); lcd_rs = 1; lcd_rw = 0; lcd_en = 0; P2 = dat; _nop_(); _nop_(); lcd_en = 1; delay_ms(1); lcd_en = 0; } void lcd_init() { P2=0Xff; delay(2); lcd_psb=1; delay(1); lcd_wcmd(0x30); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x01); delay(5); } void display(uchar addr,uchar *str) { uint i; lcd_wcmd(addr); for(i=0;i<strlen(str);i++) { lcd_wdat(str); delay_ms(20); } } void main() { uint temp=25; // int i; lcd_init(); while(1) { // temp=read_data(); // temp=temp<<1; // temp=temp>>4; // temp=temp/4; wendu[0]=temp/100+'0'; wendu[1]=temp/10%10+'0'; wendu[2]=temp%10+'0'; display(0x80,"西北农林科技大学"); display(0x90,"温度:"); display(0x93,wendu); display(0x95,"C"); display(0x98,"欢迎指导"); delay(1); } }[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

回复【16楼】ketangsz: --------------------------------- 嘿嘿,早的事了,程序没有问题,最后是模块坏了
爱上一匹野马,可惜放走了,就不回头了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-20 20:24:21 | 显示全部楼层
回复【16楼】ketangsz:
---------------------------------
嘿嘿,早的事了,程序没有问题,最后是模块坏了
爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-20 20:25:55 | 显示全部楼层
max6675上每个管教都正常工作的呀,为什么temp的值却没有返回呢。我单独给temp赋值,可以正常显示,是我的程序上时间的问题吗?
爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2014-12-20 20:57:22 | 显示全部楼层
楼主描述的我没明白,你用的什么温度传感器?
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2014-12-20 21:14:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-20 21:23:09 | 显示全部楼层
回复【3楼】LTKKS:
---------------------------------
max6675+k型热电偶测温,并且在12864上显示
爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-20 21:23:22 | 显示全部楼层
回复【4楼】xouou_53320:
---------------------------------
max6675+k型热电偶测温,并且在12864上显示
爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-20 21:26:04 | 显示全部楼层
回复【4楼】xouou_53320:
---------------------------------
就是说,我忽略max6675上来的温度信号后,给12864显示部分赋值的时候可以正常显示,但是当把max6675上来的温度数据给12864的时候,就不正常了,并且我单独的测试了max6675管脚的sck管脚的是矩形波,其他两个管脚都是符合芯片的时序图要求的
爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-20 21:26:56 | 显示全部楼层
回复【4楼】xouou_53320:
---------------------------------
MAX6675 可与微处理器或其它数字系统通过 3
线串 口 进行通信 ,其工作时序如图 3 所示 。
当 MAX6675 的 CS 引 脚 从高 电 平 变 为 低 电 平
时 , MAX6675 将停止任何信号的转换并在时钟 SCK
的作用下向外输出已转化的数据 。 相反 ,当 CS 从低
电平变回高电平时 , MAX6675 将进行新的转换 。 在
CS 引 脚从高电平变为低电平时 , 第一个字节 D15 将
出 现在引 脚 SO。 一个完整的数据读过程需要 16 个
时钟周期 ,数据的读取通常在 SCK的下降沿进行 。
MAX6675 的输出数据为 16 位 ,其中 D15 始终无
用 , D14~D3 对应于热电偶模拟输入电压的数字转
换量 , D2 用于检测热电偶是否断线 (D2 为 1 表明热
电偶断开) , D1 为 MAX6675 的标识符 , D0 为三态 。
需要指出的是:在以往的热电偶电路设计中 ,往往需
要专门的断线检测电路 , 而 MAX6675 已将断线检测
电路集成于片内 ,从而简化了 电路设计 。
这是芯片的工作时序,
望解答
爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-20 21:28:07 | 显示全部楼层

这是时序图

爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2014-12-20 21:32:36 | 显示全部楼层
回复【9楼】jack_zhou:
---------------------------------
没用过,帮顶
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复

使用道具 举报

15

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-11-2
在线时间
24 小时
发表于 2014-12-20 23:37:37 | 显示全部楼层
回复【9楼】jack_zhou:
---------------------------------
顶一个
回复

使用道具 举报

0

主题

133

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2014-12-21
在线时间
1 小时
发表于 2014-12-21 11:22:27 | 显示全部楼层
uchar read_data()  
{  
    uint i,temp=0;  

请注意数据类型匹配。你程序里temp为unit,返回uchar给uint temp;
 
 //  temp=read_data();  假设返回为0xff送给temp
//  temp=temp<<1;       这里变成 1111 1110
//  temp=temp>>4;       这里变成 0000 1111
//  temp=temp/4;           这里变成 0000 0011
也就是说,即使是满值,你得回的结果也只有3.如果不是满值,结果可想而知 
这里的满值是指int换成char后的满值。。。

说了这么多,其实只有一句话,把uchar read_data()  改成uint read_data().
流过汗水才能代表自己真的学会了如何不流汗。
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-21 16:41:40 | 显示全部楼层
回复【12楼】花戒:
---------------------------------
这是我昨天晚上改过的,变换温度,显示器上的温度始终是23
爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

62

主题

284

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2014-11-22
在线时间
145 小时
 楼主| 发表于 2014-12-21 16:43:14 | 显示全部楼层
[mw_shl_code=c,true]#include <reg52.h> #include <intrins.h> #include <string.h> #define uchar unsigned char #define uint unsigned long int uint connect_flag; uint gao,di; char wendu[5]; char state[2]; sbit so=P1^0; sbit cs=P1^1; sbit sck=P1^2; sbit lcd_en=P1^5; sbit lcd_rw=P1^6; sbit lcd_rs=P1^7; sbit lcd_psb=P3^3; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=100;y>0;y--); } void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=1;y>0;y--); } uint read_data() { uint i; uint temp=0; cs=0; _nop_(); //D15 sck=0; _nop_(); sck=1; _nop_(); sck=0; for(i=4;i>0;i--) //"高四位" { sck=1; gao=gao<<1; if(so==1) { gao=gao | 0x01; } else gao=gao | 0x00; _nop_(); sck=0; } for(i=8;i>0;i--)//"低八位" { sck=1; di=di<<1; if(so==1) { di=di | 0x01; } else di=di | 0x00; _nop_(); sck=0; } sck=0; _nop_(); sck=1; _nop_(); sck=0; connect_flag=so; cs=1; gao=gao<<8; gao=gao | di; return gao; } bit lcd_busy() { bit result; lcd_rs = 0; lcd_rw = 1; lcd_en = 1; _nop_(); _nop_(); result = (bit)(P2 & 0x80); _nop_(); lcd_en = 0; return(result); } void lcd_wcmd(uchar cmd) { while(lcd_busy()); lcd_rs = 0; lcd_rw = 0; lcd_en = 0; _nop_(); _nop_(); P2 = cmd; delay_ms(1); lcd_en = 1; delay_ms(1); lcd_en = 0; } void lcd_wdat(uchar dat) { while(lcd_busy()); lcd_rs = 1; lcd_rw = 0; lcd_en = 0; P2 = dat; _nop_(); _nop_(); lcd_en = 1; delay_ms(1); lcd_en = 0; } void lcd_init() { P2=0Xff; delay(2); lcd_psb=1; delay(1); lcd_wcmd(0x30); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x01); delay(5); } void display(uchar addr,uchar *str) { uint i; lcd_wcmd(addr); for(i=0;i<strlen(str);i++) { lcd_wdat(str); delay_ms(10); } } void main() { uint temp=0; uint temp1=0; int i; lcd_init(); while(1) { temp=read_data(); temp1=temp/4; for(i=200;i>0;i--) { state[0]=connect_flag+'0';//D2"控制工作状态" wendu[0]=temp1/100+'0'; wendu[1]=temp1/10%10+'0'; wendu[2]=temp1%10+'0'; display(0x80,"西北农林科技大学"); display(0x90,"温度:"); display(0x93,wendu); display(0x88,"热电偶状态:"); display(0x8e,state); display(0x95,"C"); display(0x98,"欢迎指导"); } } }[/mw_shl_code]

爱上一匹野马,可惜放走了,就不回头了
回复

使用道具 举报

0

主题

133

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2014-12-21
在线时间
1 小时
发表于 2014-12-21 19:50:06 | 显示全部楼层
仔细检查输出波形
流过汗水才能代表自己真的学会了如何不流汗。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-4-29
在线时间
0 小时
发表于 2015-5-8 10:00:35 | 显示全部楼层
搞好没有,说一下罗。我对比了下,应该是转换函数有问题吧?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 08:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表