搜索
bottom↓
回复: 14

【求】谁有 CCS 的 4.112 版本?

[复制链接]

出0入12汤圆

发表于 2010-10-9 12:50:04 | 显示全部楼层 |阅读模式
感觉比 PICC 好很多,谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-10-12 08:57:35 | 显示全部楼层
使用上要简单一些。一般都是使用库函数。但是国内好像用的人不多。

出0入12汤圆

 楼主| 发表于 2010-10-12 12:52:39 | 显示全部楼层
我用过 mcc18,picc18 和 ccs ,最后还是觉得 ccs 的好用。

生成代码比其 mcc18 见解,用 icd 调试的时候比 picc18 好调。

出0入0汤圆

发表于 2010-10-12 13:35:50 | 显示全部楼层
一直用ccs的漂过 (N年以前高齐的的ccs讨论很火....现在单飞了....怀念)

出0入0汤圆

发表于 2010-10-13 20:09:00 | 显示全部楼层
回复【楼主位】abutter  
-----------------------------------------------------------------------
坚定不移的以PIC为中心,走CCS发展的路线。

出0入12汤圆

 楼主| 发表于 2010-10-14 08:35:44 | 显示全部楼层
回复【4楼】a_zhu13  朱良龙
-----------------------------------------------------------------------

那多找资源吧,我现在用的 4.109 版本,没有遇到什么问题。

出0入0汤圆

发表于 2010-10-14 09:46:53 | 显示全部楼层
听说是的确不错的; 有哪个  联接吗?

出0入42汤圆

发表于 2010-10-14 11:10:12 | 显示全部楼层
回复【5楼】abutter
-----------------------------------------------------------------------


一直在用CCS 也是4.109

但是前些时间遇到一个问题:格式化输出时输出的数值不正确了,一直郁闷中。   程序在跨页页时,好像指针运行不太合理。还在研究怎么回事中。。。

出0入12汤圆

 楼主| 发表于 2010-10-14 13:24:14 | 显示全部楼层
回复【7楼】wangjiati  =_=
-----------------------------------------------------------------------

贴代码看看?

出0入42汤圆

发表于 2010-10-14 14:56:40 | 显示全部楼层

         data_out_p = data_out;      
         write_expanded_outputs(data_out_p);    //4位 74hc595 输出数据
     
         data_in_p =  data_comparison;          //data_out_p是指针,data_comparison是数据表,指针赋值数据表起始地址
         lcd_gotoxy(0,1);              
         printf(lcd_putc,"M%02d %02d:%x%x%x%x\n",work_pattern+1,(channel+1),*(data_in_p),*(data_in_p+1),*(data_in_p+2),*(data_in_p+3) ); //显示器正确值


printf(lcd_putc,"M%02d %02d...   这里我明明用的是“%02d”它却显示内部字符集。从0开始。

出0入12汤圆

 楼主| 发表于 2010-10-15 19:29:28 | 显示全部楼层
回复【9楼】wangjiati  =_=
-----------------------------------------------------------------------

怎么 printf 的第一个参数是 lcd_putc ?

出0入42汤圆

发表于 2010-10-15 22:17:34 | 显示全部楼层
回复【10楼】abutter
-----------------------------------------------------------------------

/*******************************************************************************
File name: flex_lcd.h
Company:
Note:
*******************************************************************************/
/*History
    DATE: 2009-11-27
    File Version: 0.0.1.0
    2010-5-12 v0.0.1.1  
*******************************************************************************/

///* flex_lcd.h
/*
These pins are for the Microchip PicDem2-Plus board,
which is what I used to test the driver.  Change these
pins to fit your own board.

  lcd_init()   Must be called before any other function.
                                                                       
  lcd_putc(c)  Will display c on the next position of the LCD.         
                     The following have special meaning:               
                      \f  Clear display                                
                      \n  Go to start of second line                  
                      \b  Move back one position
                                                        -------------2010-5-12 WangJiati
                      \|  ON Flashing Cursor
                      \!  OFF Flashing Cursor     
                      \>  Cursor or Display Shift                                          
  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)        
                                                                       
  lcd_getc(x,y)   Returns character at position x,y on LCD
***/

#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7

#define LCD_E     PIN_A5
#define LCD_RS    PIN_A4
//#define LCD_RW    PIN_A5

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

//#define USE_LCD_RW   1      

//========================================

#define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
//******************************************************************************/
                        
//// prototyping of functions

void lcd_send_nibble(int8 nibble) ;

#ifdef USE_LCD_RW
int8 lcd_read_nibble(void) ;   
#endif
#ifdef USE_LCD_RW
int8 lcd_read_byte(void) ;
#endif
void lcd_send_byte(int8 address, int8 n) ;
void lcd_init(void) ;
//----------------------------
void lcd_gotoxy(int8 x, int8 y) ;
//-----------------------------
void lcd_putc(char c,) ;
//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y) ;
#endif


-------------------------------------------------------------------------------------------------------------------



/*******************************************************************************
File name: flex_lcd.c
Company:
Note:
*******************************************************************************/
/*History
    DATE: 2009-11-27
    File Version: 0.0.1.0
    2010-5-12 v0.0.1.1  
*******************************************************************************/
/* flex_lcd.c

These pins are for the Microchip PicDem2-Plus board,
which is what I used to test the driver.  Change these
pins to fit your own board.

  lcd_init()   Must be called before any other function.
                                                                       
  lcd_putc(c)  Will display c on the next position of the LCD.         
                     The following have special meaning:               
                      \f  Clear display                                
                      \n  Go to start of second line                  
                      \b  Move back one position
                                                        -------------2010-5-12 Wangjiati
                      \|  ON Flashing Cursor
                      \!  OFF Flashing Cursor     
                      \>  Cursor or Display Shift                                          
  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)        
                                                                       
  lcd_getc(x,y)   Returns character at position x,y on LCD


#define LCD_DB4   PIN_D0
#define LCD_DB5   PIN_D1
#define LCD_DB6   PIN_D2
#define LCD_DB7   PIN_D3

#define LCD_E     PIN_A1
#define LCD_RS    PIN_A3
#define LCD_RW    PIN_A2

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

#define USE_LCD_RW   1      

//========================================

#define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
******************************************************************************/

int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc,                    // Display on
1,                      // Clear display
6                       // Increment cursor
};
                              

//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
// Note:  !! converts an integer expression
// to a boolean (1 or 0).
output_bit(LCD_DB4, !!(nibble & 1));
output_bit(LCD_DB5, !!(nibble & 2));  
output_bit(LCD_DB6, !!(nibble & 4));   
output_bit(LCD_DB7, !!(nibble & 8));   

delay_cycles(2);
output_high(LCD_E);
delay_us(5);
output_low(LCD_E);
}

//-----------------------------------
// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine.  For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.      

#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
// Create bit variables so that we can easily set
// individual bits in the retval variable.
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3

retval = 0;
   
output_high(LCD_E);
delay_cycles(1);

retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);
  
output_low(LCD_E);
   
return(retval);   
}   
#endif

//---------------------------------------
// Read a byte from the LCD and return it.

#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;

output_high(LCD_RW);
delay_cycles(1);

high = lcd_read_nibble();

low = lcd_read_nibble();

return( (high<<4) | low);
}
#endif

//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);
#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);  
#endif

if(address)
   output_high(LCD_RS);
else
   output_low(LCD_RS);
      
delay_cycles(1);

#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif

output_low(LCD_E);

lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}

//----------------------------
void lcd_init(void)
{
int8 i;

output_low(LCD_RS);

#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif

output_low(LCD_E);

delay_ms(15);

for(i=0 ;i < 3; i++)
   {
    lcd_send_nibble(0x03);
    delay_ms(5);
   }

lcd_send_nibble(0x02);

for(i=0; i < sizeof(LCD_INIT_STRING); i++)
   {
    lcd_send_byte(0, LCD_INIT_STRING);
   
    // If the R/W signal is not used, then
    // the busy bit can't be polled.  One of
    // the init commands takes longer than
    // the hard-coded delay of 60 us, so in
    // that case, lets just do a 5 ms delay
    // after all four of them.
    #ifndef USE_LCD_RW
    delay_ms(5);
    #endif
   }

}

//----------------------------

void lcd_gotoxy(int8 x, int8 y)
{
int8 address;

if(y != 1)
   address = lcd_line_two;
else
   address=0;

address += x-1;
lcd_send_byte(0, 0x80 | address);
}

//-----------------------------
void lcd_putc(char c,)
{
switch(c)
   {
    case '\f':
      lcd_send_byte(0,1);
      delay_ms(2);
      break;
   
    case '\n':
       lcd_gotoxy(1,2);
       break;
   
    case '\b':
       lcd_send_byte(0,0x10);
       break;
      
    case '\|':
       lcd_send_byte(0,0x0f);
       break;
    case '\!':
       lcd_send_byte(0,0x0c);
       break;
    case '\>':
       lcd_send_byte(0,0x14);
       break;
/*
    case '\h':
       lcd_send_byte(0,0x02);
       break;   
*/
    default:
       lcd_send_byte(1,c);
       break;
   }
}

//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
char value;

lcd_gotoxy(x,y);

// Wait until busy flag is low.
while(bit_test(lcd_read_byte(),7));  

output_high(LCD_RS);
value = lcd_read_byte();
output_low(lcd_RS);

return(value);
}
#endif


以上是LCD驱动

出0入12汤圆

 楼主| 发表于 2010-10-16 07:01:10 | 显示全部楼层
回复【11楼】wangjiati  =_=
-----------------------------------------------------------------------

有串口吗?如果有串口,尝试打印到串口看看是否不是正确的。

否则就是 printf 内部格式化错误了。你用啥版本?

出0入42汤圆

发表于 2010-10-16 07:35:06 | 显示全部楼层
回复【12楼】abutter
-----------------------------------------------------------------------
编译用的是:  4.109。。       您说的是,有可能是内部格式化错误了,我去用串口试试。。

出0入12汤圆

 楼主| 发表于 2010-10-16 08:02:44 | 显示全部楼层
回复【13楼】wangjiati  =_=
-----------------------------------------------------------------------

不会这么倒霉吧?

反正串口试验一下就知道了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 07:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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