佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 4367|回复: 31

用PIC做scientific calculator

[复制链接]
发表于 22-6-2008 11:53 PM | 显示全部楼层 |阅读模式
要如何开始? 可以用16F877A or 16F876A 吗? 用什么 C compiler 最适合?要能算floating point,log,和trigo function的。。。请各位帮帮忙,给意见,谢了!!!
回复

使用道具 举报


ADVERTISEMENT

发表于 23-6-2008 07:59 AM | 显示全部楼层
原帖由 extreme2550 于 22-6-2008 11:53 PM 发表
要如何开始? 可以用16F877A or 16F876A 吗? 用什么 C compiler 最适合?要能算floating point,log,和trigo function的。。。请各位帮帮忙,给意见,谢了!!!

PICMCU: 18F4520, 18F4620 之类大容量的MCU,或PIC24, PIC32,  
但是PIC16F就比较难用, RAM太小了。。。

建议: CCS C  

支持函数:
abs( ),cosh( ),labs( ),sin( )
acos( ),div( ),ldexp( ),sinh( ),
asin( ),exp( ),ldiv( ),sqrt( ),
atan( ),fabs( ),log( ),tan( )
atan2( ),floor( ),log10( ),tanh( )
ceil( ),fmod( ),modf( ),   
cos( ),frexp( ),pow( )
回复

使用道具 举报

 楼主| 发表于 23-6-2008 03:12 PM | 显示全部楼层
原帖由 pic 于 23-6-2008 07:59 AM 发表

PICMCU: 18F4520, 18F4620 之类大容量的MCU,或PIC24, PIC32,  
但是PIC16F就比较难用, RAM太小了。。。

建议: CCS C  

支持函数:
abs( ),cosh( ),labs( ),sin( )
acos( ),div( ),ldexp( ) ...



谢谢pic的回复
18F4520 & 18F4620 的architecture 都和 16F877A 差不多对吗?CCS C compiler 在它的网站上都只是提供demo版本(2k memory size & 30days expiry date)。。。那我能不能用?还是一定要买full version才能完成我的project?
回复

使用道具 举报

发表于 23-6-2008 06:08 PM | 显示全部楼层
原帖由 extreme2550 于 23-6-2008 03:12 PM 发表
谢谢pic的回复
18F4520 & 18F4620 的architecture 都和 16F877A 差不多对吗?CCS C compiler 在它的网站上都只是提供demo版本(2k memory size & 30days expiry date)。。。那我能不能用?还是一定要买fu ...

18F在Floating point上比16F优。

除非你的code很复杂, 不然2K勉强够的。
回复

使用道具 举报

 楼主| 发表于 24-6-2008 01:23 AM | 显示全部楼层
原帖由 pic 于 23-6-2008 06:08 PM 发表

18F在Floating point上比16F优。

除非你的code很复杂, 不然2K勉强够的。



那么如果用MPLAB C 或mikroC 可以吗?都一样的是吗?要如何开始?我之前学过C 和学过用assembly language来program PIC,但要如何用C 来program PIC我就一窍不通 。。。要先了解什么?有什么reference/books 可以介绍我来读吗?thanksss

[ 本帖最后由 extreme2550 于 24-6-2008 01:29 AM 编辑 ]
回复

使用道具 举报

发表于 24-6-2008 08:39 AM | 显示全部楼层
原帖由 extreme2550 于 24-6-2008 01:23 AM 发表
那么如果用MPLAB C 或mikroC 可以吗?都一样的是吗?要如何开始?我之前学过C 和学过用assembly language来program PIC,但要如何用C 来program PIC我就一窍不通 。。。要先了解什么?有什么reference/bo ...

你可以用C18 (MPLab) 或mikroC, 都是一样的, 只是我只熟悉CCS + PIC MCU+ Proteus, 这三种以外的, 我是不会的, 如果你问我,可能不会很好的为你解答。。。

Proteus 有提供一个PIC18的普通Calculator, 它是用IAR C 写的, 含源码, 你可以从这个Example 范例开始。
不过,它的小数点只有4位数。  下面我是输入22 / 7 = 3.1428
回复

使用道具 举报

Follow Us
 楼主| 发表于 25-6-2008 01:01 PM | 显示全部楼层
原帖由 pic 于 24-6-2008 08:39 AM 发表

你可以用C18 (MPLab) 或mikroC, 都是一样的, 只是我只熟悉CCS + PIC MCU+ Proteus, 这三种以外的, 我是不会的, 如果你问我,可能不会很好的为你解答。。。

Proteus 有提供一个PIC18的普通Calculator, 它是 ...


谢了 。。。想问一下,我已install了PICC Lite C (Hi-Tech),MPLAB C18 Student Edition(Microchip),MPLAB IDE v8.10(Microchip)。。。但是要怎样start the program(.exe)? 为什么我install后没有shortcut icon的?(我会install PICC Lite C是因为我看的书是用它来compile code的,但是就不懂得这么开
还有,Proteus我也是安装了,而且也有它的source code了,它的code是不是分为三部分?一个是main,剩下两个是LCD和keypad的对吗?我能不能copy这三个code然后用MPLAB C18/mikroC/PICC Lite C 来compile? Thanks again
回复

使用道具 举报

发表于 25-6-2008 02:42 PM | 显示全部楼层
原帖由 extreme2550 于 25-6-2008 01:01 PM 发表
谢了。。。想问一下,我已install了PICC Lite C (Hi-Tech),MPLAB C18 StudentEdition(Microchip),MPLAB IDE v8.10(Microchip)。。。但是要怎样start theprogram(.exe)? 为什么我install后没有shortcut icon的?(我会install PICC LiteC是因为我看的书是用它来compile code的,但是就不懂得这么开

PICC Lite 是要挂在MPLAB 里用的, 你可以去找MPLab的tutorial 看看。。。 (我很久很久都没有用MPLab了)


还有,Proteus我也是安装了,而且也有它的sourcecode了,它的code是不是分为三部分?一个是main,剩下两个是LCD和keypad的对吗?

是有三个file, 没有错。


我能不能copy这三个code然后用MPLABC18/mikroC/PICC Lite C 来compile?

可能要做适当的修改。你参考就好,不要跟它的。。。
建议最好是自己写, 先写LCD 的部分,然后Keypad。 可以了再做加法, 渐渐到你的Scitific function。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 25-6-2008 03:11 PM | 显示全部楼层
原帖由 pic 于 25-6-2008 02:42 PM 发表

PICC Lite 是要挂在MPLAB 里用的, 你可以去找MPLab的tutorial 看看。。。 (我很久很久都没有用MPLab了)



是有三个file, 没有错。



可能要做适当的修改。你参考就好,不要跟它的。。。
建议最好是 ...



哦。。。刚才式了用MPLAB IDE + MPLAB C18 compiler + user guide manual, 果然能够!  那就是说明,MPLAB C18 和PICC Lite都是要用IDE才能操作的咯(IDE的主要功能到底是??? )?写LCD要不要用到LCD driver?因为我记得以前学校里的VHDL code好像一定要include LCD driver才能让LCD display东西。
回复

使用道具 举报

发表于 25-6-2008 04:13 PM | 显示全部楼层
原帖由 extreme2550 于 25-6-2008 03:11 PM 发表
哦。。。刚才式了用MPLAB IDE + MPLAB C18 compiler + user guide manual, 果然能够!  那就是说明,MPLAB C18 和PICC Lite都是要用IDE才能操作的咯(IDE的主要功能到底是??? )?

IDE (Integrated development environment) 整合開發環境, 是一種輔助程式開發人員開發軟件的應用軟件。
http://en.wikipedia.org/wiki/Integrated_Development_Environment

写LCD要不要用到LCD driver?因为我记得以前学校里的VHDL code好像一定要include LCD driver才能让LCD display东西。

不是一定, 只是这些重复使用的Code, 会把它做成Driver, 方便以后再用, 不同的compiler, 不同的人, 会有不同适合自己的Driver, 好像我就有自己的LCD driver, 配合我的设计和导线, I/O等等。
回复

使用道具 举报

发表于 26-6-2008 01:37 AM | 显示全部楼层
#3

MPLab IDE 是由microchip研发的开发工具,将MPLab IDE与C Compiler一起并用能提升source code开发时间。

如何开始?
必须在MPLab IDE里头开一个project, 循序如下

1)Open MPLab IDE
2)Project > ProjectWizard > Next
3)Choose a microcontrollermodel
4)At [Active Toolsuite]box, choose [HI-TECH PICC-Lite Toolsuite]
5)Choose a location forproject folder and project file
6)Next > Next >Finish



如果成功, 左边将有一个project windows, [projectname.mcw]
接下来就是必须开一个source file,

               File > New
银幕会有一个可以输入文字的windows. 将它储存,  filename.c
之后就将
filename.c 嵌入project里:

                  
File > Add New File To Project
                  选
filename.c
在 [projectname.mcw] 的windows里的[sourcefile]folder里将出现 filename.c , doubleclick 此file
之前空白,可以输入文字的windows将在次出现. 这里就是你写原码的地方啦.
原码的整体如下

#include<pic.h>
main()
{
    //your coding

}

接着就是compile 和 debug 了....
如果成功compile, 另一个windows 将弹出并显示microcontroller的资料, 如memory usage等等....
看到这windows 就代表成功了

评分

参与人数 1积分 +10 收起 理由
fritlizt + 10 谢谢热心解答。加分奖励奖励

查看全部评分

回复

使用道具 举报

发表于 14-7-2008 09:28 PM | 显示全部楼层
原帖由 extreme2550 于 24-6-2008 01:23 AM 发表

那么如果用MPLAB C 或mikroC 可以吗?都一样的是吗?要如何开始?我之前学过C 和学过用assembly language来program PIC,但要如何用C 来program PIC我就一窍不通 。。。要先了解什么?有什么reference/books 可以介绍我来读吗?thanksss


http://www.scribd.com/doc/886920/PICmicro-MCU-C-An-introduction-to-programming-The-Microchip-PIC-in-CCS-C

我找到一本

评分

参与人数 1积分 +15 收起 理由
pic + 15 谢谢分享。

查看全部评分

回复

使用道具 举报

发表于 16-7-2008 10:01 AM | 显示全部楼层

Nigel Gardner 的那本书是最适合初学者的一本CCS C 入门的书。
网络有很多盗版。。。
有钱的话, 去买一本支持作者。
回复

使用道具 举报

 楼主| 发表于 18-7-2008 10:29 PM | 显示全部楼层


谢了BillGates兄  这本书不错。。。后来发现,其实网上也有很多类似的盗版书,都是市面上找不到的
回复

使用道具 举报

发表于 19-7-2008 04:21 PM | 显示全部楼层
原帖由 extreme2550 于 18-7-2008 10:29 PM 发表

谢了BillGates兄  这本书不错。。。后来发现,其实网上也有很多类似的盗版书,都是市面上找不到的


我也是菜鳥
最近才開始玩
發覺蠻有趣的
所以找了很多書來參考
希望大家有用
回复

使用道具 举报

 楼主| 发表于 7-8-2008 08:35 PM | 显示全部楼层
想问关于c programming (for PIC 18F),有什么方法,就像我们平时用scientific calculator,type进equation后,比如说34 + 23 - 46 X 2,然后LCD就会显示34 + 23 - 46 X 2,然后我们按 “=” 键时,就会显示-35。就是说我所输入的equation将会被evaluate 然后计算出来,而不是像普通的计算机,从34到+, 然后23,然后 -,到最后才 X2 一个一个算??各位帮帮忙啊。。。
回复

使用道具 举报


ADVERTISEMENT

发表于 9-8-2008 09:10 AM | 显示全部楼层
原帖由 extreme2550 于 7-8-2008 08:35 PM 发表
想问关于c programming (for PIC 18F),有什么方法,就像我们平时用scientific calculator,type进equation后,比如说34 + 23 - 46 X 2,然后LCD就会显示34 + 23 - 46 X 2,然后我们按 “=” 键时,就会显示-35。就是 ...

你输入的是很多variable,还有Operator,先存入, 按‘=’ 时‘ 才处理, 先乘除,后加减。
回复

使用道具 举报

 楼主| 发表于 27-8-2008 06:45 AM | 显示全部楼层
原帖由 pic 于 9-8-2008 09:10 AM 发表

你输入的是很多variable,还有Operator,先存入, 按‘=’ 时‘ 才处理, 先乘除,后加减。



想问,我现在用着PIC18F452做普通的计算机,source code是用你介绍的Proteus 里的code。但奇怪的是,问什么有时候像显示的答案会有乱码?比如说,324817 X 2 = 650-*+,会有-*+的出现?而且我想问PIC18能算到几个小数点?能用double吗?
回复

使用道具 举报

发表于 31-8-2008 07:31 AM | 显示全部楼层
原帖由 extreme2550 于 27-8-2008 06:45 AM 发表
但奇怪的是,问什么有时候像显示的答案会有乱码?比如说,324817 X 2 = 650-*+,会有-*+的出现?

有虫吧。。。

想问PIC18能算到几个小数点?能用double吗?

要用32 bit float,
能算到几个小数点我没试过, 4个应该可以。

有时候, 要精确, 可以用Int32, 然后在显示时自己加小数点。
如 123.45678 = 其实是12345678/100000

显示12345678, 但自己+ 小数点变成 123.45678
会用很多RAM,我不知道适用于你吗, 但这是其中一种方法。
回复

使用道具 举报

 楼主| 发表于 31-8-2008 05:46 PM | 显示全部楼层
原帖由 pic 于 31-8-2008 07:31 AM 发表

有虫吧。。。


要用32 bit float,
能算到几个小数点我没试过, 4个应该可以。

有时候, 要精确, 可以用Int32, 然后在显示时自己加小数点。
如 123.45678 = 其实是12345678/100000

显示12345678, 但 ...




哦。。。但是要怎样才能知道要加到几个小数点?
我的意思是code里要怎样写?

虫是已捉到了 是code里的calc_format 问题。。。
但是如果像cos 60,答案因该是0.5,可是我算出来的是0.50000014 。。。为什么???


这是calc_format的code....(来自Proteus 7 里的calculator sample code)

void calc_format (float f)    // f is the result value after calculation
{
   unsigned char dbuf [MAX_DISPLAY_CHAR + 1];
   float divisor=1000000000;
   int digit;
   int pad=0, p=0;

   // Sort out minus sign:
   if (f >= 0)
      dbuf[p] = ' ';
   else
    { dbuf[p++] = '-';
      f = -f;
    }
   if (f >= divisor)
      dbuf[p++] = 'E';
   else
        while (p < MAX_DISPLAY_CHAR && (divisor > 1 || f >= 0.00000001))
       { divisor /= 10;     //this divisor will keep decreasing until 0 due to while loop
         digit = (f/divisor)+0.00005;
         if (divisor < 1 && divisor > 0.01)
            dbuf[p++] = '.';
         if (digit != 0 || divisor < 10)
          { dbuf[p++] = digit + '0';
            pad = TRUE;
          }
         else if (pad)
            dbuf[p++] = '0';
         f -= digit*divisor;
       }
   dbuf[p] = 0;
   calc_display2(dbuf);
}
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 5-2-2025 07:53 PM , Processed in 0.143177 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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