⑴ 求51單片機程序
這是51單片機頻率計程序,弄明白了寫你的程序就 很簡單了
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
//定義以I/O口的功能
sbit beiguang=P3^2;//液晶屏背光
sbit rs=P1^3;//液晶屏寫選擇,0命令 1數據
sbit rw=P1^4;//液晶屏讀寫選擇
sbit lcden=P1^5;//液晶屏使能
#define db P2 //定義P2為數據輸出口,寫數據時用db代替P2,增加液晶屏程序的通用性
//更改硬體接線時,只更改此處,而不必去更改液晶屏讀寫子程序
uchar aa,bb,cc;
uint dd,ee;
void Delay1ms(unsigned int i) //1ms延時程序
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化設置
{
TMOD=0x15;//定時器0作為計數器,定時器1作為定時器用
TH0=0;//計數器清0
TL0=0;
EA=1;//開總中斷
ET1=1;//允許定時器1中斷
TH1=0x4c;
TL1=0x5c;
TR0=1;//啟動計數器
TR1=1;//啟動定時器
aa=0;
}
void write_com(uchar com)//向液晶屏寫命令
{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void write_date(uchar date)//向液晶屏寫數據
{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void init2()//液晶屏初始化
{
beiguang=0;
rw=0;
write_com(0x38);//顯示模式16字*2行,5*7點陣,數據口8位
Delay1ms(10*12);
write_com(0x0f);//開顯示,顯示游標,游標閃爍
Delay1ms(10*12);
write_com(0x06);//寫完數據後數據指針和游標位置自動加1
Delay1ms(10*12);
write_com(0x01);//屏幕清除
Delay1ms(10*12);
}
void display4(unsigned int number) //單行多位顯示程序
{
uchar A1,A2,A3,A4,A5;
init2();//液晶屏初始化
A1=number/10000%10;//分離出十萬,萬,千,百,十,個
A2=number/1000%10;
A3=number/100%10;
A4=number/10%10;
A5=number%10;
write_com(0x80);//第1個數據的位置設定,第1行第1列
Delay1ms(10);
write_date(0x30+A1);//寫數據
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);
write_com(0x87);//第6個數據'H'的位置,中間空85和86 二格
write_date('H');
Delay1ms(10);
write_date('z');
Delay1ms(10);
}
void main()//主程序很簡單
{
init();//初始化
while(1)//循環程序
{
dd=bb*256+cc;//0.5S的計數值
ee=2*dd;//換算為1秒鍾的計數值
if(aa==1)
{
if(TH0>12)//預判斷,50ms內TH0>12,1s內計數值將超過可計數的最大值65535
fm=1;//報警
}
display4(ee);//顯示
fm=0;//報警停止
}
}
void timer1()interrupt 3//注意:定時器1的中斷序號為3
{
aa++;
TH1=0x4c;//11.0592Mhz
//TL1=0;//11.0592Mhz
TL1=0x5c;//實際電路振盪頻率11.03705Mhz,對TL1修正
if(aa==10)//中斷10次,共0.5S
{
TR0=0;//暫停計數
aa=0;
bb=TH0;//讀出計數器數據
cc=TL0;
TL0=0;//計數器清0
TH0=0;
TR0=1;//重新啟動計數器
}
}
⑵ 51單片機匯編程序
ORG 0
CALL KEY_1
CALL KEY_1
CALL KEY_1
CPL P1.0
SJMP 0000
KEY_1:
JB P3.2, $
CALL DL10MS
JB P3.2, KEY_1
JNB P3.2, $
RET
DL10MS:
...;軟體延時,自己編寫吧
RET
⑶ 單片機開發,麥克風感測器的替換問題
加一個放大器吧,我用吳鑒鷹單片機開發板做過音響,這個原理差不多的。
於醫用數字紅外感測器MLX90615 的紅外耳溫計設計。基於紅外測溫原理,耳溫計主要由數字紅外感測器、低功耗CPU、液晶顯示屏和其他外圍電路組成。CPU 通過I2C 匯流排讀取MLX90615採集的紅外輻射信號,將其轉換為對應的人體耳腔溫度值並顯示在液晶屏上。實驗結果表示,該耳溫計解析度達到了0.02℃,准確度達到了0.1℃,實現了耳溫的准確、快速測量。
⑷ 哪位高手用過MLX90615+51單片機
弄單片機就是這樣,要不斷的面臨迷茫。真的!
唯一的辦法就是堅持,堅持,再堅持。當你堅持一天感覺沒多大效果,但你堅持十天,相信你又會看到另一片天空。原來以前面臨的問題不過如此,相信自己,加油吧!
若是沒有知道老師,可自己去電子市場買些模塊回來,慢慢玩,玩著玩著,就不再迷茫了的。
電子表,鬧鍾,紅外遙控車,紅外測距,自動循跡小車,無線通信,液晶顯示,波形顯示,AD轉換,黑白動畫(BAD APPLE)等等。。。
都做完以後綜合,做出自己想做的東西。
⑸ 51單片機 串口程序
void
main()
{
scon
=
0x50;
tmod
=
0x20;
//設置定時器1為工作方式2
th1
=
0xf4;
tl1
=
0xf4;
tr1
=
1;
ea
=
1;
es
=
1;
while(1)
{
if(flag)
{
flag
=
0;
//不關閉串口中斷,要讓它繼續接收
num1++;
//超過255,自動就是0
sbuf
=
num1;
while(!ti);
ti
=
0;
sbuf
=
a;
while(!ti);
ti
=
0;
}
}
}
void
ser()
interrupt
4
{
if
(ri)
{
ri
=
0;
a
=
sbuf;
flag
=
1;
}
}
⑹ 簡單51單片機串口程序
試試下列程序,這時用中斷發送的。
#include<reg51.h>
#define uchar unsigned char
uchar txt[] = "hello";
uchar i = 0;
void main(void)
{
PCON = 0X00;
SCON = 0X50;
TMOD = 0X20;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
EA = 1;
ES = 1;
TI = 1;
while(1) {
if(i == 6) {
i = 0;
TI = 1;
}
}
}
void uart() interrupt 4
{
if(RI == 1) RI = 0;
if(TI == 1) {SBUF = txt[i++]; TI = 0;}
}
本程序,可以用串口助手接收。收到的是:hellohellohellohellohello....
⑺ 求MSP430讀取MLX90615的c語言程序,即使用IIC串列通信的方法讀取MLX90615的RAM中的溫度值,求大神幫忙!!
你可以下載MLX90615其他MCU平台的驅動,51的 avr的或者STM8/32的都可以,只要不是用硬體IIC的就行。
然後下載MLX90615的datasheet,來看IIC的時序。
將其他平台的常式移植到MSP430上,用示波器看SCL 和SDA的波形是否和datasheet上的一致。
不一致的話,就修改延時時間,直到一致為止。
⑻ 大蝦們~小弟急需mlx90615紅外感測器在單片機中的c語言編程~跪求~大謝!
紅外測溫模塊?
不是很難吧。
⑼ 多個紅外溫度感測器單片機i2c程序
你好!最多要接多少個感測器呢?
⑽ 51單片機程序編寫
/*這是用LCD顯示所測溫度的代碼,你參考一下,如果沒問題的話,其他的功能你再添加就好了,不難*/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define Nack_number 10
//**************埠定義**************************************************
uchar flag; //LCD控制線介面
sbit RS=P1^0; //RS端
sbit RW=P1^1; //讀寫端
sbit LCDE=P2^5; //使能端
//mlx90614埠定義
sbit SCK=P2^1; //時鍾線
sbit SDA=P2^2; //數據線
//************數據定義****************************************************
bdata uchar flag1; //可位定址數據
sbit bit_out=flag1^7;
sbit bit_in=flag1^0;
uchar tempH,tempL,err;
//************************** LCD1602 ***********************************
//向LCD寫入命令或數據*****************************************************
#define LCD_COMMAND 0 //命令
#define LCD_DATA 1 // 數據
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 游標返回原點
//設置顯示模式******* 0x08+ *********************************************
#define LCD_SHOW 0x04 //顯示開
#define LCD_HIDE 0x00 //顯示關
#define LCD_CURSOR 0x02 //顯示游標
#define LCD_NO_CURSOR 0x00 //無游標
#define LCD_FLASH 0x01 //游標閃動
#define LCD_NO_FLASH 0x00 //游標不閃動
//設置輸入模式********** 0x04+ ********************************************
#define LCD_AC_UP 0x02 //游標右移 AC+
#define LCD_AC_DOWN 0x00 //默認 游標左移 AC-
#define LCD_MOVE 0x01 //畫面可平移
#define LCD_NO_MOVE 0x00 //默認 畫面不移動
//************************** mlx90614 ***********************************
//command mode 命令模式
#define RamAccess 0x00 //對RAM操作
#define EepomAccess 0x20 //對EEPRAM操作
#define Mode 0x60 //進入命令模式
#define ExitMode 0x61 //退出命令模式
#define ReadFlag 0xf0 //讀標志
#define EnterSleep 0xff //進入睡眠模式
//ram address read only RAM地址(只讀)
#define AbmientTempAddr 0x03 //周圍溫度
#define IR1Addr 0x04
#define IR2Addr 0x05
#define LineAbmientTempAddr 0x06 //環境溫度
/*0x0000 0x4074 16500 0.01/單元
-40 125*/
#define LineObj1TempAddr 0x07 //目標溫度,紅外溫度
/*0x27ad-0x7fff 0x3559 22610 0.02/單元
-70.01-382.19 0.01 452.2*/
#define LineObj2TempAddr 0x08
//eepom address EEPROM地址
#define TObjMaxAddr 0x00 //測量范圍上限設定
#define TObjMinAddr 0x01 //測量范圍下限設定
#define PWMCtrlAddr 0x02 //PWM設定
#define TaRangeAddr 0x03 //環境溫度設定
#define KeAddr 0x04 //頻率修正系數
#define ConfigAddr 0x05 //配置寄存器
#define SMbusAddr 0x0e //器件地址設定
#define Reserverd1Addr 0x0f //保留
#define Reserverd2Addr 0x19 //保留
#define ID1Addr 0x1c //ID地址1
#define ID2Addr 0x1d //ID地址2
#define ID3Addr 0x1e //ID地址3
#define ID4Addr 0x1f //ID地址4
//************函數聲明*****************************************************
void start(); //MLX90614發起始位子程序
void stop(); //MLX90614發結束位子程序
uchar ReadByte(void); //MLX90614接收位元組子程序
void send_bit(void); //MLX90614發送位子程序
void SendByte(uchar number); //MLX90614接收位元組子程序
void read_bit(void); //MLX90614接收位子程序
void delay(uint N); //延時程序
uint readtemp(void); //讀溫度數據
void init1602(void); //LCD初始化子程序
void busy(void); //LCD判斷忙子程序
void cmd_wrt(uchar cmd); //LCD寫命令子程序
void dat_wrt(uchar dat); //LCD寫數據子程序
void display(uint Tem); //顯示子程序
void Print(uchar *str); //字元串顯示程序
//*************主函數*******************************************
void main()
{
uint Tem; //溫度變數
SCK=1;
SDA=1;
delay(4);
SCK=0;
delay(1000);
SCK=1;
init1602(); //初始化LCD
while(1)
{
Tem=readtemp(); //讀取溫度
cmd_wrt(0x01); //清屏
Print(" Temperature: "); //顯示字元串 Temperature: 且換行
display(Tem); //顯示溫度
Print(" ^C"); //顯示攝氏度
delay(10000); //延時再讀取溫度顯示
}
}
void Print(uchar *str) //字元串顯示程序
{
while(*str!='