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);
}
}
}
//第二个实验:
//假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 。 D18连接P0.7
#include<reg51.h>
char led[]={0xfe,0xff,0xfd,0xff,0xfb,0xff,0xf7,0xff,0xef,0xff,0xdf,0xff,0xbf,0xff,0x7f,0xff};
void main()
{
char i=0;
char counter=0;
TMOD=0x01;//T0 工作方式1
TH0=(655356-50000)/256;//延时50ms
TL0=(655356-50000)%256;//延时50ms
TR0=1;//启动T0
while(1)
{
if(TF0==1)//查询
{
TH0=(655356-50000)/256;//重新延时50ms
TL0=(655356-50000)%256;//重新延时50ms
counter++;
if(counter==10)//延时0.5秒
{
counter=0;//重新开始新一轮0.5秒延时
i++;
if(i==16)
{
i=0;
}
P0=led[i];//点灯
}
}
}
}
2.51单片机用C语言编写#include<reg51.h>
sbit a = P1^2; //定义单片机对蜂鸣器的输出端口
sbit key = P3^2; //定义单片机对按键的端口 S19
void delay_short() //短延时函数 大约100us 用于设置蜂鸣器的频率
{
unsigned int i;
for(i=0;i<100;i++);
}
void delay_long() //长延时函数 大约20ms 用于按键的软件消抖和2次声响之间的间隔
{
unsigned int j;
for(j=0;j<20000;j++);
}
void work(unsigned time) //蜂鸣器使能函数,参数为需要发声的时间 参数越大响的时间越长 不能超过65535
{
unsigned int m = time;
unsigned int n = 0;
while(m)
{
a = ~a;
delay_short();
m--;
}
for(n=0;n<30;n++) //大约延时 1S左右
{
delay_long();
}
}
void main()
{
while(1)
{
if(key == 0) //软件消抖
{
delay_long();
if(key == 0)
{
work(2000);
work(2000);
work(2000);
work(500);
work(500);
work(500);
work(500);
work(500);
}
}
}
}
上面是实现要求的所有源程序,另外纠延时控制的是发声的频率,并不是发声的时间长短,发声的时间长短可以通过循环来实现,具体见源程序。另外单片机的I/O口的负载能力是不足以驱动蜂鸣器的,需要借助放大芯片,我用的是ULN20003 下面附上我的硬件连接图
图片不是很清楚 估计是SOSO的问题 然后就是把IN和单片机的P1^2口连起来就可以
有上面问题可以联系我 363396124 加的时候请说明来意
3.51单片机的优先级怎么用C语言怎么写正常情况下,优先顺序为:
外部中断0
定时器0
外部中断1
定时器1
串口
定时器2
IP中的位控制中断优先级,分别为:
PX0:外部中断0
PT0:定时器0
PX1:外部中断1
PT1:定时器1
PS:串口
PT2:定时器2
当其为1时,该位对应的中断将设为高优先级。
中断响应是:同级中断比如IP各位都为0 或都为1时,同时到达时优先按如上顺序响应中断,当一个中断在执行时,其他中断只能排队等候。
当其中一位为1比如PS=1时,那么无论为0的任何中断在执行中都将被打断,优先响应高级中断。
因此,要保证需要的中断享有至高权限,将相应的控制位设为1就可以了,比如串口优先保证那么初始化时加入:
PS=1;就OK。
4.求写一个单片机(AT89C51)C语言程序用C啊,我想想:
1、和硬件有点儿关系,这个你清楚么?
2、假设LED连接到P1口吧。第一个灯接到P1.0。阴极接IO,阳极接5V。
#include <reg51.h>
bit SecFlag;
unsigned char mS;
void Display(unsigned char num,unsigned char sec)
{
num%=8;
P1=~(1<<num);
while(sec--!=0)
{
TR0=1;
while(SecFlag==0);SecFlag=0;
TR0=0;
}
}
main()
{
unsigned char i;
TMOD=1;IE=0x82;
while(1)
{
Display( (i++)%8,1);
}
}
void ISRT0(void) interrupt 1
{
TH0=(-50000)>>8;TL0=-50000;
mS++;
if(mS>20){mS=0;SecFlag=1;}//12MHz, 50mS定时中断,1秒计时。
}
你很容易扩展出任意要求的闪烁流水灯啦。
Display(2,1);
Display(1,1);
Display(3,2);
Display(1,2);
……放到while里面就好了。祝你玩得开心。
5.单片机c语言//下面三行分别将uchar、uint、ulong定义为 unsigned char、unsigned int和unsigned long 方便使用
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include //包括一个52标准内核的头文件
sbit P10 = P1^0; //将P10定义单片机的P1.0口,控制的LED灯,
sbit K1= P3^2; //将K1定义为按键K1
uchar scale;//用于保存占空比的输出0的时间份额,总共10份
char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
//模拟PWM输出控制灯的10个亮度级别
void main(void) // 主程序
{
uint n;
//下面几行是定时器的初始化,初始化的数据OxF3和0x98,数据是通过计算得到的,公式我忘了
RCAP2H =0xF3; //赋T2的预置值的高位,溢出1次是1/1200秒钟
RCAP2L =0x98;//赋T2的预置值的低位
TR2=1; //启动定时器
ET2=1; //打开定时器2中断
EA=1; //打开总中断
while(1) //程序循环
{ ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作
//for循环只是起个延时的作用
for(n=0;n
scale++;//就是说每次for循环延时结束后scale占空比增加一次,直到scale==10
if(scale==10)scale=0;
}
}
//1/1200秒定时器2中断 中断程序独立的,不管何时只要中断的条件到了就调用它,本程序的条件是 定时器T2的定时到了
timer2() interrupt 5
{
static uchar tt; //tt用来保存当前时间在一秒中的比例位置
TF2=0;
tt++;
if(tt==10) //每1/120秒整开始输出低电平
{
tt=0;
if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影
P10=0;
}
if(scale==tt) //按照当前占空比切换输出高电平
P10=1;
}
6.单片机C语言入门1,首先要学习C语言基础,就相当于80%会单片机了,因为现在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言。
2,听起来单片机比较陌生,不是因为不懂,而是不知道方法和流程。现简单说说,仅供参考;
3,看一下单片机功能:包换内部FLASH、RAM、TIMER、INT、ADC、USB、ISP/IAR等。
4,编译环境、编程软件KEIL。
5,打开开发板的例子程序,在KEIL编译,下载到板,看结果和说明是不是相符,达到这样效果时,心里肯定很激动,这时真正学会了单片机,成功了。
6,然后再学会看电路图,电路图其实很简单,就是一根线从一个地方连接到另一个地方,写代码时,只记住单片机是哪一个管脚,然后对它写代码即可。
总结:实验很重要,要多参与这样的项目开发,方能进步。
7.51单片机 c语言看门狗程序怎么写看门狗在51单片机电路里的作用是防止程序 “跑飞”、“死机”后,系统不动作,而采取复位的办法“唤醒”系统。
89S51、89S52系列单片机自带有看门狗功能,片内数据区A6H寄存器具有看门狗功能,使用很简单:#include
void main() { WDTRST=0x1E;;//初始化看门狗 WDTRST=0xE1;//初始化看门狗 for(;;) { WDTRST=0x1E;;//喂狗指令 WDTRST=0xE1;//喂狗指令 } } 可见,你只要在程序的大循环体内加一条喂狗指令就行。但这种看门狗功能有限,不是很可靠的,它依靠晶振工作,一旦晶振不起振,就无效了。
实践中多采用外部看门狗的方法,可以选用的芯片很多:MAX708、MAX813 、X25045。..具体编程就要看芯片的参考资料了。
例如:X25045是SPI总线的看门狗芯片,复位端和单片机复位端连接,SPI数据输入你可以选择合适的IO接口。WREN 0x06 设置写允许位 WRDI 0x04 复位写允许位 RDSR 0x05 读状态寄存器 WRSR 0x01 写状态寄存器 READ 0x03/0x0b 读操作时内部EEPROM页地址 WRITE 0x02/0x0a 写操作时内部EEPROM页地址 #include
所以89S51 89S52都带狗,80C51、80C52都不带狗。
8.51单片机C语言编程代码如下:
typedef union {
unsigned int myvalue;
struct{
unsigned myvalueL:8;
unsigned myvalueH:8;
}child;
}_mytype;
_mytype mytype;
void main()
{
mytype.myvalue = 0x1234;
}
仿真如下:
是你要的结果吧