单片机c语言编程_单片机c语言编程300例

单片机c语言编程

单片机编程是什么呀?跟C语言有联系吗?

  • 完整问题:
  • 好评回答: 单片机语言是一种 低级的计算机语言 用这种低级语言来编写程序就叫单片机编程,这种语言能直接被计算机识别,而高级语言如 C ,C++, JAVA等等语言是不能直接被计算机识别的而是要经过处理转换才能被计算机识别。可以说这样的语言和C语言是没有联系的。
  • 单片机编程是什么呀?跟C语言有联系吗?

  • 完整问题:
  • 好评回答: 单片机语言是一种 低级的计算机语言 用这种低级语言来编写程序就叫单片机编程,这种语言能直接被计算机识别,而高级语言如 C ,C++, JAVA等等语言是不能直接被计算机识别的而是要经过处理转换才能被计算机识别。可以说这样的语言和C语言是没有联系的。
  • 基于单片机的温度控制系统用C语言怎么编程

  • 完整问题:
  • 好评回答:基于51单片机的温度测量系统摘 要: 单片机在检测和控制系统中得到广泛的应用, 温度则是系统常需要测量、控制和保持的一个量。 本文从硬件和软件两方面介绍了at89c2051单片机温度控制系统的设计,对硬件原理图和程序框图作了简洁的描述。 关键词: 单片机at89c2051;温度传感器ds18b20;温度;测量 引言 单片机在电子产品中的应用已经越来越广泛,并且在很多电子产品中也将其用到温度检测和温度控制。为此在本文中作者设计了基于atmel公司的at89c2051的温度测量系统。这是一种低成本的利用单片机多余i/o口实现的温度检测电路, 该电路非常简单, 易于实现, 并且适用于几乎所有类型的单片机。 一。系统硬件设计 系统的硬件结构如图1所示。1。1数据采集 数据采集电路如图2所示, 由温度传感器ds18b20采集被控对象的实时温度, 提供给at89c2051的p3。2口作为数据输入。在本次设计中我们所控的对象为所处室温。当然作为改进我们可以把传感器与电路板分离,由数据线相连进行通讯,便于测量多种对象。 ds18b20是dallas公司生产的一线式数字温度传感器,具有3引脚to-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位a/d转换精度,测温分辨率可达0。0625℃,被测温度用符号扩展的16位数字量方式串行输出,支持3v~5。5v的电压范围,使系统设计更灵活、方便;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个ds18b20可以并联到3根或2根线上,cpu只需一根端口线就能与诸多ds18b20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使ds18b20非常适用于远距离多点温度检测系统。分辨率设定,及用户设定的报警温度存储在eeprom中,掉电后依然保存。ds18b20使电压、特性有更多的选择,让我们可以构建适合自己的经济的测温系统。如图2所示ds18b20的2脚dq为数字信号输入/输出端;1脚gnd为电源地;3脚vdd为外接供电电源输入端。 at89c2051(以下简称2051)是一枚8051兼容的单片机微控器,与intel的mcs-51完全兼容,内藏2k的可程序化flash存储体,内部有128b字节的数据存储器空间,可直接推动led,与8051完全相同,有15个可程序化的i/o点,分别是p1端口与p3端口(少了p3。6)。1。2接口电路 图2 单片机2051与温度传感器ds18b20的连接图接口电路由atmel公司的2051单片机、uln2003达林顿芯片、4511bcd译码器、串行eeprom24c16(保存系统参数)、max232、数码管及外围电路构成, 单片机以并行通信方式从p1。0~p1。7口输出控制信号,通过4511bcd译码器译码,用2个共阴极led静态显示温度的十位、个位。 串行eeprom24c16是标准i2c规格且只要两根引脚就能读写。由于单片机2051的p1是一个双向的i/o端口,所以在我们在设计中将p1端口当成输出端口用。由图2可知,p1。7作为串性的时钟输出信号与24c16的第6脚相接,p1。6则作为串行数据输出接到24c16的第5脚。p1。 4和p1。5则作为两个数码管的位选信号控制,在p1。4=1时,选中第一个数码管(个位);p1。5=1时,选中第二个数码管(十位)。p1。0~p1。3的输出信号接到译码器4511上作为数码管的显示。此外,由于单片机2051的p3端口有特殊的功能,p3。0(rxd)串行输入端口,p3。1(txd)串行输出端口,p3。2(into)外部中断0,p3。3(int1)外部中断1p3。4,(t0) 外部定时/计数输入点,p3。5(t1)外部定时/计数输入点。由图2可知,p3。0和p3。1作为与max232串行通信的接口;p3。2和p3。3作为中断信号接口;p3。4和p3。5作为外部定时/记数输入点。p3。7作为一个脉冲输出,控制发光二极管的亮灭。 由于在电路中采用的共阴极的led数码管,所以在设计电路时加了一个达林顿电路uln2003对信号进行放大,产生足够大的电流驱动数码管显示。由于4511只能进行bcd十进制译码,只能译到0至9,所以在这里我们利用4511译码输出我们所需要的温度。 1。3报警电路简介 图3 温度在七段数码管上显示连接图本文中所设计的报警电路较为简单,由一个自我震荡型的蜂鸣器(只要在蜂鸣器两端加上超过3v的电压,蜂鸣器就会叫个不停)和一个发光二极管组成(如图3所示)。在这次设计中蜂鸣器是通过uln2003电流放大ic来控制。在我们所要求的温度达到一定的上界或者下界时(在文中我们设置的上界温度是45℃,下界温度是5℃),报警电路开始工作,主要程序设计如下: main()//主函数 {unsigned char i=0; unsigned int m,n; while(1) {i=readtemperature();//读温度} if(i>0 && i=4&&m>=5)%%(m

    EPROM的编程语言是否跟单片机一样?

  • 完整问题:EPROM的编程语言是否跟单片机一样?
  • 好评回答:一样,只是存储的介质不一样,就好象EEPROM和FLASH的区别
  • 电子单片机技术

  • 完整问题:这个电子单片机开发技术,它有没有分什么呀?每一种单片机编程是不是都一样的呀,学C语言可以编程所有单片机的吗?
  • 好评回答:可以编辑简单的程序
  • C51单片机编程中C语言如何嵌套汇编语言

  • 完整问题:C51单片机编程中C语言如何嵌套汇编语言 要详细一点的 最好有DS18B20的编程实例
  • 好评回答:#include #include #define uchar unsigned char#define uint unsigned intsbit DS=P3^3; //定义DS18B20接口int temp; uchar flag1; void display(unsigned char *lp,unsigned char lc);//数字的显示函数;lp为指向数组的地址,lc为显示的个数void delay();//延时子函数,5个空指令code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x40,0x39,0x00};//共阴数码管显示数的组成是 “0-9″”0-9有小数点的” “-” “C” “空 表”unsigned char l_tmpdate[8]={0,0,10,0,0,0,0,0};//定义数组变量,并赋值1,2,3,4,5,6,7,8,就是本程序显示的八个数int tmp(void);void tmpchange(void);void tmpwritebyte(uchar dat);uchar tmpread(void);bit tmpreadbit(void);void dsreset(void);void delayb(uint count);void main() //主函数{uchar i;int l_tmp; while(1) { tmpchange(); //温度转换l_tmp=tmp();//读取温度值if(l_tmp0) i–; count–; } 答案补充 }void dsreset(void)//DS18B20初始化{ uint i; DS=0; i=103; while(i>0)i–; DS=1; i=4; while(i>0)i–;}bit tmpreadbit(void) // 读一位{ uint i; bit dat; DS=0;i ; //小延时一下 DS=1;i ;i ; dat=DS; i=8;while(i>0)i–; return (dat);}uchar tmpread(void) //读一个字节{ uchar i,j,dat; dat=0; for(i=1;i>1); } return(dat); } 答案补充 void tmpwritebyte(uchar dat) { uint i; uchar j; bit testb; for(j=1;j>1; if(testb) { DS=0; i ;i ; DS=1; i=8;while(i>0)i–; } else { DS=0; i=8;while(i>0)i–; DS=1; i ;i ; } }}void tmpchange(void){ dsreset(); delayb(1); tmpwritebyte(0xcc); tmpwritebyte(0x44); } 答案补充 int tmp() //获得温度{ float tt; uchar a,b; dsreset(); delayb(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); //发送读取数据命令 a=tmpread(); //连续读两个字节数据 b=tmpread(); temp=b; temp0;a–) for(b=60;b>0;b–);}哇!好累啊。。。这个可以用。。。用那个口自己看看就懂了,如果要汇编语言的去看:http://hi。baidu。com/?????????/blog/item/1f4f0ede8776141462279862。html。
  • 版权声明