《单片机C语言小程序》由会员分享,可在线阅读,更多相关《单片机C语言小程序(20页珍藏版)》请在金锄头文库上搜索。
1、单片机 C 语言小程序#include #include #define VAR XBYTE0x00 /*VAR 为外部位址 0000*/#define read 0 /*93c46 读取的识别码 READ=0*/#define write 2 /*93c46 写入的识别码 WRITE=2*/#define ewen 4 /*93C46 写致能的识别码 EWEN=4*/#define ewds 6 /*93C46 写除能的识别码 EWDS=6*/#define cs INT0 /*93C46 CS 接脚=8051 RD P3.2*/#define clk INT1 /*93C46 CLK 接脚
2、=8051 WR P3.3*/#define di T0 /*93C46 DI 接脚=8051 T1 P3.4*/#define d0 T1 /*93C46 DO 接脚=8051 T0 P3.5*/#define LOW 0x49 /*存放测试温度的下限值*/#define HIGH 0x51 /*存放测试温度的上限值*/bit FLAG0=0; /*宣告 TIMER0 响应旗号*/外接工业专用温度传感器时,目前设置测量温度为 0-99 度:static const char tab13=0x3a,0x53,0x6f,0x8a,0xa3, /*0 度,10 度,20 度,30 度,40 度*/
3、0xB8,0xC8,0xD5,0xDE,0xE5, /*50 度,60 度,70 度,80 度,90 度*/0xEA,0xEE; /*100 度,110 度*/使用板上 AD590 温度传感器时,目前设置测量温度为 0-99 度:/static const char tab13=0x88,0x8d,0x92,0x97,0x9c, /*0 度,10 度,20 度,30 度,40 度,*/ 0xa1,0xa6,0xab,0xb0,0xb5, /*50 度,60 度,70 度,80 度,90 度*/ 0xba,0xc0; /*100 度,110 度*/char data12;char C,S,k=0
4、;char MEP7; /*显示器值存放阵列*/MEP0=数码管最低位显示值,温度指示小数点后位/MEP1=数码管次低位显示值,温度指示个位数/MEP2=数码管高位显示值,温度指示十位数/MEP3=数码管最低位显示值,功能显示目前定为 1,2,3,4,5/MEP4=/MEP5=暂放置温度显示值,高 4 位为温度指示十位数值,低 4 位为温度指示个位数值/MEP6=在温度显示与电压调整副程式中,将测量值 C 暂存 MEP6中unsigned char combuf10;unsigned char ADR46,CH,CL,m,C1,C2; /*ADR46,93C46 位址,CH 高位元组,CL 低
5、*/int sec,sec1;char ptr=0,ptr1=0x10,psr=0; /*ptr 显示器值存放阵 MEP指标,ptr1 显示器扫描指标*/char count=100,sb=0;void delay (unsigned int value) /*延时副程式*/while (value!=0) value-; /*10us 延时*/void COMP(); /*宣告比较现在温度与设定温度副程式*/void SET();void disp(); /*宣告设定温度副程式*/void to9346(char c); /*宣告 TO93C46 副程式*/void SDT46(char c
6、); /*宣告串入副程式*/RDT46(); /*宣告串出副程式*/void clear(void); /*宣告清除按键存放/显示器阵列 MEP副副程式*/void xch(void); /*宣告按键存放/显示器阵列 MEP右键滚入副程式*/void sjust(void); /*温度显示慢跳调整副程式*/void temper(); /*宣告温度显示与电压调整副程式*/void UP(); /*宣告温度上升键防抖动副程式*/void UPA(); /*宣告温度设置上升副程式*/void DOWN(); /*宣告温度下降键防抖动副程式*/void DOWNA(); /*宣告温度设置下降副程式*
7、/void FONTION(); /*宣告模式键判断模式副程式*/void buf(); /*宣告从 93C46 取设定值副程式*/void SAVE(); /*宣告设置存储副程式*/*main() /*主程式*/TMOD=0x11; /*TIMER0,TIMER1 工作在 MODE1*/TH0=(65535-50000)/256; /*设定 TIMER0 初值,50ms*/TL0=(65536-50000)%256;TH1=(65535-4000)/256; /*设定 TIMER1 初值,4ms*/TL1=(65536-4000)%256;IE=0x8a; /*TIMER0,TIMER1 中
8、断致能*/TR1=1; /*启动 TIMER1*/P2_7=1; /*测试用,温度下限指示*/P2_6=1; /*测试用,温度在正常上下限间指示*/P2_5=1; /*测试用,温度上限指示*/buf(); /*从 93C46 取设定值副程式*/while(1) /*无条件循环*/P3_1=0;MEP3=0xff; /*将模式位置零*/VAR=0x00; /*产生写入信号 WR=0,令 ADC0804 开始转换*/while (P2_0=1); /*侦测 ADC0804 的接脚 INTR=0 否?是则转换完成*/S=VAR; /*读取 ADC0804 资料,存入 C*/sjust(); /*温度
9、显示慢跳调整副程式*/temper(); /*呼叫温度显示调整副程式*/MEP5=(MEP2 combuf6) P2_5=0; /*如果测试温度大于设定温度上限,等式成立时,则将高温指示打开P2_5=0*/P2_7=P2_6=1; /*关闭指示灯*/if(combuf5 0;Delay-) for(i=0;iNew Project“菜单,出现对话框,要求给将要建立的工程起一个名字, 这里起名为 exam2,不需要输入扩展名.点击“保存“按钮,出现第二个对话框,如图 1-2 所示,这个对话框要求选择目标 CPU(即你所用芯片的型号),Keil 支持的 CPU 很多,这 里选择 Atmel 公司的
10、 89S52 芯片.点击 AT M E L 前面的“+“号,展开该层,点击其中的 89S52, 然后再点击“确定“按钮,回到主窗口,此时,在工程窗口的文件页中,出现了“Target 1“, 前面有“+“号,点击“+“号展开,可以看到下一层的“Source Group1“,这时的工程还是 一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1“使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图 1-3 所示,选中其 中的“Add file to Group“Source Group1“,出现一个对话框,要求寻找源文件. 双击 exam2.c 文
11、件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失, 等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出 现如图 1-4 所示的对话框,提示你所选文件已在列表中,此时应点击“确定“,返回前一对 话框,然后点击“Close“即可返回主接口,返回后,点击“Source Group 1“前的加号,exam3.c 文件已在其中.双击文件名,即打开该源程序. 1.3 工程的详细设置 工程建立好以后,还要对工程进行进一步的设置,以满足要求. 首先点击左边 Project 窗口的 Target 1,然后使用菜单“Project-Option for target ta
12、rget1“ 即出现对工程设置的对话框,这个对话框共有 8 个页面,大部份设置项取默认值就行了. Target 页 图 1-2 选择单片机型号 图 1-3 加入文件 如图 1-5 所示,Xtal 后面的数值是晶振频率值,默认值是所选目标 CPU 的最高可用频 率值,该值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间.正确设 置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率相 同,如果没必要了解程序执行的时间,也可以不设. Memory Model 用于设置 RAM 使用情况,有三个选择项: Small: 所有变量都在单片机的内部 RAM 中; Com
13、pact:可以使用一页(256 字节)外部扩展 RAM; Larget: 可以使用全部外部的扩展 RAM. Code Model 用于设置 ROM 空间的使用,同样也有三个选择项: Small:只用低于 2K 的程序空间; Compact:单个函数的代码量不能超过 2K,整个程序可以使用 64K 程序空间; Larget:可用全部 64K 空间; 这些选择项必须根据所用硬件来决定,由于本例是单片应用,所以均不重新选择,按默 认值设置. Operating:选择是否使用操作系统,可以选择 Keil 提供了两种操作系统:Rtx tiny 和 Rtx full,也可以不用操作系统(None),这里使
14、用默认项 None,即不用操作系统. 图 1-5 设置目标 图 1-4 重复加入源程序得到的提示 OutPut 页 如图 1-6 所示,这里面也有多个选择项,其中 Creat Hex file 用于生成可执行代码文件, 该文件可以用编程器写入单片机芯片,其格式为 intelHEX 格式,文件的扩展名为.HEX,默 认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项. 工程设置对话框中的其它各页面与 C51 编译选项,A51 的汇编选项,BL51 连接器的连 接选项等用法有关,这里均取默认值,不作任何修改.以下仅对一些有关页面中常用的选项 作一个简单介绍. Listing 页 该页用于调整生成的列表文件选项.在汇编或编译完成后将产生(*.lst)的列表文件, 在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致 的调节,其中比较常用的选项是“C Compile Listing“下的“Assamble Code“项,选中该项 可以在列表文件中生成 C 语言源程序所对应的汇编代码,建议会使用汇编语言的 C 初学者 选中该项,在编译完成后多观察相应的 List 文件,查看 C 源代码与对应汇编代码,对于提 高 C 语言编程能力大有好处. C51 页 该页用于对 Keil 的 C51 编译器的编