2024年8月20日 星期二
雙重指標
#include <stdio.h>
#include <stdlib.h>
unsigned int x = 10;
unsigned int *ptr = &x;
unsigned int **pptr = &ptr;
const char *p[4] = {"PIC16", "PIC18", "PIC24", "DSPIC"};
const char **pp = &p[0]; // const char **pp = p;
void string_access(const char **str_ptr)
{
unsigned char i = 0;
unsigned char ch;
do
{
ch = *(*str_ptr+i);
printf("%c",ch);
i++;
}
while(ch != '\0');
printf("\n");
}
int main(void)
{
printf("x value = %d\n", x);
printf("x address = %p\n", &x);
printf("ptr address = %p\n", &ptr);
printf("ptr point to = %p\n", ptr);
printf("ptr point value = %d\n", *ptr);
printf("pptr address = %p\n", &pptr);
printf("pptr point to %p\n", pptr);
printf("*pptr point to %p\n", *pptr);
printf("pptr point value = %d\n", **pptr);
printf("---------------------------\n");
string_access(&*pp);
pp++;
string_access(&*pp);
pp++;
string_access(&*pp);
pp++;
string_access(&*pp);
system("pause");
return 0;
}
2024年8月19日 星期一
使用C語言存取二維陣列,並計算陣列ROW與COLUMN的數量
#include <stdio.h>
#include <stdlib.h>
int array[4][5] = {
{'p', 'i', 'c', '1', '6'},
{'p', 'i', 'c', '1', '8'},
{'p', 'i', 'c', '2', '4'},
{'d', 's', 'p', 'i', 'c'}
};
int len;
int rows, column;
int *begin = array; // get the begin address of array
int *end = *(&array + 1); // get the address after array last address
int x, y;
int main(void)
{
len = end - begin; // calculate total len
rows = *(&array+1)-array; // get the total values of row
column = *(&array[0]+1) - array[0]; // get the total values of column
printf("begin = %p\n", begin);
printf("end = %p\n", end);
printf("len = %d\n", len);
printf("rows = %d\n", rows);
printf("column = %d\n", column);
for(y = 0; y < rows; y++)
{
for(x = 0; x < column; x++)
{
printf("array[%d][%d] = %c\n", y, x, array[y][x]);
}
printf("\n");
}
system("pause");
return 0;
}
2024年8月17日 星期六
C語言存取二維字元陣列的方法
#include <stdio.h>
#include <stdlib.h>
#define ROW 4
#define LEN 5
char array[ROW][LEN] = {
{'P', 'I', 'C', '1', '6'},
{'P', 'I', 'C', '1', '8'},
{'P', 'I', 'C', '2', '4'},
{'D', 'S', 'P', 'I', 'C'}
};
char *ptr = &array;
unsigned char row, column;
int main(void)
{
printf("access using array method\n");
for(row = 0; row < 4; row++)
{
for(column = 0; column < 5; column++)
{
printf("%c", array[row][column]);
}
printf("\n");
}
printf("----------------------------------\n");
printf("access using array method\n");
for(row = 0; row < ROW; row++)
{
for(column = 0; column < LEN; column++)
{
printf("%c", *ptr++);
}
printf("\n");
}
printf("access using array + pointer method\n");
for(row = 0; row < 4; row++)
{
for(column = 0; column < 5; column++)
{
printf("%c", *(array[row] + column));
}
printf("\n");
}
printf("----------------------------------\n");
printf("access using pointer method\n");
for(row = 0; row < 4; row++)
{
for(column = 0; column < 5; column++)
{
printf("%c", *(*(array+row)+column));
}
printf("\n");
}
printf("----------------------------------\n");
printf("access using ptr point to array method\n");
for(row = 0; row < 4; row++)
{
for(column = 0; column < 5; column++)
{
printf("%c", *(ptr + (row * 5) + column));
}
printf("\n");
}
while(1)
{
}
system("pause");
return 0;
}
C語言存取二維字串陣列(使用陣列或指標)
#include <stdio.h>
#include <stdlib.h>
char str[4][6] = {
{"PIC16"},
{"PIC18"},
{"PIC24"},
{"DSPIC"}
};
unsigned char row, column;
int main(void)
{
printf("access string using array method\n");
for(row = 0; row < 4; row++)
{
column = 0;
while(str[row][column] != 0x00)
{
printf("%c",str[row][column]);
column++;
}
printf("\n");
}
printf("----------------------------------\n");
printf("access string using array + pointer method\n");
for(row = 0; row < 4; row++)
{
column = 0;
while((*(str[row]+column)) != 0x00)
{
printf("%c", *(str[row]+column));
column++;
}
printf("\n");
}
while(1)
{
}
system("pause");
return 0;
}
C語言存取字串指標陣列
#include <stdio.h>
#include <stdlib.h>
char *str[4] = {"PIC16", "PIC18", "PIC24", "DSPIC"};
unsigned char row = 0, column = 0;
#define NULL 0x00
int main(void)
{
printf("access string using pointer method\n");
for(row = 0; row < 4; row++)
{
column = 0;
while(*(*(str+row) + column) != NULL)
{
printf("%c", *(*(str+row) + column));
column++;
}
printf("\n");
}
printf("----------------------------------------\n");
printf("access string using array+pointer method\n");
for(row = 0; row < 4; row++)
{
column = 0;
while(*(str[row]+column) != NULL)
{
printf("%c",*(str[row]+column));
column++;
}
printf("\n");
}
while(1)
{
}
system("pause");
return 0;
}
-
按鍵反彈跳設計 按鍵開關在MCU的程式設計中初學者通常會遇到一個問題,就是按鍵彈跳現象,原因由於按鍵屬於機械結構,按下時會有機械彈跳的狀況出現,通常會讓判定按鍵的動作出現BUG,因此在程式當中或者硬體上須作處理才能消除彈跳的現象,下圖為量測按鍵按下時的彈跳現象,可以看出在10...
-
你想用熱敏電阻偵測溫度嗎?你想用微控制器做熱敏電阻的讀取並顯示溫度嗎? 由於Edison在出社會第一份從事電子的工作的公司就是專門生產體溫計的公司,既然了解其中一點東西,出社會這麼久了,也該分享一些東西讓有需要的人可以取得資訊的來源,加速學習過程,本篇文章幫大家介紹如何使用微控...
-
在使用ADC過程當中,解析度是一個用來表示ADC性能的指標,其計算方式可以透過如下方程式表示 : 1LSB = VREF / (2^n - 1), VREF為ADC的參考電壓, n為表示解析度的位元數,假設使用10-bits ADC, ADC參考電壓為5V, 可以計算1LSB =...