1us延时函数..docVIP

  • 6
  • 0
  • 约4.01千字
  • 约 5页
  • 2016-12-27 发布于重庆
  • 举报
程序... #includeiom16v.h #define?uchar?unsigned?char #define?XTAL?4? uchar?data[4]?=?{0,0,0,0}; uchar?table[10]={ ??0xc0,???//0 ??0xf9,???//1 ??0xa4,???//2 ??0xb0,???//3 ??0x99,???//4 ??0x92,???//5? ??0x82,???//6? ??0xf8,???//7? ??0x80,???//8 ??0x90????//9 }; void?delay_1us(void)?????????????????//1us延时函数 ??{ ???asm(nop); ??} void?delay_nus(unsigned?int?n)???????//N?us延时函数 ??{ ???unsigned?int?i=0; ???for?(i=0;in;i++) ???delay_1us(); ??} ?? void?delay_1ms(void)?????????????????//1ms延时函数 ??{ ???unsigned?int?i; ???for?(i=0;i(unsigned?int)(XTAL*143-2);i++); ??} ?? void?delay_nms(unsigned?int?n)???????//N?ms延时函数 ??{ ???unsigned?int?i=0; ???for?(i=0;in;i++) ???{ ??????delay_1ms(); ???}??? ??} void?process(uchar?i,uchar?*p) { ????p[0]?=?i/1000; ????i?=?i%1000; ????p[1]?=?i/100; ????i?=?i%100; ????p[2]?=?i/10; ????i?=?i%10; ????p[3]?=?i; } //用四位数码管显示..端口A选位,B用于数据输出..// void?display(uchar??*p) { ????unsigned?char?i; ????unsigned?char?sel?=?0x08; ????for(i=0;i4;i++) ????{ ????????PORTA?=?sel; ????????PORTB?=?table[p[i]]; ????????delay_nms(1); ????????sel?=?sel1; ????} } //D口用于键盘输入... uchar?keypressed(void) {??????????uchar?temp; ??????????DDRD=0xf0; ??????????PORTD=0x0f; ??????????asm(nop); ??????????if(PIND!=0x0f) ??????????????????return?1; ??????????else? ??????????????????return?0; } uchar?keyscan(void) {?????????? ??????????uchar?m,n; ??????????uchar?keycode; ??????????delay_nms(10); ??????????if(keypressed()==1) ?????????????????{??asm(nop);//空操作主要用于端口的输出与输入之间的转换延迟,,如果不加上这几个操作,就会出现乱码 ???????????????????asm(nop); ???????????????????asm(nop); ???????????????????asm(nop); ???????????????????m=0x0fPIND; ???????????????????DDRD=0x00; ???????????????????PORTD=0xff; ???????????????????DDRD=0x0f; ???????????????????PORTD=0xf0; ???????????????????asm(nop); ???????????????????asm(nop); ???????????????????asm(nop); ???????????????????asm(nop); ???????????????????n=0xf0PIND; ???????????

文档评论(0)

1亿VIP精品文档

相关文档