单片机C51,C语言的一个指针问题

作者&投稿:卷郭 (若有异议请与网页底部的电邮联系)
51单片机C语言指针语法的问题~

uchar *table[5]; table= {&HH,&HL,&MinH,&MinL,&SH,&SL};
table只有5个元素 你赋值了6个变量进去

#include
int a[ ]={0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xcf,0xc0};
int *pa;
sbit p25=P2^5;
sbit p26=P2^6;
sbit p27=P2^7;
int time1,time2;
uint i; //添加个循环控制变量
void main()
{
P1=0xfe;
p25=0,p26=0,p27=0;
while(1)
{
pa=&a[0]; //指针指向数组首地址

//for(pa=9;pa>0;pa--) //这里就有问题了,指针值=9,
//那就相当于硬件地址为9的存储单元的内容
for(i=9;i>=0;i--) //多定义一个循环变量就可以解决
{
//P0=*pa; //这样的取值需要修改下
P0=*(pa+i); //数组逆序读出

for(time1=9801;time1>0;time1--)
{
time2=8;
while(time2--);
}
}
}
}

P0 = *((uint8 data*)&ledBuff+i);
ledBuff是缓冲区的起始位置,它的类型你可以从函数外面看到,因为它是一个全局变量。
&ledBuff是取ledBuff的地址,
(uint8 data*)&ledBuff是把取得的地址强制转换为uint8 data类型的指针。
((uint8 data*)&ledBuff+i是将这个指针位移,偏移量是i
*((uint8 data*)&ledBuff+i)最后加*号是将便宜后的地址中的值取出来,最终赋值给了P0.
这里P0是一个端口。

&ledBuff是缓冲区起始地址,

i是偏移量,
uint8 data*强制转换成字节型数据指针,
*((uint8 data*)&ledBuff+i)是缓冲区中的数据,

综上就是把缓冲区ledBuff中的数据从第一个开始读,每次中断读一个字节,直到读完整个缓冲区,之后再从第一个数据开始读,如此循环。

c51单片机c语言交通灯的程序
答:sbit k5=P3^1;sbit Yellow_nb=P2^5; //南北黄灯标志 sbit Yellow_dx=P2^2; //东西黄灯标志 sbit Green_nb=P2^4;sbit Green_dx=P2^1;sbit Buzz=P3^7;bit Buzzer_Indicate;bit time=0;//灯状态循环标志 bit set=1;//调时方向切换键标志 uchar code table[11]={ //...

以51单片机为基体 用C语言设计一个计数器 要求显示数据8位 有复位功 ...
答:void dis_cnter(void) 显示计数器值子程序开始 {uchar i; 定义字符型局部变量i P3_7=1;P3_6=1; 消隐有效,允许显示 for(i=0;i8;i++) 循环8次 {SBUF=SEG7[cnt];while(!TI);TI=0;} 根据8个单元的计数值查表发送显示 P3_7=0; 关闭消隐,正常显示 } 显示计数器值子程序结束 void ...

51单片机,c语言写程序,什么数学运算都可以吗?加减乘除,对数,指数,三...
答:KEIL C51 有个数学函数库(和C语言的 数学函数库类似)指数,三角函数,平方,开方,立方都有的。具体可以看 相关的资料。数学函数库 需要看头文件MATH.H 例如:1.指数函数 float exp(float x)2.对数函数 float log(float x) ,float log10(float x)3.平方根:float sqrt(float x)3.三角函数...

C51单片机怎么用C语言实现数值的开方和平方运算?
答:C51是基于标准的C语言扩展而来的,所以,标准C语言能做的东西,C51也可以。平方运算,自不必说,就是两个数相乘:例如:float a,b,c; c = a*b;开方,则需要用到库函数:标准c语言里用的是 sqrt()函数,这个函数包含在math.h文件中。所以:include <math.h> c = sqrt(a);就可以了 ...

求单片机(c51)外部中断实验的c语言代码或者思路,要求在补充
答:include<reg51.h>#define uchar unsigned charvoid delay(void){uchar i,j;for(i=0;i<200;i++)for(j=0;j<120;j++);}void ext0() interrupt 0{uchar i;for(i=0;i<8;i++) { P2=0x00; delay(); P2=0xff; delay(); }}main(){uchar i;EX0=1;IT0=1;EA...

用单片机c51,c语言编00-99计数器程序!谢谢!!
答:unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char Count;void delay10ms(void){ unsigned char i,j;for(i=20;i>0;i--)for(j=248;j>0;j--);} void main(void){ Count=0;P0=table[Count/10];P2=table[Count%10];while(1){...

用c51单片机控制一个闪光灯循环闪光5次以后熄灭不再闪光,用C语言编程...
答:用C语言编程,求程序的方法:#include//包含单片机寄存器的头文件 /***函数功能:延迟一段时间 ***/ Voiddelay(Void)//Void表示没有返回值,也没有传递参数。{ Unsignedint我;定义一个最大值为65535的无符号整数。For (I = 0;我< 20000;i++) //执行20000个空循环。;//什么...

请高手用单片机C语言编写c51时钟程序,含有6个数显管,3个按键,要自己写...
答:sbit led_4=P2^3;sbit led_5=P2^4;sbit dp=P1^7;sbit an_mod=P2^5;sbit an_movright=P2^6;sbit an_up=P2^7;unsigned char code tab[]={0x90,0xd7,0xa2,0x86,0xc5,0x8c,0x88,0xd6,0x80,0x84};unsigned char num=0,hour=0,minute=0,secon=0,week=1;//20个num是一秒 ...

c51和mcs51有什么区别 开始学单片机 有的教程写着c51有的是MCS51 到底...
答:C51 是MCS-51系列单片机, 是一种低端的8位CPU,51的内核。MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减...

51单片机一个开关控制一盏灯的c程序是什么?
答:一个简单的开关控制一盏灯的c程序如下:include<reg52.h>sbit S1=P1^4; //将S1位定义为P1^4,检测独立按键sbit led0=P1^0; //将led0定义为P1.0口的LED/***