单片机c语言编程例
⑴ 单片机题目,用c语言,求助!!
单片机题目,用四位一体共阴数码管,P0口输出段码,P2口输出位码。用定时器T0定时50ms,采用中断方式,对中断计数,中断20次就为1秒,计数值加一。三个独立按键接在P3.5、P3.6、P3.7上。仿真图和效果见下图。
⑵ 求解一道单片机C语言编程题,急
#include"AT89X52.h"
sbit BUTTON = P1^1;
sbite LED = P1^0;
unsigned int reg;
void main(void)
{
while(1)
{
if (!BUTTON)
{
reg= 5000;
while(--reg);
if (!BUTTON)
{
LED = ~LED;
while(!BUTTON);
}
}
}
}
⑶ 51单片机使用T0和T1外部脉冲计数,C语言如何编程
1、使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,
--统计脉冲个数,用外部中断更好。
--T0和T1,留着定时用。
用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转。
2、例程:
#include<reg51.h>
sbitk1=?;//自己定义
sbitk2=?
sbitk3=?
sbitk4=?
sbitDIAN1=?
sbitDIAN2=?
sbitDIAN3=?
sbitDIAN4=?
sbitSEN1=?
sbitSEN2=?
voiddelay(unsignedintx)
{
unsignedintm,n;
for(m=x;m>0;m--)for(n=115;n>0;n--);
}
voidmain(void)
{
TMOD=0x55;
IE=0x8a;
while(1){
if(!k1){
delay(10);
if(!k1){
while(!k1);
TH0=(65536-1700)/256;
TL0=(65536-1700)%256;
SEN1=0;
DIAN1=0;DIAN2=1;
SEN1=1;
TR0=1;
}
}
if(!k2){
delay(10);
if(!k2){
while(!k2);
TH0=(65536-1700)/256;
TL0=(65536-1700)%256;
SEN1=0;
DIAN1=1;DIAN2=0;
SEN1=1;
TR0=1;
}
}
if(!k3){
delay(10);
if(!k3){
while(!k3);
TH1=(65536-1700)/256;
TL1=(65536-1700)%256;
SEN2=0;
DIAN3=0;DIAN4=1;
SEN2=1;
TR1=1;
}
}
if(!k4){
delay(10);
if(!k4){
while(!k4);
TH1=(65536-1700)/256;
TL1=(65536-1700)%256;
SEN2=0;
DIAN3=1;DIAN4=0;
SEN2=1;
TR1=1;
}
}
}
}
⑷ 求各位大神解决单片机程序C语言代码跟解释
11.程序如下:
#include<reg52.h>
//包含单片机寄存器的头文件
#include<intrins.h>
#define
uchar
unsigned
char
//定义一下方便使用
#define
uint
unsigned
int
//定义一下方便使用
uchar
num,num1;
uchar
code
table[]={
//数字编码0~9
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
void
main()
//主程序
{
TMOD=0x01;
//定时器T0,工作方式1
TH0=(65536-50000)/256;
//装载初值,中断一次50ms
TL0=(65536-50000)%256;
EA=1;
//开总中断
ET0=1;
//开T0中断
TR0=1;
//启动定时器
while(1)
//大循环
{
P2=0xaa;
//数码管位选,10101010b
P0=table[num];
//段选信号
}
}
void
T0_time()
interrupt
1
//中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num1++;
if(num1==20)
//中断20次为1秒
{num1=0;
num++;
//每1秒加1
if(num==10)
//数码管显示的编码0~9
ET0=0;
for(int
i=0;i<10000;i++)
{
P1=0xff;
delay();
P1=0xfe;
delay();
}
num=0;
}
}
void
delay()();
{
unsigned
char
i;
for(i=20;i>0;i--);
}
12.#include
<reg52.h>
#include
<intrins.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
void
DelayMS(uint
x)
{
uchar
t;
while(x--)
{
for(t=120;t>0;t--);
}
}
void
main()
{
uchar
i;
P2=0x01;
while(1)
{
for(i=7;i>0;i--)
{
P2=_crol_(P2,1);
DelayMS(150);
}
for(i=7;i>0;i--)
{
P2=_cror_(P2,2);
DelayMS(150);
}
}
}
⑸ 求一个51单片机C语言程序编程
实验内容:单片机甲、乙进行双机串行通信,甲机通过串口控制乙机LED闪烁(如下图所示,要求利用芯片MAX232),双方的晶振频率均为11.0592MHz(波特率为9600kb/s)要求:甲机按开关K1一次,发送字符“A”给乙机,点亮灯D1与D2;按开关K1两次,发送字符“B”给乙机,点亮灯D3与D4;按开关K1三次,发送字符“C”给乙机,全部点亮;按下第四次K1,灯全灭
#include<reg51.h> /*甲机*/
sbit k=P1^0;
sbit P00=P0^0;
sbit P03=P0^3;
unsignedchari,NO;
voidmain(void) /*主函数*/
{
SCON=0x40; /*方式1只发送,不接收*/TMOD=0x20;
TH1=0xfd; /*给定时器T1赋初值,波特率为9600*/
TL1=0xfd;
TR1=1;
k=1;
NO=0;
while(1)
{
if(k==0)
{while(k==0);
NO=(NO+1)%4;
}
switch(NO)
{case0:P0=0xff;
break;
case1:P00=0;P03=1;
SBUF='A';
while(TI==0);
TI=0;
break;
case2:P00=1;
P03=0;
SBUF='B';
while(TI==0);
TI=0;
break;
case3:P00=0;
P03=0;
SBUF='C';
while(TI==0);
TI=0;
break;
}
}
for(i=250;i>0;i--){;} //延时
}
#include<reg51.h> /*乙机*/
sbit k=P1^0;
sbit P00=P0^0;
sbit P03=P0^3;
unsignedcharNO;
voidmain() /*主函数*/
{
SCON=0x50; /*设置串口为方式3,允许接收REN=1*/
TMOD=0x20;
TH1=0xfd; /*给定时器T1赋初值,波特率为9600*/
TL1=0xfd;
TR1=1;
P0=0xff;
while(RI==0);/*检测接收中断标志RI,RI=0,未接收完,则循环等待*/
{RI=0;
switch(SBUF)
{case'A':P00=0;P03=1;
break;
case'B':P00=1;P03=0;
break;
case'C':P00=P03=0;
break;
}
}
}