印张计数器
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
一.设计任务要求
1能够进行6位数码显示,显示当前的印张数;
2能够进行印数的预置;
3能够进行正/反计数;
4能够模拟机械手取出次品;
5当计数结束时,可以报警;
二.硬件设计总图
三.硬件部分分析说明
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次品
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
:当按下键盘上次品键(D)时,代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
出现次品,此时直流电机停止运转,步进电机缓慢转动一周,代表机械手取出次品,之后直流电机恢复运转。
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,单片机中的ROM
unsigned char LEDBuf[LEDLen]; // 显示缓冲
unsigned char ch; //ch=getkey
int num,num1,num2,i;//num(用户输入数)num1(正计)num2(反计)
sbit LED1 = P1^0;//正计指示灯
sbit LED2 = P1^1;//反计指示灯
sbit LED3 = P1^2;//结束指示灯
sbit Speaker = P1^3; //喇叭接口
//////////////////////////////////////////////////////////////////////////////延时程序
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; l<100; 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 < LEDLen; i++) {
OUTBIT = 0; // 关所有八段管
OUTSEG =LEDBuf[i];
OUTBIT = Pos; // 显示一位八段管
Delay(1);
Pos >>= 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(KeyTable[i]); // 取出键码
} else return(0xff);
}
//////////////////////////////////////////////////////////////////////////步进电动机
void Stepmotor()
{
unsigned char ctl1[8]={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;j<6;j++)
{
for (i=0;i<8;i++)
{
DisplayLED();
ctl = ctl1[i];
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(num10)
{
LEDBuf[5] = LEDMAP[num2%10];
LEDBuf[4] = LEDMAP[(num2/10)%10];
LEDBuf[3] = LEDMAP[(num2/100)%10];
LEDBuf[2] = LEDMAP[(num2/1000)%10];
LEDBuf[1] = LEDMAP[(num2/10000)%10];
LEDBuf[0] = LEDMAP[(num2/1000000)%10];
DisplayLED();
}
else if(num2==0)
{
LED1 = 1;
for(i=0;i<6;i++) LEDBuf[i] = LEDMAP[0];
DisplayLED();
CS0832 = 0x80; //直流电动机停
break;
}
if (TestKey())
{
ch=GetKey();
if(ch==0x0f) goto then;
else if(ch==0x0d) //按下次品键D
{ CS0832 = 0xaf; //直流电动机停
for(i=0;i<10;i++)
{
Speaker = 0;
Delay3();
Speaker = 1;
Delay3();
DisplayLED();
}
Stepmotor();
CS0832 = 0xff; //步进电动机转
}
}
}while(num2>=0);
LED3 = 1;
LED1 =0;
LED2 =0;
while(1){
LEDBuf[5] = LEDMAP[0];
LEDBuf[4] = LEDMAP[0];
LEDBuf[3] = LEDMAP[0];
LEDBuf[2] = LEDMAP[0];
LEDBuf[1] = LEDMAP[0];
LEDBuf[0] = LEDMAP[0];
DisplayLED();
Speaker = 0;
Delay3();
Speaker = 1;
Delay3();
if (TestKey()){ch=GetKey();ch==0x0f; then: break;}
}
}
///////////////////////////////////////////////////////////////////////////主函数
void main()
{
unsigned char i=0xff,j;
unsigned char no[6];//每按一个数字键的缓冲
unsigned char ch;// LEDBuf1 = 0;
control = 0x82;//8255内部指令
CS0832 = 0x80; //直流电动机停
LED1 =0;
LED2 =0;
LED3 =0;
for(j=0;j<6;j++){
LEDBuf[j] = 0x00;//----
no[j]=0xff;
}
DisplayLED();//显示-----
while (1) {
DisplayLED();
if (TestKey())
{
ch=GetKey();
if(ch<0x0a){ //输入数据
i++;
LEDBuf[i] = LEDMAP[ch & 0x0f];
no[i]=ch;
}
else if(ch==0x0a){//确定(A)
num=0;
for(j=0;j<6;j++){if(no[j]!=0xff)num=num*10+no[j];}
}
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;j<6;j++)
{
LEDBuf[j] = 0x00;
no[j]=0xff;
}
DisplayLED();
}
}
}
}
五.连线
1
直流电机
-8v~+8v
2
步进电机A
PA0
3
B
PA1
4
C
PA2
5
D
PA3
6
KEY/LED CS
CS0
7
DA_CS
CS1
8
8255 CS
CS2
9
L1
P1.0
10
L2
P1.1
11
L3
P1.2
12
脉冲输入
P1.3
13
单脉冲
P3.2
六.程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图
七.设计
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
与心得
此次微机原理课程设计能够完好的完成,我首先感谢我的设计指导老师。他严谨的治学态度和热忱的工作态度令我十分钦佩,他的知道使我受益匪浅。通过此次课程设计,让我明白学好专业课的重要性。虽然我的专业方向是自动化,但是电子和自动化是不分家的。希望能在以后的学习和工作中,能紧记老师的教导,真正做到学以致用。