印章计数器设计报告.doc_第1页
印章计数器设计报告.doc_第2页
印章计数器设计报告.doc_第3页
印章计数器设计报告.doc_第4页
印章计数器设计报告.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

印张计数器设计一设计任务要求1能够进行6位数码显示,显示当前的印张数;2能够进行印数的预置;3能够进行正/反计数;4能够模拟机械手取出次品;5当计数结束时,可以报警;二硬件设计总图80C514个LED显示印张计数器运作状态键盘输入端口6个七段数码管显示数据复位监控输入印张计数中断信号输入晶振时钟输入电源LED指示灯三硬件部分分析说明1)、显示部分实验箱提供了6位8段码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。位码经MC1413或ULN2003倒相驱动后,选择相应显示位。在实验箱中8位段码输出地址为0X004H,位码输出地址为0X002H。此处X 是由KEY/LED CS决定,参见地址译码。做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。将KEY/LED CS接到CS0上,则段码地址为08004H,位码地址为08002H。2)、键盘部分1 预设初始计数值:可通过数字键键入所需计量的印张数,按下“确定(A)”键后开始。2 正向反向计数:可通过键盘上的正向(B)反向(C)键切换正向计数或者反向计数。当选择正向计数时,显示屏显示从0开始,每印刷一张,数值加1,直到遇到暂停或者到达预设值时停止计数;当选择反向计数时,显示屏从预设值开始,每印刷一张,数值减1,直到遇到暂停或者到达0时停止计数。3次品报告:当按下键盘上次品键(D)时,代表出现次品,此时直流电机停止运转,步进电机缓慢转动一周,代表机械手取出次品,之后直流电机恢复运转。 4 报警提示:当计数为0或者到预设值时,停止计数,发出报警,此时L2亮。 5 复位键(F)四源程序#include #define LEDLen 6/用6个八段管xdata unsigned char OUTBIT _at_ 0x8002; / 位码输出+列扫描地址xdata unsigned char OUTSEG _at_ 0x8004; / 段码输出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, 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=getkeyint 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()/ 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 TestKey()/键盘扫描函数(本实验属行-列扫描方式)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 + 行 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度,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) CS0832 = 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 = 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 = LEDMAPnum2%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 (TestKey() 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 = 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();/显示- while (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(); else if(ch=0x0f)/复位(F) i=0xff; LED1=0; for(j=0;j6;j+) LEDBufj = 0x00; noj=0xff; DisplayLED(); 五连线直流电机-8v+8v步进电机APA0BPA1CPA2DPA3KEY/LED CSCS0DA_CSCS18255 CSCS2L1P10L2P12L3P13P32单脉冲P13脉冲输入六程序流程图 七设计总结与心得 单片机的学习比一般编程困难在于,要完成一个单片机系统,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论