本文目錄一覽:
剛剛用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中斷
}
原創文章,作者:BBMZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/141247.html