先收藏,好东西一定要收藏, 慢慢有时间再弄个学习 |
先收藏,好东西一定要收藏, 慢慢有时间再弄个学习 |
太有才了,正学习中,有空我也做一个玩一下 |
不成功,有错误 |
想做个矢量画图的.... |
先收藏,好东西一定要收藏, 慢慢消化 一个个都来一个看看啥样子,顶起 |
仿制一个不成功,按键无效 |
也想自己动手做一个 |
好东西 |
用STC12C2052AD单片机制作的0-99V数字电压表 |
好资料,谢谢分享 |
大家注意一个问题就可以了,被测频率的最高值为晶振值除以24,如果是12M晶振,只能测到500K,如果想测量更高的程序,可以考虑分频了,常用器件是74HC390或者是74LS390,看你的频率了,当让,加74HC74或者LS74可以把频率降低一倍。 #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define unit unsigned int #define ulong unsigned long typedef bit BOOL ; uchar T0count=0;//T0计数 ulong f; uchar temp[6]={0}; bit flag; sbit rs = P2^7; sbit rw = P2^6; sbit ep = P2^5; sbit L = P2^0; //背光 sbit key1 = P2^1; // sbit key2 = P2^2; // sbit k0 = P1^0; // sbit k1 = P1^1; // sbit k2 = P1^2; // uchar code dis1[] = {" CRB L/C Meter "}; uchar code dis2[] = {" 2009-08-01 "}; delay(unit ms) { // 延时子程序 uchar i; while(ms--) { for(i = 0; i< 250; i++) {_nop_();_nop_();_nop_();_nop_();} } } BOOL lcd_bz() { // 测试LCD忙碌状态 BOOL result; rs = 0; rw = 1; ep = 1; _nop_();_nop_();_nop_();_nop_(); result = (BOOL)(P0 & 0x80); ep = 0; return result; } lcd_wcmd(uchar cmd) { // 写入指令数据到LCD while(lcd_bz()); rs = 0;rw = 0;ep = 0; _nop_();_nop_(); P0 = cmd; _nop_();_nop_();_nop_();_nop_(); ep = 1; _nop_();_nop_();_nop_();_nop_(); ep = 0; } lcd_pos(uchar pos) { //设定显示位置 lcd_wcmd(pos | 0x80); } lcd_wdat(uchar dat) { //写入字符显示数据到LCD while(lcd_bz()); rs = 1;rw = 0;ep = 0; P0 = dat; _nop_();_nop_(); _nop_();_nop_(); ep = 1; _nop_();_nop_();_nop_();_nop_(); ep = 0; } lcd_init() { //LCD初始化设定 lcd_wcmd(0x38); // delay(1); lcd_wcmd(0x0c); // delay(1); lcd_wcmd(0x06); // delay(1); lcd_wcmd(0x01); //清除LCD的显示内容 delay(1); } void dis(void) { f=T0count*65536+TH0*256+TL0; //计算0.05秒内的脉冲次数 f=f*20; temp[0]=f/100000+0x30; temp[1]=f%100000/10000+0x30; temp[2]=f%100000%10000/1000+0x30; temp[3]=f%100000%10000%1000/100+0x30; temp[4]=f%100000%10000%1000%100/10+0x30; temp[5]=f%100000%10000%1000%100%10+0x30; } main() { uchar i; TMOD=0x15; //T1定时,T0计数 16位定时计数器 TH0=0;TL0=0; TH1=(65536-50000)/256;TL1=(65536-50000)%256; //定时为0.05S TR1=1;TR0=1; ET0=1;ET1=1; EA=1; //k2=0; lcd_init(); // 初始化LCD delay(10); lcd_pos(0); // 设置显示位置 i = 0; L=0; P1=0xff; while(dis1[i] != '\0') { // 显示字符 lcd_wdat(dis1[i]); i++; } lcd_pos(0x40); // 设置显示位置为 i = 0; while(dis2[i] != '\0') { lcd_wdat(dis2[i]); // 显示字符" i++; } lcd_wcmd(0x01); while(1) // { if(flag==1) { dis(); lcd_pos(0x80); // 设置显示位置 lcd_wdat('-'); for(i=0;i<=5;i++) lcd_wdat(temp[i]); // 显示字符 lcd_wdat('-'); flag=0; T0count=0; TH0=0;TL0=0; TR0=1;TR1=1; } } } void t0(void) interrupt 1 using 1 //T0工作在计数状态下,T0(P3.4) { T0count++; //T0count中断次数 } void t1(void) interrupt 3 using 2 //T1工作在定时状态下, { TR0=0;TR1=0; TH1=(65536-50000)/256; TL1=(65536-50000)%256; flag=1; } |
这个真的行吗,最高能达到多少M |
谢谢分享,收藏了 |
新来的,M币不够下载用,有啥办法吗? |