基于at89s52单片机的数控稳压电源设计论文(编辑修改稿)内容摘要:

国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比, C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 用过汇编语言后再使用 C来开发,体会更加深刻。 Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows 界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 仿真结果 先按复位键,系统初始化,再输入数字 12(预设电压值为 ),按下 键(确定键),则数码管显示 12,数字电压表显示实际输出电压值。 图 11分别为数码管和电压显示仿真,其中 图 10 中数码管显示 ,图 11 中数字电压表显示。 图 10 预设电压( )数码管显示仿真图 图 11 预设电压( ) 数字电压表显示仿真图 若需要重新设定,则按下 *号键(复位键)。 此时数码管熄灭,数字电压表读数为 0。 此时可重新设定。 仿真结果如图 1 13 所示。 图 12 重设定数码管显示仿真图 图 13 重设定数字电压表显示仿真图 系统调试 在调试过程中主要是对程序的修改,特别是延时子程序。 开始延时较短时,当按下数字键时,两个数码管同时显示按下的数字。 如果延时较长则数字会缓慢的显示出来。 通过修改程序,将延时调到适中,系统正常工作。 误差分析 设定预设值后,读取数字电压表电压值,共记录 10 组数据如表 3 所示。 通过预设值和实际值的比较进行误差分析。 表 3 预设值和实际值的比较(单位: V) 预设值 2. 2 实际值 差值 0 误差 % 0 % % % %. % % % % 误差平均值 =(%+%+%+%+%+%+%+ %+%) % 从数据中可看出 %1%,误差较小。 产生误差的因素主要有一下几点: ( 1)在参数选择的时候没有完全匹配; ( 2)数字电压表只能读出 3位有效数字; ( 3)基准电压设定不适中; ( 4)转换位数不高。 附录:程序清单 define _PWLOCK_H // 防止 被重复引用 define _PWLOCK_H include include include include define uchar unsigned char define uint unsigned int uchar px。 uint a。 uint b。 uint c。 //为 0XFF uint i。 uchar digbit。 // 字位 uchar dy。 uchar wordbuf[2]。 // 字型码缓冲区 uchar count。 // 位计数 uchar pwbuf[2]。 // 输入数字存储区 bit enterflag。 // 确认键按下与否标志 bit lh。 bit pwflag。 // 密码正确与否标志 bit showflag。 // 数码管显示与否标志 sbit P20=P2^0。 sbit P21=P2^1。 void display(void)。 // 显示函数 endif //include /* 键消抖延时函数 */ void delay(void) { uint i。 for (i=120xx。 i0。 i)。 } /* 键扫描函数 */ uchar keyscan(void) { uchar scancode,tmpcode。 P1 = 0xf0。 // 发全 0行扫描码 if ((P1amp。 0xf0)!=0xf0) // 若有键按下 { delay()。 // 延时去抖动 if ((P1amp。 0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响 { scancode = 0xfe。 while((scancodeamp。 0x10)!=0) // 逐行扫描 { P1 = scancode。 // 输出行扫描码 if ((P1amp。 0xf0)!=0xf0) // 本行有键按下 { tmpcode = (P1amp。 0xf0)|0x0f。 /* 返回特征字节码,为 1的位即对应于行和列 */ return((~scancode)+(~tmpcode))。 } else scancode = (scancode1)|0x01。 //行扫 描码左移一位 } } } return(0)。 // 无键按下,返回值为0 } /* 定时器 0 中断服务子程序, 2ms 定时动态扫描显示 */ void time0_int(void) interrupt 1 { /* 重置 2ms 定时 */ TH0 = 20xx/256。 TL0 = 20xx%256。 px++。 //片选 if (showflag==1) display()。 // 调用显示函数 } /* 根据共阴极字型编 码表获取 0~9, A~B 字型代码 */ uchar getcode(uchar i) { uchar p。 switch (i) { case 0: p=0x3f。 break。 /* 0 */ case 1: p=0x06。 break。 /* 1 */ case 2: p=0x5B。 break。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。