#include<reg51.h>
sbit P1_0=P1^0
sbit P1_1=P1^1
sbit P1_2=P1^2
sbit P1_3=P1^3
sbit P1_4=P1^4
sbit P1_5=P1^5
sbit P1_6=P1^6
sbit P1_7=P1^7
sbit P3_0=P3^0
sbit P3_1=P3^1
sbit P3_2=P3^2
sbit P3_3=P3^3
void delay(unsigned char i)
void main()
{
while(1){
if(P3_0==0&&P3_1==0&&
P3_2==0&&P3_3==1)
{
P1_0=0,P1_1=0delay(200)
P1_0=1,P1_1=1
P1_2=0,P1_3=0delay(200)
P1_2=1,P1_3=1
P1_4=0,P1_5=0delay(200)
P1_4=1,P1_5=1
P1_6=0,P1_7=0delay(200)
P1_6=1,P1_7=1
P1_6=0,P1_7=0delay(200)
P1_6=1,P1_7=1
P1_4=0,P1_5=0delay(200)
P1_4=1,P1_5=1
P1_2=0,P1_3=0delay(200)
P1_2=1,P1_3=1
P1_0=0,P1_1=0delay(200)
P1_0=1,P1_1=1delay(200)}
else{
P1=0x00
delay(200)
P1=0xff
delay(200)}
}
}
void delay(unsigned char i)
{
unsigned char j,k
for(k=0k<ik++)
for(j=0j<255j++)
}
#include <reg51.h>
void delay1s()
{
unsigned char i
for(i=0i<0x0Ai++){
TH1=0x3c
TL1=0xb0
TR1=1
while(!TF1)
TF1=0
}
}二
void main()
{
unsigned char i,t
TMOD=0x10 //置T1为工作方式1
while(1)
{for(i=0i<255i++)
{t=(((i/16)<<4)|(i%16)) //将i转换为BCD码
P1=~t //计数值取反后早锋送p1口显示
delay1s()} //调用陆尘晌1s延时函数
}
}不懂的可以继续追问。谢谢
单片机不能同时执行两个程序,只能采用分时的模式完成。首先通过定时器中断来设定一个时标,比如设定定时器0 每1ms产生一次中断,以这个1ms为基本时标,时钟和流水灯分别定义相应的计数全局变量,迹搭每次进入中断计数加1。根据这个基础,比如说时钟应用,当时钟计数值达到1000次时,说明到了1s,然后计数清零,时分秒变量增加1s。流水灯的处理也一样。另外中断服务程序尽量简洁,所以计数器+1及是否清零的判断 *** 作可在中断服务程序中,计数到后置个标志就可以退出,然后在主循环程序中做运算歼州液处理,氏物这样做比较规范,可最大程度减少误差。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)