单片机原理及系统课程设计报告
(2)A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图13所示。
开始 数据采集 启动转换 否 A/D转换结束? 是 输出数据
结束
图4 模数转换结构图
(3)显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms[10]。在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
5总结
这次单片机课程设计有很多的收获,锻炼了自己的实践动手能力,温习了单片机编程知识,很有意义!在这过程中遇到了很多很多的问题:1、硬件电路的搭建问题。找到了ADC0809,AT89C51,但是显示器不知道用哪个好,前面两个都是自己熟悉的芯片,显示器很陌生,这是遇到的第一个问题,最后想了想,上网查了些资料,学习了显示的芯片,最终解决问题。2、芯片选择好了后发现屏幕不
4
单片机原理及系统课程设计报告
会亮,很纠结,刚开始想着是程序出了问题,但是最终没能找出错误,又再看了显示器芯片的介绍,最终发现是没接显示亮度的端口。总的来说,这次能够独立的做一个单输入的电压器,培养和锻炼了自己,很有意义,以后要多做这样的练习!
6参考文献
[1]张金敏.单片机原理与应用系统设计[M].成都:西南交通大学出版社2011:233-250 [2]李华.计算机控制系统[M].北京:机械工业出版社,2011:151-158 [3]李华.单片机原理及应用[M].兰州:兰州大学出版社,2001:190-198
5
单片机原理及系统课程设计报告
7附录
#include
#define uchar unsigned char/*定义uchar为无符号字符型*/ sbit P2_3=P2^3;/*定义p2_3为P2口的第四位*/ sbit OE=P3^0;/*定义OE为p3口的第一位*/ sbit EOC=P3^1;/*定义EOC为P3口的第二位*/ sbit P2_1=P2^1;/*定义P2_1为P2口的第二位*/ sbit P2_2=P2^2;/*定义P2_2为P2口的第三位*/ sbit ST=P3^2; sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6;
uchar code leddata_dot[]={0x40,0x79,0x24,0x30,0x19,0x12};
uchar code leddata[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void delay(uchar n)/*延时函数delay*/ {
uchar i,j;
for(i=0;i for(j=0;j<125;j++); } void convert(uchar volt_data)/*转换函数*/ { uchar temp; P0=leddata_dot[volt_data/51]; P2_1=1; delay(3);/*启动延时函数delay*/ P2_1=0; if((volt_dataQ)<0x19) { P0=leddata[(volt_dataQ)*10/51]; P2_2=1;/*P2.2被赋值为1*/ delay(3); P2_2=0;/*P2.2被清零*/ } else { P0=leddata[(volt_dataQ)*10/51+5];/*定义p0口*/ P2_2=1; delay(3); P2_2=0; } temp=(((volt_dataQ)*10)/51)*10Q; if(temp<0x19) { P0=leddata[temp*10/51];/*重新定义P0口*/ 6 单片机原理及系统课程设计报告 P2_3=1; delay(3); P2_3=0; } else { P0=leddata[temp*10/51+5];/*定义P0口*/ P2_3=1; delay(3); P2_3=0; } } void main()/*主函数*/ { uchar volt_data;/*定义volt_data为无符号字符型*/ P3_4=1;/*置位p3.4*/ P3_5=1;/*置位p3.5*/ P3_6=0;/*把p3.6清零*/ while(1)/*无限循环*/ { ST=0; _nop_(); ST=1; _nop_(); ST=0; if(EOC==0)/*当AD转换结束时,就进入到延时程序*/ delay(100); while(EOC==0); OE=1;/*输出使能为1时,能输出已转换的数字量*/ volt_data=P1; OE=0;/*输出使能为0,AD转换器不输出数据*/ convert(volt_data); } } 7

