请教c51单片机,c语言编程,关于指示灯定时闪烁的
//LED1接P2.0,LED2接P2.1,低电平点亮
#include
void _delay_ms(unsigned int c) //误差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
void main(void)
{
while(1)
{
P2|=(1<<0)&(1<<1);
_delay_ms(300);//300MS
P2|=~((1<<0)&(1<<1));
_delay_ms(300);//300MS
}
}
LI1感应到时这个条件会不会一直为真num一直清零。if(LI1==0&&AA==0){delayms(10);if(LI1==0&&AA==0){
用定时中断控制闪烁。
时间间隔则由主程序,根据按键次数来变更。
程序可见:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/d92cc98651bfef3bc75cc387.html
仿真实验截图如下:
这个是串行通信用的时钟,就是SPI通信。这个引脚是接单片机的I/O的。
你既然知道CLK=0,哪你应该是有样例程序的。仔细看看程序。它在一个时间段内是CLK = 0;还有的时候是CLK = 1的。这是因为51单片机并没有SPI通信模块,所以要用普通的IO口接这个CLK段做模拟SPI通信。
好好看看程序。当CLK置零的时候程序下面有一定的操作,而当CLK为1的时候,又有其他的操作。
这样说你是不太明白的,好好看看SPI串行通信的协议把。
另外,就算接外部时钟,CLK = 0也不会关闭,因为外部时钟单片机是无法控制的。
补充,就是CLK在程序中不断给0再给1得到的。你仔细看一下程序,就可以看出他的时序来了。做单片机通信,时序最重要。
用定时器最好了;
在while(1){P2.0按下的次数}
定期那{switch(P2.0按下的次数)
定时输出高低电平就可以了;
}
定时器赋初值是放在中断最前面...
这样输出的误差最小......
那闪烁则跟高低电平一样就可以了...
#include<reg51.h>
#define uint unsigned int
sbit d1=P0^0; //位声明
sbit d2=P0^1;
sbit d3=P0^2;
sbit d4=P0^3;
uint temp,num=0;
uint a;
//void chushihua();
void delay(uint z); //延时子函数
void main()
{
//chushihua();
while(1)
{
P1=0xef; //向P1口赋值
temp=P1; //读P1口的数
temp=temp&0x0f;
if(temp!=0x0f)
delay(100);
if(temp!=0x0f) //判断是否有键按下
{
num++;
if(num==5)
num=1;
if(temp==0xef)
delay(100);
if(temp==0xef) //判断按键是否松开
break;
}
if(num==1)
{
d4=1;
d2=1;
d3=1;
d1=~d1;
delay(50);
}
if(num==2)
{
d1=1;
d3=1;
d4=1;
d2=~d2;
delay(100);
}
if(num==3)
{
d1=1;
d2=1;
d4=1;
d3=~d3;
delay(150);
}
if(num==4)
{
d1=1;
d2=1;
d3=1;
d4=~d4;
delay(300);
}
}
}
/*void chushihua()
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
}*/
/*void init0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
a++;
}*/
void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
用一寄存器来计算按健次数,用四个独立子程序分别对四个位进行设置,程序相当简单。
用C语言对单片机编程如何定义C51单片机
sbit P00=P0^0;sbit P01=P0^1;……\/\/数字是我臆造的,不同的CPU值是不同的.这样子的定义可以让你只需要知道怎么用端口,而不需要去知道端口位置.所以当你知道端口位置时,不用包含头文件,自己写这些宏定义,也能达到同样的效果。你说的ATx51是不是指atmel的系列单片机??是的话,用reg51就可以...
keil c51与C语言的区别,以及在单片机编程中C与汇编的优缺点~~~麻烦了...
"keil c51与C语言的区别"这句话表达的有问题,keil只是一种编译软件,C语言是一种机器语言,两者没可比性。至于说汇编和C语言的优缺点很明显,汇编语言时间比较精准(一条语句一般是1~2个时钟周期),但是工程化不强,如果想建立较为复杂的工程一般都采用C语言。现在对于单片机编程一般都是采用C语言。...
新概念51单片机C语言教程的作品目录
4.2十六进制1.5二进制的逻辑运算1.5.1与1.5.2或1.5.3非1.5.4同或1.5.5异或1.6单片机的C51基础知识介绍1.6.1利用C语言开发单片机的优点1.6.2C51中的基本数据类型1.6.3C51数据类型扩充定义1.6.4C51中常用的头文件1.6.5C51中的运算符1.6.6C51中的基础语句1.6.7学习单片机应该...
C51单片机怎么用C语言实现数值的开方和平方运算?
C51是基于标准的C语言扩展而来的,所以,标准C语言能做的东西,C51也可以。平方运算,自不必说,就是两个数相乘:例如:float a,b,c; c = a*b;开方,则需要用到库函数:标准c语言里用的是 sqrt()函数,这个函数包含在math.h文件中。所以:include <math.h> c = sqrt(a);就可以了 ...
51单片机该怎么学?
还有一点要声明的是单片机里用到的 C 语言其实很有限,课堂上学习 C++ 的很大一部分内容在初期单片机编程中都用不到,因此没必要因为觉的自己的 C 语言基础不是很好而对单片机望而止步! 学习的工具 软件方面方面, 51 单片机用的是 KEIL 软件,这个软件在学校图书馆软件下载和其他网站上都有,具体用法自己查找相关...
求大神在keil上帮写51单片机C语言程序
\/\/第一个实验:\/\/假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 ... D18连接P0.7\/\/假设K1按键在P2.3引脚#include<reg51.h>#include<intrins.h>sbit k1=P2^3;\/\/假设K1按键在P2.3引脚void main(){P0=0xfe;while(1){if(k1==0){while(k1==0);P0=_crol_(P0,1);}}}...
C语言与单片机C语言的区别是什么?
C51本质就是C,是为在单片机上使用C而出来的,如果C不牢固,还是多掌握一点C再学C51,不过新增的知识也不少,而且基本上跟C无关。其实c51要比纯c简单很多,基本上就是for,while,switch等等。写单片机代码,基本上就是按照那些芯片的时序来操作它,语法和算法上要求不高,对c的基础要求也不是很高。
单片机c51求大神写一个C语言程序!挺急的
include<reg51.h>#include<intrins.h>void delay(int a){unsigned char i;while(a--)for(i=0;i<120;i++);}void ext0() interrupt 0{P1=0xff;delay(5000);}main(){unsigned char led=0xfe;EX0=1;IT0=1;EA=1;while(1) { P1=led; led=_crol_(led,1); delay(...
c51单片机要学成什么样才能算学好了,并且可以接触其他单片机
可以这么讲,真正有自知之明的人,即使做了一辈子51单片机设计,也不会说自己51单片机学好了。原因在于,搞51单片机开发,不是能使用开发板编程、能画单片机最小系统电路图、能做PCB、甚至能搞什么飞控、机器人就算学好了。这好比武术,真正的大师强调的的是内功,而不是拍几个花架子。以我的经验,搞...
单片机C51编程(C语言):用数码管实现学号的显示。我们学号是从704193101...
是否要输入?还是直接显示?是用串口输入?还是键盘输入?补充问题,我看到补充后会给与解答.动态显示后三位,前六位因数值固定,用数码管直接显示,不于单片机连接。数码管用共阳。main函数部分根据自己情况自行编制 以下为显示部分 uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x...
丁光富马: 1、单片机c语言编程是基于C语言的单片机编程.2、单片机的C语言采用C51编译器(简称C51).3、由C51产生的目标代码短,运行速度高,存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用.
调兵山市19692694114: 用C语言对单片机编程如何定义C51单片机 - ?
丁光富马: 这个不是定义,而是头文件包含.头文件里大部分是类似下面的一起端口定义.#define P0 *(unsigned char *)0x801a sbit P00=P0^0; sbit P01=P0^1; ……//数字是我臆造的,不同的CPU值是不同的.这样子的定义可以让你只需要知道怎么用端口,而不需要去知道端口位置.所以当你知道端口位置时,不用包含头文件,自己写这些宏定义,也能达到同样的效果.你说的ATx51是不是指atmel的系列单片机??是的话,用reg51就可以了,一样的.
调兵山市19692694114: C51单片机怎么用C语言实现数值的开方和平方运算? - ?
丁光富马: C51是基于标准的C语言扩展而来的,所以,标准C语言能做的东西,C51也可以. 平方运算,自不必说,就是两个数相乘: 例如:float a,b,c; c = a*b; 开方,则需要用到库函数: 标准c语言里用的是 sqrt()函数,这个函数包含在math.h文件中. 所以: #include <math.h> c = sqrt(a); 就可以了
调兵山市19692694114: C51单片机C语言编程的问题 - ?
丁光富马: 问题出现编译器把计算后的值直接送到P1了,a值没有更新 你程序的还有个问题在于更新P1口后需要延时至少0.5秒,否则你是不可能看到LED有闪烁的修改办法,2种 1把a声明成全局变量 2把while全改成for
调兵山市19692694114: c51单片机可以运行c语言程序??
丁光富马: 严格的说法,C51可以用C语言来编程1般C语言是不能直接运行的,它必须编译成目标代码才能运行你可以用C写C51的程序,然后通过编译器生成目标代码后上传到单片机.就能够运行了
调兵山市19692694114: 急急急急求,单片机C51的C语言程序 - ?
丁光富马: ;***************************;; DAC0832 ;;***************************; ORG 0000H START: MOV DPTR,#7FFFH MOV A,#00H MOVX @DPTR,A LCALL DELAY MOV A,#0FEH MOVX @DPTR,A LCALL DELAY SJMP LOOP DELAY: MOV R6,#00H DELAY2: MOV R5,#00H DELAY1: DJNZ R5,DELAY1 DJNZ R6,DELAY2 RET END
调兵山市19692694114: 51单片机c语言是什么意思? - ?
丁光富马: C 语言, 是计算机编程语言. 适合于入门者学习、使用. 51 单片机,是一种微型计算机. 用 C 语言,对其编程,就是“51单片机c语言”.
调兵山市19692694114: 请问单片机C语言编程与单片机C51编程的区别是什么? - ?
丁光富马: 51是单片机的一种.基于不同内核(CPU)的单片机,其指令系统不同,所以编译器不同.C51将C编译成51汇编,而单片机C语言应该通指,不过国内常把51与单片机等同起来.
调兵山市19692694114: 请教C51单片机,C语言编程,怎样把一个四位数存入(读取)外部数据存储器?请举例说明. - ?
丁光富马: //外部绝对地址定义,具体地址根据你所需存在哪个地址单元而定#define uchar unsigned char#define uint unsigned int uchar xdata XRAM _at_ 0xFF00[4];//指定外部存储地址 uchar DATA1[4]; //你先把你的四位数每位单独分离出来存到这个4成员数组 void main(void) { uchar i; for(i=0;i<4;i++) { XRAM[i]=DATA1[i] } }
调兵山市19692694114: 用c++怎么编写51单片机程序,可以这么样编写吗???? - ?
丁光富马: 相信很多初学者都有同样的疑问,也有同样的希望.就是用C++语言来写单片机程序的源代码.现在我来解释一下单片机的源代码程序几乎没有人用C++来写的. 1. 假设一下你现在用C++写完了一个程序代码.那么你要让单片机认识必须要编译...