單片機C語言基礎(chǔ)編程源碼六則

發(fā)布時間:2024-03-15
1.某單片機系統(tǒng)的p2口接一數(shù)模轉(zhuǎn)換器dac0832輸出模擬量,現(xiàn)在要求從dac0832輸出連續(xù)的三角波,實現(xiàn)的方法是從p2口連續(xù)輸出按照三角波變化的數(shù)值,從0開始逐漸增大,到某一最大值后逐漸減小,直到0,然后再從0逐漸增大,一直這樣輸出。試編寫一函數(shù),使從p2口輸出的值產(chǎn)生三角波,并且使三角波的周期和最大值通過入口參數(shù)能夠改變。
#include #define dac0832 xbyte[0x7fff] void san(unsigned char max1,unsigned char zhou1)
{ unsigned char i,j,max,zhou;max=max1;zhou=zhou1;while(1)
{ for(i=0;i0,i——)
{ dac0832=i;for(j=0;j1,j——)
{ for(i=0;i*(ptr+i+1))
{ temp=*(ptr+i+1);*(ptr+i+1)=*(ptr+i);*(ptr+i)=temp;} *ptr1=*(ptr+20/2);}
2.在數(shù)字濾波中有一種叫做“去極值平均濾波”技術(shù),就是對采集的數(shù)據(jù)按照從大到小或者從小到大進行排序,然后去掉相同數(shù)目的極大值和極小值,對中間部分數(shù)據(jù)求算術(shù)平均值作為采樣值。試編寫一函數(shù),對存放在片外數(shù)據(jù)存儲器中從0x150開始的16個單元的采樣數(shù)據(jù),用選擇法進行“去極值平均濾波”,把得到的采樣數(shù)據(jù)存放到0x14f單元中。
void teaf()
{ unsigned char xdata *ptr;unsigned char data temp,i,j,*ptr1;ptr=0x150;ptr1=0x4f;for(j=16;j>1,j——)
{ for(i=0;i*(ptr+i+1))
{ temp=*(ptr+i+1);*(ptr+i+1)=*(ptr+i);*(ptr+i)=temp;} temp=0;for(i=0;i void main()
{ unsigned char data *dpt;unsigned char i=0,temp;dpt=0x40;while(1)
{ temp=_getchar();if(temp==0x0d)
break;*(dpt+i)=temp;i++;}
3.利用庫函數(shù)scanf編寫一函數(shù),實現(xiàn)從單片機串行口接收數(shù)據(jù)的c51程序,把接收的數(shù)據(jù)存放在片外數(shù)據(jù)存儲器從0x240開始的區(qū)域,遇到回車符cr(ascii碼是0x0d)結(jié)束。
include void main()
{ unsigned char xdata *xdpt;unsigned char i=0,temp;xdpt=0x240;while(1)
{ scanf(“%c”,if(temp==0x0d)
break;*(xdpt+i)=temp;i++;}
4.利用庫函數(shù)putchar編寫一函數(shù),實現(xiàn)從單片機串行口發(fā)送數(shù)據(jù)的c51程序,發(fā)送的數(shù)據(jù)存放在片內(nèi)數(shù)據(jù)存儲器從0x50開始的區(qū)域,遇到回車符cr(ascii碼是0x0d)結(jié)束。
include void main()
{ unsigned char data *dpt;unsigned char i=0;dpt=0x50;while(*(dpt+i)!=0x0d)
{ putchar(*(dpt+i));i++;}
5.利用庫函數(shù)printf編寫一函數(shù),實現(xiàn)從單片機串行口發(fā)送數(shù)據(jù)的c51程序,發(fā)送的數(shù)據(jù)存放在片外數(shù)據(jù)存儲器從0x100開始的區(qū)域,遇到回車符cr(ascii碼是0x0d)結(jié)束。
include void main()
{ unsigned char xdata *xdpt;unsigned char i=0;xdpt=0x100;while(*(xdpt+i)!=0x0d)
{ printf(“%c”,*(xdpt+i));i++;}
6.編寫一定時器/計數(shù)器0定時100ms中斷處理函數(shù),使函數(shù)實現(xiàn)時鐘的功能,即產(chǎn)生時鐘的秒、分鐘和小時。設(shè)定時初值的高、低字節(jié)分別為timer_h和timer_l.設(shè)fosc=6mhz #include sfr timer_h=0x8b;sfr timer_l=0x8a;unsigned char data shi,fen,miao,bfm;
void main()
{ tmod=0x01;timer_h=15536/16;timer_l=15536%16;et0=1;ea=1;tr0=1;while(1);}
void time0_int() interrupt 1 { timer_h=15536/16;timer_l=15536%16;bfm++;if(bfm==10)
{ bfm=0;miao++;} if(miao==60)
{ miao=0;fen++;} if(fen==60)
{ fen=0;shi++;} if(shi==24)
{ shi=0;}
上一個:牛背梁門票預(yù)約流程和地址
下一個:各種防護工程適用條件有哪些?

關(guān)于MOSFET用于開關(guān)電源的驅(qū)動電路
買移動硬盤好還是組裝硬盤好,加硬盤還是買移動硬盤
iphone序列號開頭字母F,蘋果序列號F18VLFZZJCLG 是否真機謝謝大家了
剩下的茶渣原來是個寶,不信你看看!
云服務(wù)器免備案購買
夜丁香四季養(yǎng)護技術(shù)
拼多多gmv指的是什么(拼多多里面說的gmv是啥意思)
怎么安裝儲存卡,電腦內(nèi)存卡怎么安裝 三個步驟教你安裝
合肥租房合同怎么寫
win10純凈版是盜版嗎(window10純凈版好還是正版好)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos