本文目录一览

1,单片机课程设计请大家帮忙

厄,按键计数不就可以了吗?很简单的。。。
首先先判断按键。。。用一个寄存器来放按键的值 举个例子吧。 比如R3放按键数 当按下第一次时,CJNE R3,#1,AA AA程序就是你要执行了第一个L1闪的程序。。。 这个应该懂了吧

{0}

2,单片机课程设计

这里看下把,应该有你需要的http://www.jxdiguo.com/s/danpianjikechengsheji/
童鞋,程序和硬件电路是相互对应的,电路不一样,程序也不相同。原理如下:对数码管进行扫描显示,显示内容可存放于通用寄存器中,然后用中断对显示内容进行更新(先是对秒,秒=60时,秒清零;分加1,对于小时也是这样)。

{1}

3,单片机课程设计

这个是16位led 双向流水灯演示程序。if(LEDDirection) LEDShow(0x000f<<LEDIndex); else LEDShow(0x000f>>LEDIndex);上面两句表示判断流水方向,再调用LED亮灯程序if(LEDIndex= =15) LEDDirection= !LEDDirection;上面一句表示在一个循环之后,方向反转。LEDIndex = (LEDIndex+1)%16;上面一句表示把步数加一,“%16”表示不会超过16(0-15).

{2}

4,单片机课程设计之节日彩灯

ORG 0000H AJMP START ORG 0040H START:MOV SP,#60H ABC:MOV DPTR,#TABLE CLR A STA:MOV R1,A MOVC A,@A+DPTR MOV P0,A ACALL DELA INC R1 MOV A,R1 CJNE A,#05H,STA AJMP ABC DELA:MOV R7,#250 DEL: MOV R6,#250 DJNZ R6,$ DJNZ R7,DEL RET TABLE:DB 7EH,0BDH,0DBH,0E7H,0DBH,0BDH END

5,单片机课程设计

LZ这么厉害还用问人么?? 给你个思路吧~~~~你可以设计定时器每0.2秒来个中断。中断里面是对2秒的判断,比如用一个寄存器R1,当R1为10时。也就是到2秒了。再转到L2。。再判断如此循环4次不就行了么~~~自己做出来的以后的那种喜悦是最真的,我真的体会过。所以楼主。相信你一定行了。。。别着急找答案啦~~~~相信你自己。。
会有人回答吗?选举我的答案吧!!!
#include#include #define unint unsigned int unint nt=0; void time()interrupt 1 using 1 { TH0=0x3c; TL0=0xb0; nt++; } void main() { unint led=0xfe; TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; TR0=1; while(1) { if(nt%4==0) {P0=led;} eles P0=0; if(nt>40) {led=_crol_(led,1); if(led==0xef) {led=0xfe;} nt=0; }}

6,单片机课程设计

#include #define uchar unsigned char #define uint unsigned int #define SEG P0//数码管接P0 uint count_T0,count;//计数,定时. uchar flag10,flag11,flag60,seconds,minutes,jishuqi; uchar code TAB[]={ 0xc0,0xf9,0xb0,0x99,//共阳0-4 0x92,0x82,0xf8,0x98};//5-9 uchar disp[6]={0,0,0,0,0,0};//显示数组 sbit redled=P1^0;//红灯接P1.0 sbit yewled=P1^1;//黄灯接P1.1 sbit speaker=P3^7;//音响. sbit key=P3^2;//复位键 void init(void);//声明初始化函数 void delay1ms(uchar);//延时函数 void scanner(uchar);//显示函数 void way(void);//状态函数 main() { init(); for(;;) { scanner(1);//一直显示. if(flag10)//10分到. way();//进入状态 } } void init(void) { EA=1; ET0=1; ET1=1; TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-count)/256; TL1=(65536-count)%256; TR0=1; speaker=1; key=1; count_T0=0; count=1980;//声响音调.柔和. seconds=0; minutes=0; flag10=0;//提醒标志. flag11=0;//黄灯闪烁标志. flag60=0;//红灯闪烁标 jishuqi=0; } void scanner(uchar y) { uchar i,j,scan; for(j=0;j

7,单片机课程设计 单片机温度的检测与显示的设计

用18b20做很简单啊。 温度的子程序给你,,你重定义一下接口,主程序已经调用出温度了,你送到显示就行了。。 /* 延时t毫秒 */ void delay(uint t) { uint i; while(t--) { /* 对于11.0592M时钟,约延时1ms */ for (i=0;i<125;i++) {} } } /* 产生复位脉冲初始化DS18B20 */ void TxReset(void) { uint i; DQ = 0; /* 拉低约900us */ i = 100; while (i>0) i--; DQ = 1; // 产生上升沿 i = 4; while (i>0) i--; } /* 等待应答脉冲 */ void RxWait(void) { uint i; while(DQ); while(~DQ); // 检测到应答脉冲 i = 4; while (i>0) i--; } /* 读取数据的一位,满足读时隙要求 */ bit RdBit(void) { uint i; bit b; DQ = 0; i++; DQ = 1; i++;i++; // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效 b = DQ; i = 8; while(i>0) i--; return (b); } /* 读取数据的一个字节 */ uchar RdByte(void) { uchar i,j,b; b = 0; for (i=1;i<=8;i++) { j = RdBit(); b = (j<<7)|(b>>1); } return(b); } /* 写数据的一个字节,满足写1和写0的时隙要求 */ void WrByte(uchar b) { uint i; uchar j; bit btmp; for(j=1;j<=8;j++) { btmp = b&0x01; b = b>>1; // 取下一位(由低位向高位) if (btmp) { /* 写1 */ DQ = 0; i++;i++; // 延时,使得15us以内拉高 DQ = 1; i = 8; while(i>0) i--; // 整个写1时隙不低于60us } else { /* 写0 */ DQ = 0; i = 8; while(i>0) i--; // 保持低在60us到120us之间 DQ = 1; i++; i++; } } } /* 启动温度转换 */ void convert(void) { TxReset(); // 产生复位脉冲,初始化DS18B20 RxWait(); // 等待DS18B20给出应答脉冲 delay(1); // 延时 WrByte(0xcc); // skip rom 命令 WrByte(0x44); // convert T 命令 } /* 读取温度值 */ void RdTemp(void) { TxReset(); // 产生复位脉冲,初始化DS18B20 RxWait(); // 等待DS18B20给出应答脉冲 delay(1); // 延时 WrByte(0xcc); // skip rom 命令 WrByte(0xbe); // read scratchpad 命令 tplsb = RdByte(); // 温度值低位字节(其中低4位为二进制的“小数”部分) tpmsb = RdByte(); // 高位值高位字节(其中高5位为符号位) } void main(void) { do { delay(1); // 延时1ms convert(); // 启动温度转换,需要750ms delay(1000); // 延时1s RdTemp(); // 读取温度 } while(1); }
有没有电路图啊 急用啊 谢谢

文章TAG:单片机  课程  课程设计  设计  单片机课程设计日志  
下一篇