本文目录一览:
刚刚用C语言写的单片机程序,帮忙看看哪里错了.
主程序改一下:
void main()
{
init();
while(1);
}
单片机c语言程序
最近刚学完51单片机,对这个比较了解,这是典型的双机通信问题,很简单,以下是根据你提供的原理图写的程序,只需要把对应程序生成的hex文件,加载到单片机内,再运行即可显示,按一下加1,显示范围:10-19;
发送机程序:
/* 发送单片机 */
#includereg52.h
#define uint unsigned int
#define uchar unsigned char
sbit key=P3^7;
void delay(uint t)
{
uint i;
while(t--)
for(i = 0; i 200; i++);
}
void serial_initial()
{
TMOD = 0x20;
TH1 = 0xfa; //bps 9600
TL1 = 0xfa;
TR1 = 1;
SCON = 0x50; //SM0=0;SM1=1;REN=1
PCON = 0x80;
}
void main()
{
uchar num;
serial_initial();
num=10; //设置初始值为10,可根据需要修改
while(1)
{
if(key==0)
{
SBUF = num;
if(TI==1)
TI = 0;
delay(100);
num++;
if(num==19) //设置结束值为19,可根据需要修改
num=10;
}
}
}
接收机程序:
#includereg52.h
#define uint unsigned int
#define uchar unsigned char
uchar code dis_code[] =
{0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
uchar num=0,n1=0,n2=0;
void delay(uint t)
{
uint i;
while(t--)
for(i = 0; i 200; i++);
}
void serial_initial()
{
TMOD = 0x20;
TH1 = 0xfa; //bps 9600
TL1 = 0xfa;
TR1 = 1;
SCON = 0x50; //SM0=0;SM1=1;REN=1
PCON = 0x80;
EA = 1; //打开串口中断
ES = 1;
}
void display_num() //显示接收的数字
{
n1=num%10;
n2=num/10;
P2=dis_code[n1];
delay(10);
P0=dis_code[n2];
delay(10);
}
void main()
{
serial_initial();
while(1)
{
display_num();
}
}
void serial() interrupt 4
{
if(RI == 1)
{
RI = 0;
num = SBUF;
}
}
原理图:
用C语言编写单片机程序
#include
sbit
csb_SAT=
P1^0;
//定义超声波发生脚
void
delay(void)
//延时25微秒,12T芯片用12M误差
0us
{
unsigned
char
a;
for(a=11;a0;a--);
}
void
csb_fs(int
dat)
{while(dat--){csb_SAT=1;delay();csb_SAT=0;delay();}}
//发射
void
main()
{
EA=1;
while(1)
{
csb_fs(10);
delay();delay();delay();delay();delay();delay();delay();delay();delay();
IE=0x83;
//INT0允许中断
while(IE);
P1_1=1;delay();P1_1=0;delay();P1_1=1;delay();P1_1=0;delay();P1_1=1;delay();P1_1=0;delay();
}
}
void
int0_chuankou(void)
interrupt
using
1
//外部INT0中断子程序
{
IE=0;//禁止INT0中断
}