數碼管顯示HELLO
/*數碼管靜動態顯示,特別注意用C語言寫的左移函數,參考《深度解析C語言中的指針》*/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[]={0x76,0x79,0x38,0x38,0x3f};
void display(uchar table[]);
sbit dula=P2^6;
sbit wela=P2^7;
uint num0;
uchar temp;
void moveleft(uchar temp);
uchar x;
void delay(uint z)//z=100爲100ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--);
}
void main()
{
temp=0xfe;
num0=0;
while(1)
{
display(table);
}
}
void display(uchar table[])
{
P0=0xff;
wela=1;
P0=temp;
wela=0;
P0=0xff;
dula=1;
P0=table[num0];
dula=0;
delay(1);
num0++;
moveleft(temp);//注意這個地方的函數的調用
if(num0==5)
{
num0=0;
temp=0xfe;
}
}
void moveleft(uchar temp)//c語言寫的循環左移,形參改變不了實參
{
if(temp&0x80)
{
temp<<=1;
temp|=0x01;
}
else
{
temp<<=1;
}
單步調試發現是void moveleft(uchar temp),temp根本就沒左移,形參改變不了實參,想用的引用,發現c語言中不能用,是C++的特權。
找到
#include "iostream.h"
void ChangeValue(int* p)//int*與*是兩個不同的概念
{
*p=4;//
}
int main()
{
int a;
a=2;
cout<<a<<endl;
ChangeValue(&a);
cout<<"after change a="<<a<<endl;
調試 用指針來修改
最後程序
/*用數碼管顯示HELL0,選用《L:\流動區\FFDZ-51\工具軟件》裏面的《單片機使用工具.exe》
查詢字母的數碼字形生成*/
/*數碼管靜動態顯示,特別注意用C語言寫的左移函數,參考《深度解析C語言中的指針》*/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[]={0x76,0x79,0x38,0x38,0x3f};
void display(uchar table[]);
sbit dula=P2^6;
sbit wela=P2^7;
uint num0;
uchar temp;
void moveleft(uchar *temp);
uchar x;
void delay(uint z)//z=100爲100ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--);
}
void main()
{
temp=0xfe;
num0=0;
while(1)
{
display(table);
}
}
void display(uchar table[])
{
P0=0xff;
wela=1;
P0=temp;
wela=0;
P0=0xff;
dula=1;
P0=table[num0];
dula=0;
delay(1);
num0++;
moveleft(&temp);//注意這個地方的函數的調用
if(num0==5)
{
num0=0;
temp=0xfe;
}
}
void moveleft(uchar *temp)//c語言寫的循環左移,形參改變不了實參
{
if((*temp)&0x80)
{
(*temp)<<=1;
(*temp)|=0x01;
}
else
{
(*temp)<<=1;
}
}
/* c語言寫的循環左移解釋
#include "iostream.h"
void ChangeValue(int* p)//int*與*是兩個不同的概念
{
*p=4;//
}
int main()
{
int a;
a=2;
cout<<a<<endl;
ChangeValue(&a);
cout<<"after change a="<<a<<endl;
}
*/
小結:
1.形參修改實參的問題知道,也用過,不過真正動起手來,就出問題了,動手
2.c語言與c++的區別,以後要注意了
3.開始對int *p=& temp,&temp是取temp的地址,*p是地址的內容,爲什麼中間是等號不太理解。後來發現(int*)p是用int*來定義p這個地址*表示p爲指針變量int表示這個指針變量是一整形,p代表地址與&temp的地址之間的關係,也對int *與*的概念有了一定了解
最後希望在csdn上多認識一些朋友,技術上的非技術上的。