|
LM35D接PIC16F877A (LCD ADC)
[复制链接]
|
|
发表于 5-5-2008 12:56 AM
|
显示全部楼层
原帖由 半夜鬼 于 4-5-2008 06:53 PM 发表
明白,谢谢fritlizt 大大。。
不过我是用 C 来写,不知道单单一个单纯的
while(1); //
while (1); 是一个infinite loop.永远loop 不完的。只是单纯的goto 自己的address.
for (i=0; i<10; i++) 这个你就要看asm/list file.算有几个instruction, 再算execution time.
你的program有critical到要算for loop的execution time吗?
[ 本帖最后由 fritlizt 于 5-5-2008 12:58 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 6-5-2008 01:14 PM
|
显示全部楼层
原帖由 fritlizt 于 5-5-2008 12:56 AM 发表
while (1); 是一个infinite loop.永远loop 不完的。只是单纯的goto 自己的address.
for (i=0; i<10; i++) 这个你就要看asm/list file.算有几个instruction, 再算execution time.
你的program有critical到要算for loop的execution time吗?
while loop 我明白,只是打个比方。。因为在转换去 assembly 里跑一个 while loop 循环也是有时间的
看了asm/list file, 算有几个instruction之后,我知道 execution time 了。。 谢谢fritlizt 大大
因为有些简单的 delay(不需要太准的) 不想用 timer,就用 for loop 来 run loh, 因为常用到,就自己仔细算一个咯 |
|
|
|
|
|
|
|
发表于 6-5-2008 03:23 PM
|
显示全部楼层
原帖由 半夜鬼 于 6-5-2008 01:14 PM 发表
while loop 我明白,只是打个比方。。因为在转换去 assembly 里跑一个 while loop 循环也是有时间的
看了asm/list file, 算有几个instruction之后,我知道 execution time 了。。 谢谢fritlizt 大大
因为有些简单的 delay(不需要太准的) 不想用 timer,就用 for loop 来 run loh, 因为常用到,就自己仔细算一个咯.
最好不要。。。如你这样做, 你还不如去写ASM 好了。。。要不你写的C只有你会看,没意义了。。。 |
|
|
|
|
|
|
|
发表于 7-5-2008 08:54 AM
|
显示全部楼层
原帖由 pic 于 6-5-2008 03:23 PM 发表
最好不要。。。如你这样做, 你还不如去写ASM 好了。。。要不你写的C只有你会看,没意义了。。。
实在是无法完全看懂 arm instruction 和 32bit assembly language leh... 暂时写给自己看的。。testing 完先... |
|
|
|
|
|
|
|
发表于 9-5-2008 10:13 PM
|
显示全部楼层
yes... 终于成功简单 display 出来了,谢谢这里的网友有讨论关于 LCD display...
在玩转和 detail 收悉应用之后,在改一下,分享经验,分享如何应用 |
|
|
|
|
|
|
|
发表于 9-5-2008 11:41 PM
|
显示全部楼层
原帖由 半夜鬼 于 9-5-2008 10:13 PM 发表
yes... 终于成功简单 display 出来了,谢谢这里的网友有讨论关于 LCD display...
在玩转和 detail 收悉应用之后,在改一下,分享经验,分享如何应用
用什么mcu和langauge?
期待着你的分享. |
|
|
|
|
|
|
|
发表于 13-5-2008 10:00 AM
|
显示全部楼层
aiyah... 不是很会画 schematic... 放 code 上来,要用普通 LCD display 的可以看看。。
我用的是 NXP (Philips) 的 LPC2103, 用 C language
可以的话。。帮我写一个 method,可以很方便的丢一个 byte 到 function就可以 send data... 就好像
void send (unsigned char chr) /* chr = 0xaa, 酱我就不用分 msb 和 lsb 送两次,很麻烦下。。*/
{
}
对了,因为 pin 脚不够,我用 74HC273 来 latch LCD 的 data, LCDCS = 74HC273 clock trigger
/****************************************************************************************/
#include <LPC2103.H>
#define LCDCS 1<<2
#define LED_ON 1<<31 // backlight
#define LCD_E 1<<28 // clock
#define LCD_RS 1<<30
#define LCD_RW 1<<29
#define LD4 1<<24
#define LD5 1<<25
#define LD6 1<<26
#define LD7 1<<27
void Timer0_Init (void)
{
T0TC = 0;
T0PR = 0;
T0MCR = 3;
}
void Timer0_Enable (unsigned int dly)
{
T0MR0 = dly;
T0TCR = 1;
while ( (T0IR&0x01) == 0) ;
T0IR = 0x01;
T0TCR = 0;
}
/*
void Delay (unsigned int dly) //134 nano second, but i count as 135 nano second, easy remember
{
unsigned int i;
for (i=0; i<dly; i++) ;
}
*/
void LCD_Enable (void)
{
IOSET |= LCD_E;
IOSET |= LCD_E;
IOSET |= LCDCS; // 273 refresh
Timer0_Enable(119); // Delay 2 micro secs
IOCLR |= LCDCS;
IOCLR |= LCD_E;
IOSET |= LCDCS; // 273 refresh
}
void LCD_Send (unsigned char data)
{
unsigned char temp;
temp = data;
IOCLR |= LD4 | LD5 | LD6 | LD7 | LCDCS;
switch (temp)
{
case 0x00:
IOCLR |= LD4 | LD5 | LD6 | LD7;
LCD_Enable();
break;
case 0x01:
IOSET |= LD4;
LCD_Enable();
break;
case 0x02:
IOSET |= LD5;
LCD_Enable();
break;
case 0x03:
IOSET |= LD4 | LD5;
LCD_Enable();
break;
case 0x04:
IOSET |= LD6;
LCD_Enable();
break;
case 0x05:
IOSET |= LD4 | LD6;
LCD_Enable();
break;
case 0x06:
IOSET |= LD5 | LD6;
LCD_Enable();
break;
case 0x07:
IOSET |= LD4 | LD5 | LD6;
LCD_Enable();
break;
case 0x08:
IOSET |= LD7;
LCD_Enable();
break;
case 0x09:
IOSET |= LD4 | LD7;
LCD_Enable();
break;
case 0x0A:
IOSET |= LD5 | LD7;
LCD_Enable();
break;
case 0x0B:
IOSET |= LD4 | LD5 | LD7;
LCD_Enable();
break;
case 0x0C: //12
IOSET |= LD6 | LD7;
LCD_Enable();
break;
case 0x0D: //13
IOSET |= LD4 | LD5 | LD7;
LCD_Enable();
break;
case 0x0E: //14
IOSET |= LD5 | LD6 | LD7;
LCD_Enable();
break;
case 0x0F: //16
IOSET |= LD4 | LD5 | LD6 | LD7;
LCD_Enable();
break;
default:
break;
}
}
void LCD_Init (void)
{
// IODIR |= LCDCS | LED_ON | LCD_E | LCD_RS |LCD_RW | LD4 | LD5 | LD6 | LD7;
// IOCLR |= LCDCS | LED_ON | LCD_E | LCD_RS |LCD_RW | LD4 | LD5 | LD6 | LD7;
IODIR |= LCDCS | LCD_E | LCD_RS |LCD_RW | LD4 | LD5 | LD6 | LD7;
IOCLR |= LCDCS | LCD_E | LCD_RS |LCD_RW | LD4 | LD5 | LD6 | LD7;
Timer0_Enable (1199999); // Delay 20 mili secs
LCD_Send (0x03); /*****************************************/
Timer0_Enable (299999); // Delay 5 mili secs
LCD_Send (0x03);
Timer0_Enable (11999); // Delay 200 micro secs
LCD_Send (0x03);
Timer0_Enable (2399); // Delay 40 micro secs
LCD_Send (0x02);
Timer0_Enable (2399); // Delay 40 micro secs
LCD_Send (0x02);
LCD_Send (0x08);
Timer0_Enable (2399); // Delay 40 micro secs
LCD_Send (0x00);
LCD_Send (0x08);
Timer0_Enable (2399); // Delay 40 micro secs
LCD_Send (0x00);
LCD_Send (0x01);
Timer0_Enable (119999); // Delay 2 mili secs
LCD_Send (0x00);
LCD_Send (0x06);
Timer0_Enable (2399); // Delay 40 micro secs
LCD_Send (0x00);
LCD_Send (0x0f);
Timer0_Enable (2399); // Delay 40 micro secs
}
void LCD_Write (void)
{
IOCLR |= LCDCS | LCD_E | LCD_RS |LCD_RW | LD4 | LD5 | LD6 | LD7;
IOSET |= LCD_RS;
IOSET |= LCDCS;
LCD_Send (0x03);
LCD_Send (0x01);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x02);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x03);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x04);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x05);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x06);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x07);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x08);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x09);
Timer0_Enable (2999); // Delay 50 micro secs
LCD_Send (0x03);
LCD_Send (0x00);
Timer0_Enable (2999); // Delay 50 micro secs
}
int main (void)
{
Timer0_Init();
LCD_Init();
LCD_Write();
} |
|
|
|
|
|
|
|
发表于 13-5-2008 03:52 PM
|
显示全部楼层
原帖由 半夜鬼 于 13-5-2008 10:00 AM 发表
aiyah... 不是很会画 schematic... 放 code 上来,要用普通 LCD display 的可以看看。。
我用的是 NXP (Philips) 的 LPC2103, 用 C language
可以的话。。帮我写一个 method,可以很方便的丢一个 byte 到 functi ...
你用developement board 吗??
还是自己fabricate?
如果是developement board你买多少钱? |
|
|
|
|
|
|
|
发表于 13-5-2008 09:43 PM
|
显示全部楼层
原帖由 fritlizt 于 13-5-2008 03:52 PM 发表
你用developement board 吗??
还是自己fabricate?
如果是developement board你买多少钱?
我是那已经洗好了的板,看着他的 schematic,要 test 什么 function 就焊什么 component 上起
,then 再写 function loh...
在这边还要非常感谢一个大大,帮我把我的 cpu 焊上去。。不然我焊上去的都不能用。。不是很会焊四边脚的 cpu..
还有谢谢他帮我找 LCD detail 的 datasheet!! |
|
|
|
|
|
|
|
发表于 20-5-2008 03:16 AM
|
显示全部楼层
原帖由 半夜鬼 于 13-5-2008 09:43 PM 发表
我是那已经洗好了的板,看着他的 schematic,要 test 什么 function 就焊什么 component 上起
,then 再写 function loh...
在这边还要非常感谢一个大大,帮我把我的 cpu 焊上去。。不然我焊上去的都不能用。 ...
我也写了一个lcd interfacing program.用c. 给lpc210x的.还不是这样optimize.我用bit masking.一个一个bit mask去相关的I/O.
解决了你那个要send两次msb和lsb的问题。还可以send string.
可以开一个arm讨论区。。。。。在谈下去就离题了。。。
忘了说我用的是keil mdk arm compiler.- int main (void)
- {
- system_init ();
- lcd_4bit_init ();
- lcd_4bit_output (1,"cari.com");
- lcd_4bit_output (2,"fritlizt");
- return 0;
- }
复制代码
[ 本帖最后由 fritlizt 于 20-5-2008 03:29 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 22-5-2008 10:56 PM
|
显示全部楼层
原帖由 fritlizt 于 20-5-2008 03:16 AM 发表
我也写了一个lcd interfacing program.用c. 给lpc210x的.还不是这样optimize.我用bit masking.一个一个bit mask去相关的I/O.
解决了你那个要send两次msb和lsb的问题。还可以send string.
可以开一个arm讨论区。 ...
万分感谢 fritlizt 大大,这个 LCD 的程式我写完之后,就没有动了。。
工作了近两个礼拜,今天我终于抽出时间来 test 4X4 keypad。。
想了一天,写出来了~~
等下开个主题把 program 放上来,可以的话你帮我画 schematic。。
还是要万分感谢 fritlizt 大大!!抽空帮我写了方便的 function!!
对了你是怎样 test 的呢? 用 proteus? 还是自己 fabricated,像我这样?
我也想学 proteus.. 但是 懒惰 study... 有没有快速的上手的方法?教程之类? |
|
|
|
|
|
|
|
发表于 22-5-2008 11:14 PM
|
显示全部楼层
原帖由 半夜鬼 于 22-5-2008 10:56 PM 发表
万分感谢 fritlizt 大大,这个 LCD 的程式我写完之后,就没有动了。。
工作了近两个礼拜,今天我终于抽出时间来 test 4X4 keypad。。
想了一天,写出来了~~
等下开个主题把 program 放上来,可以的话你帮我画 ...
我用proteus 仿真。 hardware 订了。 还没到。 circuit也还没design.只是program写了。哈
基本上proteus还算容易上手。 用几天就会了。 自己试试看吧。 我也是自己慢慢摸索的。 不会就问pic 大大。
shcematics为什么不用电脑画呢? |
|
|
|
|
|
|
|
发表于 22-5-2008 11:46 PM
|
显示全部楼层
原帖由 fritlizt 于 22-5-2008 11:14 PM 发表
我用proteus 仿真。 hardware 订了。 还没到。 circuit也还没design.只是program写了。哈
基本上proteus还算容易上手。 用几天就会了。 自己试试看吧。 我也是自己慢慢摸索的。 不会就问pic 大大。
shcemati ...
我这边有一片 Z2103(LPC2103) 的 evaluation board,还有多余的一个debugger 你是住 JB 的吗?
如果你有需要的话可以接你先~~
还有要开设一个 arm 的讨论区吗? |
|
|
|
|
|
|
|
发表于 22-5-2008 11:49 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 23-5-2008 11:15 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 29-11-2009 02:26 PM
|
显示全部楼层
1。看了 这个电路 http://www.kmitl.ac.th/~kswichit/thermo/digithermo.htm
有用 CA3162 A/D Converters for 3-Digit Display
请问是不是一定要用这个 不能直接 用MCU convert??
我参考了有些电路 他们没有用 AD converters 直接 LM35 > PIN_AN0
我 COPY 了大大的 code
build all 时 有error 请问这是什么 error?
void lcd_init()
{
byte i;
set_tris_d(0);
lcd.rs = 0;
lcd.rw = 0;
lcd.enable = 0;
delay_ms(15);
for(i=1;i<=3;++i) {
lcd_send_nibble(3);
delay_ms(5);
}
lcd_send_nibble(2);
for(i=0;i<=3;++i)
{
lcd_send_byte(0,LCD_INIT_STRING); <<<
}
}
Attempt to create a pointer to a constant
我的头很大!! PIC 好难理解 ! |
|
|
|
|
|
|
| |
本周最热论坛帖子
|