课程设计论文印张计数器设计.doc

上传人:sccc 文档编号:4868117 上传时间:2023-05-20 格式:DOC 页数:18 大小:122.51KB
返回 下载 相关 举报
课程设计论文印张计数器设计.doc_第1页
第1页 / 共18页
课程设计论文印张计数器设计.doc_第2页
第2页 / 共18页
课程设计论文印张计数器设计.doc_第3页
第3页 / 共18页
课程设计论文印张计数器设计.doc_第4页
第4页 / 共18页
课程设计论文印张计数器设计.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《课程设计论文印张计数器设计.doc》由会员分享,可在线阅读,更多相关《课程设计论文印张计数器设计.doc(18页珍藏版)》请在三一办公上搜索。

1、印张计数器设计一设计任务要求1能够进行6位数码显示,显示当前的印张数;2能够进行印数的预置;3能够进行正/反计数;4能够模拟机械手取出次品;5当计数结束时,可以报警;二硬件设计总图80C514个LED显示印张计数器运作状态键盘输入端口6个七段数码管显示数据复位监控输入印张计数中断信号输入晶振时钟输入电源LED指示灯三硬件部分分析说明1)、显示部分实验箱提供了6位8段码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。位码经MC1413或ULN2003倒相驱动后,选择相应显示位。在实验箱中8位段码输出地址

2、为0X004H,位码输出地址为0X002H。此处X 是由KEY/LED CS决定,参见地址译码。做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。将KEY/LED CS接到CS0上,则段码地址为08004H,位码地址为08002H。2)、键盘部分1 预设初始计数值:可通过数字键键入所需计量的印张数,按下“确定(A)”键后开始。2 正向反向计数:可通过键盘上的正向(B)反向(C)键切换正向计数或者反向计数。当选择正向计数时,显示屏显示从0开始,每印刷一张,数值加1,直到遇到暂停或者到达预设值时停止计数;当选择反向计数时,显示屏从预设值开始,每印刷一张,

3、数值减1,直到遇到暂停或者到达0时停止计数。3次品报告:当按下键盘上次品键(D)时,代表出现次品,此时直流电机停止运转,步进电机缓慢转动一周,代表机械手取出次品,之后直流电机恢复运转。 4 报警提示:当计数为0或者到预设值时,停止计数,发出报警,此时L2亮。 5 复位键(F)78945 6 1 2 3 0FEABCD确定正计反计次品 数字复位显示屏四源程序#include #define LEDLen 6/用6个八段管xdata unsigned char OUTBIT _at_ 0x8002; / 位码输出+列扫描地址xdata unsigned char OUTSEG _at_ 0x800

4、4; / 段码输出xdata unsigned char IN _at_ 0x8001; / 行扫描地址入口xdata unsigned char CS0832 _at_ 0x9000;/产生电压启动直流电机xdata unsigned char control _at_ 0xa003;/control=0832-8255内部指令xdata unsigned char ctl _at_ 0xa000; /产生电流启动步进电动机code unsigned char LEDMAP = /数码显示管段码 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,

5、0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;code unsigned char KeyTable = /4*6键盘定义码 0x16, 0x15, 0x14, 0xff,0x13, 0x12, 0x11, 0x10,0x0d, 0x0c, 0x0b, 0x0a,0x0e, 0x03, 0x06, 0x09,0x0f, 0x02, 0x05, 0x08,0x00, 0x01, 0x04, 0x07;/code,单片机中的ROMunsigned char LEDBufLEDLen; / 显示缓冲unsigned char ch; /ch=getke

6、yint num,num1,num2,i;/num(用户输入数)num1(正计)num2(反计)sbit LED1 = P10;/正计指示灯sbit LED2 = P11;/反计指示灯sbit LED3 = P12;/结束指示灯sbit Speaker = P13; /喇叭接口/延时程序void Delay(unsigned char CNT) unsigned char i; while (CNT- !=0) for (i=100; i !=0; i-);void Delay3() /喇叭延时unsigned char l;for (l=0; l100; l+);void delay2()/

7、 unsigned char i,j; j = 30; do for(i=250;i!=0;i-); TMOD=0x01; /*定时器0工作在模式1下(16位计数器)*/ TH0=0xfd; TL0=0x65; TR0=1; /*启动定时器*/ while(TF0=0); TR0=0; while(-j);/数码管显示void DisplayLED() /数码管显示函数 unsigned char i; unsigned char Pos; Pos = 0x20; / 从左边开始显示 for (i = 0; i = 1; / Pos的数据右移一位 /键盘unsigned char TestKe

8、y()/键盘扫描函数(本实验属行-列扫描方式)4*6矩阵式键盘 OUTBIT = 0; / 列设为低电平0 return (IN &0x0f); / 读入键状态(高四位不用)得到第几行unsigned char GetKey()/读取键值函数 unsigned char Pos; unsigned char i; unsigned char k; i = 6;/i代表第几列 Pos = 0x20; / 得到第几列 do OUTBIT = Pos;/ Pos = 1;/向下一列扫描 k = IN & 0x0f; while (-i != 0) & (k = 0); / 键值 = 列 x 4 +

9、行 if (k != 0) i *= 4; if (k & 2)i += 1; else if (k & 4)i += 2; else if (k & 8)i += 3; OUTBIT = 0; do Delay(10); while (TestKey(); / 等键释放 return(KeyTablei); / 取出键码 else return(0xff);/步进电动机void Stepmotor() unsigned char ctl18=0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09;/A-AB-B-BC-C-CD-D-DA-A/双八拍,一个周期转60度,

10、8*7.5 unsigned int i,j; ctl = 0;/步进电动机初始化-无电流 while(1) for(j=0;j6;j+) for (i=0;i8;i+) DisplayLED(); ctl = ctl1i; delay2(); DisplayLED(); break;/中断void ExtInt0() interrupt 0 num1+; num2-;/正计void zhengji() TCON = 0x01; / 外部中断0下降沿触发,定时/计数器控制寄存器,INT0=P3.2外部中断0输入 IE = 0x81; / 打开外部中断允许位(EX0)及总中断允许位(EA) CS

11、0832 = 0xff; /直流电动机转 while (num1=num) if(num1num) LEDBuf5 = LEDMAPnum1%10; LEDBuf4 = LEDMAPnum1/10%10; LEDBuf3 = LEDMAPnum1/100%10; LEDBuf2 = LEDMAPnum1/1000%10; LEDBuf1 = LEDMAPnum1/10000%10; LEDBuf0 = LEDMAPnum1/1000000%10; DisplayLED(); else if(num1=num) CS0832 = 0x80; /直流电动机停 LED1 = 1; LEDBuf5 =

12、 LEDMAPnum%10; LEDBuf4 = LEDMAP(num/10)%10; LEDBuf3 = LEDMAP(num/100)%10; LEDBuf2 = LEDMAP(num/1000)%10; LEDBuf1 = LEDMAP(num/10000)%10; LEDBuf0 = LEDMAP(num/1000000)%10; DisplayLED(); break; if (TestKey() ch=GetKey(); if(ch=0x0d) /按下次品键 CS0832 = 0x80; /直流电动机停 DisplayLED(); for(i=0;i0) LEDBuf5 = LED

13、MAPnum2%10; LEDBuf4 = LEDMAP(num2/10)%10; LEDBuf3 = LEDMAP(num2/100)%10; LEDBuf2 = LEDMAP(num2/1000)%10; LEDBuf1 = LEDMAP(num2/10000)%10; LEDBuf0 = LEDMAP(num2/1000000)%10; DisplayLED(); else if(num2=0) LED1 = 1; for(i=0;i6;i+) LEDBufi = LEDMAP0; DisplayLED(); CS0832 = 0x80; /直流电动机停 break; if (TestK

14、ey() ch=GetKey(); if(ch=0x0f) goto then; else if(ch=0x0d) /按下次品键D CS0832 = 0xaf; /直流电动机停 for(i=0;i=0); LED3 = 1; LED1 =0; LED2 =0; while(1) LEDBuf5 = LEDMAP0; LEDBuf4 = LEDMAP0; LEDBuf3 = LEDMAP0; LEDBuf2 = LEDMAP0; LEDBuf1 = LEDMAP0; LEDBuf0 = LEDMAP0; DisplayLED(); Speaker = 0; Delay3(); Speaker =

15、 1; Delay3(); if (TestKey()ch=GetKey();ch=0x0f; then: break; /主函数void main() unsigned char i=0xff,j; unsigned char no6;/每按一个数字键的缓冲 unsigned char ch;/ LEDBuf1 = 0; control = 0x82;/8255内部指令 CS0832 = 0x80; /直流电动机停 LED1 =0; LED2 =0; LED3 =0; for(j=0;j6;j+) LEDBufj = 0x00;/- noj=0xff; DisplayLED();/显示- w

16、hile (1) DisplayLED(); if (TestKey() ch=GetKey(); if(ch0x0a) /输入数据 i+; LEDBufi = LEDMAPch & 0x0f; noi=ch; else if(ch=0x0a)/确定(A) num=0; for(j=0;j6;j+)if(noj!=0xff)num=num*10+noj; else if(ch=0x0b)/正计(B) LED1 =1; num1=0; zhengji(); main(); else if(ch=0x0c)/反计(C) LED2 =1; num2=num; fanji(); main(); els

17、e if(ch=0x0f)/复位(F) i=0xff; LED1=0; for(j=0;j6;j+) LEDBufj = 0x00; noj=0xff; DisplayLED(); 五连线1直流电机-8v+8v2步进电机APA03 BPA14 CPA25 DPA36KEY/LED CSCS07DA_CSCS188255 CSCS29L1P1.010L2P1.111L3P1.212脉冲输入P1.313单脉冲P3.2六程序流程图 七设计总结与心得 此次微机原理课程设计能够完好的完成,我首先感谢我的设计指导老师。他严谨的治学态度和热忱的工作态度令我十分钦佩,他的知道使我受益匪浅。通过此次课程设计,让我明白学好专业课的重要性。虽然我的专业方向是自动化,但是电子和自动化是不分家的。希望能在以后的学习和工作中,能紧记老师的教导,真正做到学以致用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号