步骤二:修整除料
步骤三:镜像特征
使用镜像命令,以俯视基准面作为复制平面,将上一步中的除料特征进行镜像 *** 作。
步骤四:添加倒圆
使用倒圆命令为零件添加倒角,圆角大小为R03。
步骤五:装配阵列
步骤六:添加材质与外观你这里是出了 四道题,还是一共一道题?
这些SX,是按扭式的一松手就自动d起 还是开关式的,推上去通,拨下来不通 这些会影响到程序的,如果是推上去拨下来的开关,那程序中只要检查开关的当前状态,依状态进行不同的流程,如果是按扭式的,那得在中断里轮询关做防抖处理,按下一次记一个状态
那个全灭时向左移向右移不还都是全灭的吗?这个提得不清楚,连着按几下是亮了几个灯?
3跟4明显是冲突的,不是一个题,那就是分成多题了
没意思,别人的烦恼,我干嘛要在这思考啊,近来知道上尽是些懒人来发题,就想不劳而获,替别人思考是浪费自己的生命,花费太多时间实在是不值得,如果是想要别的程序学习学习那应当不提这么多乱七八糟的需求,这么一提,明显是想让人免费为你开发,还是你自己玩吧单片机的P10-P13接四个发光二极管L1-L4的阴极,P14-P17接四个开关K1-K4程序:ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP START可以检测单个按键,也可以同时检测多个按键过程:开始--读P1口数据到A--A中的数据右移4次--A中的内容和F0H相或--A中的数据送到P1口--回到开始P0是指P0^0~P0^7这八个端口。
LED = _crol_(LED,1)是循环左移的一位的函数,LED = _cror_(LED,1)是循环右移的函数,
低电平0使LED点亮。
当LED=0xfe(1111 1110)时,执行LED = _crol_(LED,1),
即左移一位,高位溢出,补到低位,此时LED=0xfd(1111 1101);
下一次左移变为LED=0xfb(1111 1011)
如此循环,直到LED=0x7f(0111 1111),即为最左边的灯亮。
再执行LED = _cror_(LED,1),则LED=0xfe(1111 1110),回到初始状态,反复循环······
#include<reg52h> //头文件声明 //
#define uint unsigned int
#define uchar unsigned char
sbit wela=P1; // P1口控制各数码管的数据发送数据 //
sbit key1=P3^2;
uchar num;
uchar num1;
uchar num2;
uchar num3;
uchar num4; //计数为NUM,num1为个位,num2为十位//
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //计数数字在数码管上的显示(数码管是8位的) //
void delay(uint z);
void liushui();
void main()
{
EA=1;//开总中断 //
EX0=1;//开外部中断0 32口,默认的是电平触发方式,如果需要用跳变沿触发,请设置下,INT0为P32口//
num1=0;
num2=0;
num3=0;
num4=0;
while(1) //程序大循环//
{
wela=0x80;
delay(100); //选择个位,显示0 wela为 P0口,锁存器的选择,将数据发送到不同的锁存器锁存 //
P3=table[num1];
delay(100);
wela=0x40;
delay(100); //选择十位,显示0 //
P3=table[num2];
delay(100);
wela=0x20;
delay(100); //选择百位,显示0 //
P3=table[num3];
delay(100);
wela=0x10;
delay(100); //选择千位,显示0 //
P3=table[num4];
delay(100);
liushui(); //调用流水灯函数
num1=num1++; //判断数码管的显示方式
if (num1>9)
{
num2++;
num1=0;
if (num2>9)
{
num3++;
num2=0;
if(num3>9)
{
num4++;
num3=0;
if(num4>9)
{
num1=0 ;
num2=0 ;
num3=0 ;
num4=0 ;
}
}
}
}
}
}
void liushui() //子程序
{
P1=0x01 ;
delay (200);
P1=0x03 ;
delay (200);
P1=0x07 ;
delay (200);
P1=0x0F ;
delay (200);
P1=0x1F ;
delay (200);
P1=0x3F ;
delay (200);
P1=0x7F ;
delay (200);
P1=0xFF ;
delay (200);
P1=0X00;
delay (400);
}
void delay(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exit0() interrupt 0 //中断服务程序
{
P1=0x80 ;
delay (200);
P1=0xC0 ;
delay (200);
P1=0xE0 ;
delay (200);
P1=0xF0 ;
delay (200);
P1=0xF8 ;
delay (200);
P1=0xFC ;
delay (200);
P1=0xFE ;
delay (200);
P1=0xFF ;
delay (200);
P1=0X00;
delay (400);
num1=num1--;
if (num1<1);
{ if(num2<1);
{
if(num3<1);
{
num4--;
num3=9;
}
num3--;
num2=9;
}
num2--;
num1=9;
}
wela=0x80;
delay(100);
P3=table[num1];
delay(100);
wela=0x40;
delay(100);
P3=table[num2];
delay(100);
wela=0x20;
delay(100);
P3=table[num3];
delay(100);
wela=0x10;
delay(100);
P3=table[num4];
delay(100);
}
你不会再QQ问问上也问了的吧,怎么那么像?>
把中断服务程序改一下~~就可以用了
要实现Proteus和Keil软件联调,需要安装一个插件,然后在proteus和keil中设置。其实,这两个软件联调,真的没有什么用,调试一个小程序时,单步调试还可以,调试大程序就不适用了。keil编译好了,在proteus仿真测试就行,仿真效果不对,就改程序。即使是联调,有问题改程序也并不省事。//--包含你要使用的头文件
#include <reg52h> //此文件中定义了51的一些特殊功能寄存器
#include <intrinsh>
//--声明全局函数--//
void Delay10ms(unsigned int c); //延时10ms
/
函 数 名 : main
函数功能 : 主函数
输 入 : 无
输 出 : 无
/
main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while (1)
{
P0 = LED;
Delay10ms(50);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if (P0 == 0x00) //当它全灭的时候,重新赋值
{
LED = 0xfe; // 0xfe = 1111 1110
}
}
}
/
函 数 名 : Delay10ms
函数功能 : 延时函数,延时10ms
输 入 : 无
输 出 : 无
/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)