完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
这是一个信号发生器的程序,采用的时stc89c52单片机做的,用仿真软件仿真,幅值,频率没有变化为初始值,按键扫描,工作不正常,由于本程序并不是本人编写,所以读起来有些困难,希望贴友帮我解决一下,谢谢了。
#include #define uchar unsigned char #define uint unsigned int ***it rs=P3^0; ***it rw=P3^1; ***it lcden=P3^2; uchar code table[]={"Volt"}; uchar code table2[]={'0','1','2','3','4','5','6','7','8','9'}; uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab, 0xac,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4, 0xd6,0xd8,0xda,0xdd,0xdf,0xc1,0xc3,0xc5,0xc7,0xc9,0xca,0xcc,0xcc,0xcf,0xf1, 0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfc,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfd,0xfd,0xfc,0xfb, 0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xcf,0xcc,0xca,0xc9,0xc7,0xc5, 0xc3,0xc1,0xdc,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2, 0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xac,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96, 0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69, 0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4c,0x4c,0x48,0x45,0x43,0x40,0x3d, 0x3a,0x38,0x35,0x33,0x30,0x2c,0x2b,0x29,0x27,0x25,0x22,0x20,0x1c,0x1c,0x1a, 0x18,0x16,0x15,0x13,0x11,0x10,0x0c,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x04, 0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0c, 0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1c,0x20,0x22,0x25,0x27,0x29,0x2b, 0x2c,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4c,0x51,0x55, 0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80}; uchar b=0,c=0,d=0,e=0,i,k,tl,th; int ww=0,qw=0,bw=9,sw=3,gw=3,n=20,chh=50; int t,f,m,choice=1,zk=50; void delay(unsigned int x) { int i,j; for(i=0;i } void delay1(uint x) { uint a,b; for(a=x;a>0;a--) for(b=10;b>0;b--); } void write_com(uchar com) { P2=com; rs=0; lcden=0; delay1(10); lcden=1; delay1(10); lcden=0; } void write_date(uchar date) { P2=date; rs=1; lcden=0; delay1(10); lcden=1; delay1(10); lcden=0; } void init() { write_com(0x38); delay1(20); write_com(0x0c); delay1(20); write_com(0x06); delay1(20); write_com(0x80+0x00); delay1(20); } //ÏÔʾº¯Êý void display() { int i; for(i=0;i<3;i++) write_date(table[i]); write_com(0x80+0x05); write_date(table2[chh/10]); write_com(0x80+0x06); write_date('.'); write_com(0x80+0x07); write_date(table2[chh%10]); write_com(0x80+0x08); write_date('V'); write_com(0x02); write_com(0x80+0x40); write_date('F'); write_com(0x80+0x42); write_date('c'); write_com(0x80+0x43); write_date(table2[ww]); write_com(0x80+0x44); write_date(table2[qw]); write_com(0x80+0x45); write_date(table2[bw]); write_com(0x80+0x46); write_date(table2[sw]); write_com(0x80+0x47); write_date(table2[gw]); write_com(0x80+0x48); write_date('H'); write_com(0x80+0x49); write_date('z'); write_com(0x80+0x50); } void key1(void) { if(choice<4) choice=choice+1; else choice=1; } void key2(void) { if(chh!=50) chh++; else chh=chh; } void key3(void) { if(chh!=0) chh--; } void key4(void) { } void key5(void) { if(n<=3000) n=n+100; } void key6(void) { if(n!=20) n=n-100; } void key7(void) { if(zk<100) zk=zk+1; else zk=0; } void key8(void) { if(zk>=1) zk=zk-1; else zk=0; } void jisuan(void) { TR0=0; f=n; t=1000000/f; th=(65536-t)/256; tl=(65536-t)%256; ww=f/10000; f=f%10000; qw=f/1000; f=f%1000; bw=f/100; f=f%100; sw=f/10; gw=f%10; TR0=1; } //¼üÅÌɨÃè void judge(void) { uchar temp; P1=0xfe; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(5); if(temp!=0xf0) { temp=P1; switch(temp) { case 0x7e:key1(); break; case 0xbe:key2(); break; case 0xde:key3(); break; case 0xee:key4(); break; } } } P1=0xfd; temp=temp&0xf0; if(temp!=0xf0) { delay(5); if(temp!=0xf0) { temp=P1; switch(temp) { case 0x7d:key5(); break; case 0xbd:key6(); break; case 0xdd:key7(); break; case 0xed:key8(); break; } } } } void main(void) { init(); TMOD=0x01; TR0=1; th=-t/256; tl=-t%156; TH0=th; TL0=tl; ET0=1; EA=1; while(1) { jisuan(); display(); judge(); } } void time0_int(void) interrupt 1 { TR0=0; if(choice==1) { P0=tosin[b]*chh/50; b++; } else if(choice==2) { if(c<=128)P0=c*chh/50; else P0=(255-c)*chh/50; c++; } else if(choice==3) { k=zk*256/100; d++; if(d<=k)P0=0x00; else P0=0xff*chh/50; } TH0=th; TL0=tl; TR0=1; }
|
|
相关推荐
4个回答
|
|
|
扫描电路不正常工作
|
|
|
|
|
|
你8个按键既没有定义I/O口,按键程序中也没有对响应电平作判断的语句。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16904 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 19:51 , Processed in 0.581863 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2220