预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

/************************************* 程序内容:利用动态扫描和定时器1在数码管上 显示出从765432开始以1/10秒的速度往下递 减直至765398并保持显示此数,与此同时利用 定时器0以500MS速度进行流水灯从上至下移动, 当数码管上数减到停止时,实验板上流水灯也 停止然后全部开始闪烁,3秒后(用T0定时)流 水灯全部关闭、数码管上显示出“HELLO”。到此 保持住。 编写人:李英杰 硬件支持:12MHz、74hc595驱动数码管、对应YL-48开发板 时间:2012.8.22 备注:参考郭天祥《十天学会单片机》 ***************************************/ #include<reg52.h> #include<intrins.h> #defineuintunsignedint//宏定义 #defineucharunsignedchar//宏定义 unsignedcharcode duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xc7,0xc7,0x86,0x89};共阳// 数码管位码值 unsignedcharcodewei[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; unsignedchardisbuf[]={7,6,5,0,0,0,10,11,12,13,14}; //数码管初值 sbitsi=P2^2; sbitsclk=P2^4; sbitslck=P2^3; //voidsenda(); voidsend(); voidout(); voidinit(); voiddelay(unsignedcharh); uinttemp,t0,t1,shu,flat,flat1;//flat为流水灯运行标志位、flat1为数码管标志位 ucharm,n,num; main() { shu=432; //disbuf[3]=shu%10/10; //disbuf[4]=shu/10%10; //disbuf[5]=shu%10; init(); while(1) { if(flat1==0)//flat1为1,数码管递减中 { for(n=0,m=0;n<6,m<6;n++,m++) { send(); out(); } } //while(1); else//当数码管递减完后、显示hello { for(n=6,m=0;n<11,m<5;n++,m++) { send(); out(); } } } } voidinit() { temp=0xfe; P1=temp; TMOD=0x11;//定时器0、1工作方式都为1 TH0=(65536-50000)/256;//定50ms的初值 TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; } voidtime0()interrupt1//定时器0子函数 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; if(flat==0) { if(t0==10) { t0=0; temp=_crol_(temp,1); P1=temp; } } else { P1=0xff; TH0=(65536-50000)/256;//重新定义初值 TL0=(65536-50000)%256; t0++; if(t0%10==0) P1=~P1; if(t0==60) { TR0=0; P1=0xff; flat1=1; } } } voidtime1()interrupt//定时器31子函数 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; t1++; if(t1==2) { t1=0; disbuf[3]=shu/100; disbuf[4]=shu/10%10; disbuf[5]=shu%10; shu--; if(shu==397) { TR1=0; flat=1; } //TR0=0; } } /*voidsenda(void) {uinta; for(a=0;a<8;a++) { sclk=0; si=num&0x80; num=num<<1; sclk=1; } }*/ voidsend(void)//数据传输 { uchara,b; //for(m=0;m<6;m++) //{ if(b==0) { b++