1. 51单片机数码管计算器的C程序
兄弟,不好意思,我这个程序可以计算8位数,完成加减乘除,没有小数点
、显示负数的功能,只能帮到这了。
#include <reg51.h>
#include <absacc.h>
#include <math.h>
#pragma NOREGPARMS
#define g DBYTE[0x30]
#define s DBYTE[0x31]
#define b DBYTE[0x32]
#define q DBYTE[0x33]
#define w DBYTE[0x34]
#define sw DBYTE[0x35]
#define bw DBYTE[0x36]
#define qw DBYTE[0x37]
#define flag DBYTE[0x38]
#define ww DBYTE[0x39]
#define var DBYTE[0x40]
unsigned long data a0 _at_ 0x42;
unsigned long data a1 _at_ 0x46;
unsigned long data a2 _at_ 0x50;
void count ()
{
unsigned long temp;
if(var>=0&&var<=9)
{
if(ww==1)
{
qw=bw=sw=w=q=b=s=g=0;
g=var;
ww=0;
}
else
{
qw=bw;
bw=sw;
sw=w;
w=q;
q=b;
b=s;
s=g;
g=var;
}
}
if(var>=0x0a&&var<=0x0d)
{
a0=qw*10000000+bw*1000000+sw*100000+w*10000+q*1000+b*100+s*10+g;
if(var==0x0a)flag=1;//加法运算标志
if(var==0x0b)flag=2;//减法运算标志
if(var==0x0c)flag=3;//乘法运算标志
if(var==0x0d)flag=4;//除法运算标志
ww=1;
}
if(var==0x0e)
{
a1=qw*10000000+bw*1000000+sw*100000+w*10000+q*1000+b*100+s*10+g;
if(flag==1)a2=a1+a0;
if(flag==2)a2=a0-a1;
if(flag==3)a2=a1*a0;
if(flag==4)a2=a0/a1;
g=a2%10;
temp=a2/10;
s=temp%10;
temp=temp/10;
b=temp%10;
temp=temp/10;
q=temp%10;
temp=temp/10;
w=temp%10;
temp=temp/10;
sw=temp%10;
temp=temp/10;
bw=temp%10;
qw=temp/10;
}
if(var==0x0f)
{
qw=bw=sw=w=q=b=s=g=var=flag=0;
}
}
2. 浠涔堟槸鏁扮爜绠″姩鎬佹樉绀
銆銆璇ュ疄楠岀敤鍒板疄楠屾澘鐨勮祫婧愮數璺鍥惧備笅锛
銆銆鍏朵腑P0鍙f槸娈电爜锛屼綆鐢靛钩鏈夋晥銆侾2鍙f槸浣嶇爜锛岄珮鐢靛钩鏈夋晥銆侾2.0鍙f帶鍒剁1涓鏁扮爜绠★紝涓鐩村埌P2.7鍙f帶鍒剁8涓銆傝ユ澘鐨勬电爜琛ㄥ備笅锛
銆銆鍚勪釜鏁扮爜绠$殑娈电爜閮芥槸p0鍙g殑杈撳嚭,鍗冲悇涓鏁扮爜绠¤緭鍏ョ殑娈电爜閮芥槸涓鏍风殑, 涓轰簡浣垮叾鍒嗗埆鏄剧ず涓嶅悓鐨勬暟瀛, 鍙閲囩敤鍔ㄦ佹樉绀虹殑鏂瑰紡,鍗冲厛鍙璁╂渶浣庝綅鏄剧ず0(鍚鐐)锛岀粡杩囦竴娈靛欢鏃讹紝鍐嶅彧璁╂′綆浣嶆樉绀1锛屽傛ょ被鎺ㄣ傜敱瑙嗚夋殏鐣,鍙瑕佹垜浠鐨勫欢鏃舵椂闂磋冻澶熺煭锛屽氨鑳藉熶娇寰楁暟鐮佺殑鏄剧ず鐪嬭捣鏉ラ潪甯哥殑绋冲畾娓呮氥傝繃绋嬪備笅鍥俱
銆銆閲囩敤涓婅堪鏂规硶鎬濊矾缂栧啓濡備笅锛
銆銆org 0000h
銆銆start: mov a,#08h ;0 ;娈电爜
銆銆mov p0,a
銆銆mov p2,#01h ;浣嶇爜
銆銆lcall delay_1ms
銆銆mov a,#0abh ;1
銆銆mov p0,a
銆銆mov p2,#02h
銆銆lcall delay_1ms
銆銆mov a,#12h ;2
銆銆mov p0,a
銆銆mov p2,#04h
銆銆lcall delay_1ms
銆銆mov a,#22h ;3
銆銆mov p0,a
銆銆mov p2,#08h
銆銆lcall delay_1ms
銆銆mov a,#0a1h ;4
銆銆mov p0,a
銆銆mov p2,#10h
銆銆lcall delay_1ms
銆銆mov a,#24h ;5
銆銆mov p0,a
銆銆mov p2,#20h
銆銆lcall delay_1ms
銆銆mov a,#04h ;6
銆銆mov p0,a
銆銆mov p2,#40h
銆銆lcall delay_1ms
銆銆; mov a,#0aah ;7
銆銆; mov p0,a
銆銆mov p0,#0aah ;鎰熻夌敤杩欏彞鍜屼笂闈涓ゅ彞瀹炵幇涓鏍凤紝鍙鑳借繖绉嶄範鎯浠ュ悗浼氭湁鐢ㄥ惂
銆銆mov p2,#80h
銆銆lcall delay_1ms
銆銆ljmp start
銆銆delay_1ms: mov r6,#2
銆銆temp: mov r5,#0ffh
銆銆djnz r5,$
銆銆djnz r6,temp
銆銆ret
銆銆end
銆銆涓嬭浇鍒版澘涓婂緱鍒版祴缁撴灉涓轰粠浣庡埌楂樺叓浣嶅垎鍒鏄剧ず0鍒7锛堝惈鐐癸級銆
銆銆鈽 涓婅堪鏂规硶閫愭$粰P0鎴栬匬2璧嬪硷紝涓鏂归潰绋嬪簭鐨勫嶆潅绋嬪害澧炲姞锛屽彟澶栦竴鏂归潰浼氫娇寰楃▼搴忕殑鐏垫椿鎬ч檷浣庛傚傛灉瑕佹敼鍙樻樉绀虹殑鏁板瓧锛岀▼搴忔敼鍔ㄨ捣鏉ュ緢楹荤儲銆 鎵浠ヨ佺敤51鍗曠墖鏈轰腑甯哥敤鐨勪竴绉嶆柟娉曪細鏌ヨ〃娉曘備緥濡侾0鍙h緭鍑烘电爜鏃讹紝鎴戜滑鍙浠ユ妸瑕佹樉绀虹殑娈电爜鏀惧湪涓涓琛ㄦ牸涓锛岀劧鍚庢瘡娆′粠杩欎釜琛ㄦ牸閲岄潰鍙栨暟锛岄佸埌P0鍙e嵆鍙銆侾2鍙h緭鍑轰綅鐮佹椂锛屽彲浠ユ妸瑕佺敤鐨勪綅鐮佹斁鍦ㄥ彟涓涓琛ㄦ牸閲岋紝姣忔′粠姝よ〃涓鍙栨暟锛岄佸叆P2鍙c傝繖鏍凤紝濡傛灉瑕佹敼鍙樻樉绀虹殑鏁板瓧锛屽彧闇瑕佹敼鍙樿〃鏍奸噷闈㈢殑鏁般
銆銆org 0000h
銆銆start: mov r7,#0ffh ;r7,r6鏌ヨ〃鏃堕佸叆鍙樺潃瀵勫瓨鍣╝ (鍥犺嚜鍔1鍚庝负0,鎵浠ラ勭疆ffh)
銆銆mov r6,#0ffh
銆銆loop: lcall play1 ;璋冪敤鏄剧ず娈电爜瀛愮▼搴
銆銆lcall play2 ;璋冪敤鏄剧ず浣嶇爜瀛愮▼搴
銆銆lcall delay_1ms
銆銆cjne a,#80h,loop ;鍒ゆ柇鏄鍚﹀埌浜嗘渶宸﹁竟鐨勬暟,鍗崇8涓浣嶇爜
銆銆ajmp start
銆銆play1: ;鏌ヨ〃姹傛电爜瀛愮▼搴
銆銆; mov a,r7
銆銆; inc a
銆銆; mov r7,a
銆銆inc r7 ;杩2鍙ュ拰涓婇潰涓夋潯璇鍙ュ疄鐜板姛鑳界浉鍚
銆銆mov a,r7 ;a鍦ㄨ繖閲屽仛鍙樺潃瀵勫瓨鍣
銆銆mov dptr,#table1 ;琛ㄩ栧潃閫乨ptr锛宒ptr鍋氬熀鍧瀵勫瓨鍣
銆銆movc a,@a+dptr ;鍩哄潃瀵勫瓨鍣ㄥ姞鍙樺潃瀵勫瓨鍣ㄥ诲潃
銆銆mov p0,a
銆銆ret
銆銆play2: ;鏌ヨ〃姹備綅鐮佸瓙绋嬪簭(鍘熺悊鍚宲lay1)
銆銆mov a,r6
銆銆inc a
銆銆mov r6,a
銆銆mov dptr,#table2
銆銆movc a,@a+dptr
銆銆mov p2,a
銆銆ret
銆銆table1: db 08h,0abh,12h,22h,0a1h,24h,04h,0aah ;娈电爜琛
銆銆table2: db 01h,02h,04h,08h,10h,20h,40h,80h ;浣嶇爜琛
銆銆delay_1ms: mov r5,#02h ;寤舵椂1ms瀛愮▼搴
銆銆temp: mov r4,#0ffh
銆銆djnz r4,$
銆銆djnz r5,temp
銆銆ret
銆銆end
銆銆涓嬭浇鍒版澘涓婇獙璇佸緱鍒伴勬兂缁撴灉銆
銆銆--------------------------------------------------------------------------------
銆銆C51瀹炵幇濡備笅(鍙傝冧簡AS鐨勪緥绋):
銆銆#include <reg51.h>
銆銆#include <intrins.h> // 鍖呭惈浜嗗乏绉诲嚱鏁癬crol_()
銆銆void delayms(unsigned char ms); // 寤舵椂瀛愮▼搴
銆銆unsigned char data dis_digit; // 浣嶉夐氬, 浼犻佸埌P2鍙g敤浜庨夐氬綋鍓嶆暟鐮佺$殑鏁板,
銆銆// 濡傜瓑浜0x01鏃,閫夐歅2.0鍙f暟鐮佺
銆銆unsigned char code dis_code[11]={0x08,0xab,0x12,0x22,0xa1, // 0,1,2,3, 4
銆銆0x24,0x04,0xaa,0x00,0x20, 0xff}; // 5,6,7,8,9, off
銆銆unsigned char data dis_buf[8]; // dis_buf 鏄句簬缂撳啿鍖哄熀鍦板潃
銆銆unsigned char data dis_index; // 鏄剧ず绱㈠紩, 鐢ㄤ簬鏍囪瘑褰撳墠鏄剧ず鐨勬暟鐮佺″拰缂撳啿鍖虹殑鍋忕Щ閲
銆銆void main()
銆銆{
銆銆P0 = 0xff; // 鍏抽棴鎵鏈夋暟鐮佺
銆銆P2 = 0x00;
銆銆dis_buf[0] = dis_code[0];
銆銆dis_buf[1] = dis_code[1];
銆銆dis_buf[2] = dis_code[2];
銆銆dis_buf[3] = dis_code[3];
銆銆dis_buf[4] = dis_code[4];
銆銆dis_buf[5] = dis_code[5];
銆銆dis_buf[6] = dis_code[6];
銆銆dis_buf[7] = dis_code[7];
銆銆dis_digit = 0x01; // 棣栧厛閫夐歅2.0
銆銆dis_index = 0; // 褰撳墠鍋忕Щ閲忎负0
銆銆while(1)
銆銆{
銆銆P0 = dis_buf[dis_index]; // 娈电爜閫丳0鍙
銆銆P2 = dis_digit; // 閫夎兘浣(鍗充綅鐮)
銆銆delayms(1); // 寤舵椂
銆銆dis_digit = _crol_(dis_digit, 1); // 浣嶉夐氬乏绉, 涓嬫¢夐氫笅涓浣
銆銆dis_index++; // 涓嬩竴涓娈电爜
銆銆dis_index &= 0x07; // 瑙佹敞閲
銆銆}
銆銆}
銆銆void delayms(unsigned char ms) // 寤舵椂瀛愮▼搴(鏅舵尟12M)
銆銆{
銆銆unsigned char i;
銆銆while(ms--)
銆銆{
銆銆for(i = 0; i < 120; i++);
銆銆}
銆銆}
銆銆鈽 娉ㄩ噴: 姝ゅ彞浣滅敤鏄8涓鏁扮爜绠″叏閮ㄦ壂鎻忓畬涓閬嶄箣鍚庯紝鍐嶅洖鍒扮涓涓寮濮嬩笅涓娆℃壂鎻忋傚啓鍥炰竴鑸褰㈠紡锛歞is_index = dis_index & 0x07 銆傝繖绉嶆柟娉曟尯鏂帮紝绗涓娆¤佸埌锛屽崄鍏杩涘埗鐨07灏辨槸浜岃繘鍒剁殑00000111锛岃繖鏍烽氳繃涓庢搷浣滃彲鑳芥帶鍒跺惊鐜浜嗐傛瘮濡俤is_index 缁忕涓娆″惊鐜鍚庡间负00000001锛屽拰0x07涓庢搷浣滃悗鍊间笉鍙樹粛涓0x01锛岀浜屾″惊鐜鏃讹紝鍏跺间负0涓0x02锛屼笌0x07鍚庝粛涓0x02锛屼竴鐩村埌鍏跺煎炰负0x07鏃惰繕鏄涓嶅彉鐨勶紝浣嗗啀娆″惊鐜鍚庡叾鍊间负0x80锛屽啀涓0x07鍚庡氨鍙樻垚0x00浜嗭紝杩欐牱鍙堜粠鍒濆嬪惊鐜浜嗐傛ゅ彞鍙鐢 if (dis_index == 8) dis_index = 0 浠f浛锛屾晥鏋滀竴鏍枫
銆銆鈽 閫氳繃C51鐢ㄤ笂杩版柟娉曞疄鐜版椂锛屽叾娈电爜鏀惧湪浜嗘暟缁刣is_code[11]涓锛屽啀閫氳繃缂撳啿鍖烘暟缁刣is_buf[]灏嗙▼搴忎腑瑕佽皟鐢ㄧ殑鍊艰呭叆锛岃繖鏍峰氨鍙浠ョ敤涓嬫爣锛堝亸绉婚噺锛夎块棶浜嗐傝繖鏍风湅涓婂幓鏈変簺绻侀攣锛屼絾鍏舵濊矾姣旇緝娓呮氾紝缁撴瀯涓婁篃寰堟槑浜嗭紝鍏锋湁閫氱敤鎬э紝渚夸簬鎵╁睍銆
銆銆鈽 鍙﹀栧彧瑕佹妸绋嬪簭涓鐨勫欢鏃跺姞闀匡紝濡俤elayms(1000)锛屼笅杞藉埌鏉夸笂灏卞彲浠ョ湅鍒板疄闄呬笂鏁扮爜绠℃槸鐢变綆浣嶅埌楂樹綅閫愪綅鏄剧ず鐨勩
銆銆--------------------------------------------------------------------------------
銆銆鑻ュ崟鍗曞氨瀹炵幇杩欎釜鍔熻兘鑰岃█锛屽彲浠ョ洿鎺ヨ皟鍏ユ电爜鏁扮粍dis_code[11]涓涓嬫爣浠0鍒7鐨勫硷紝鑰屼笉蹇呭啀璁剧疆缂撳啿鏁扮粍dis_buf[]锛屽疄鐜板備笅锛
銆銆#include <reg51.h>
銆銆#include <intrins.h> //_crol_()鐢
銆銆void delayms(unsigned char ms); //寤舵椂瀛愮▼搴
銆銆unsigned char data dis_digit; //浣嶉夐氬, 浼犻佸埌P2鍙g敤浜庨夐氬綋鍓嶆暟鐮佺$殑鏁板,
銆銆//濡傜瓑浜0x01鏃,閫夐歅2.0鍙f暟鐮佺
銆銆unsigned char code dis_code[11]={0x08,0xab,0x12,0x22,0xa1, // 0,1,2,3,4
銆銆0x24,0x04,0xaa,0x00,0x20, 0xff}; // 5,6,7,8,9,off
銆銆unsigned char data dis_index; //鏄剧ず绱㈠紩, 鐢ㄤ簬鏍囪瘑褰撳墠鏄剧ず鐨勬暟鐮佺″拰缂撳啿鍖虹殑鍋忕Щ閲
銆銆void main()
銆銆{
銆銆P0 = 0xff; // 鍏抽棴鎵鏈夋暟鐮佺
銆銆P2 = 0x00;
銆銆dis_index = 0; // 褰撳墠鍋忕Щ閲忎负0
銆銆dis_digit = 0x01; // 閫夐歅2.0
銆銆while(1)
銆銆{
銆銆P0 = dis_code[dis_index]; // 娈电爜閫丳0鍙
銆銆P2 = dis_digit; // 浣嶇爜閫丳2鍙
銆銆delayms(1);
銆銆dis_digit = _crol_(dis_digit, 1); // 浣嶉夐氬乏绉, 涓嬫¢夐氫笅涓浣
銆銆dis_index++;
銆銆dis_index &= 0x07;
銆銆}
銆銆}
銆銆void delayms(unsigned char ms) // 寤舵椂瀛愮▼搴(鏅舵尟12M)
銆銆{
銆銆unsigned char i;
銆銆while(ms--)
銆銆{
銆銆for(i = 0; i < 120; i++);
銆銆}
銆銆}
銆銆鈽 閫氭湰鏉ユ槸鎯抽氳繃浠ヤ笅鏂瑰紡瀹炵幇涓娆″惊鐜鐨勶細
銆銆for (dis_index = 0; dis_index < 8; dis_index++)
銆銆{
銆銆P0 = dis_code[dis_index]; // 娈电爜閫丳0鍙
銆銆P2 = dis_index+1; // 浣嶇爜閫丳2鍙
銆銆delayms(1);
銆銆}
銆銆鍙寰楀埌鐨勬绘槸閿欒鐨勭粨鏋滐細绗0浣嶅埌绗2浣嶈繖涓変綅鏄剧ず鐨勬槸涓変釜8锛岀3浣嶆樉绀虹殑鏄7锛岄珮鍥涗綅娌℃湁鏄剧ず銆傚姞闀垮欢鏃堕愪綅瑙傚療涔熸病鏈夊彂鐜伴敊璇鐨勮勫緥锛屽筀eil鐨勮皟璇曚篃涓嶇啛鎮夛紝鍏堟妸闂棰樼暀鍒拌繖锛屽緟鎵惧嚭鍘熷洜鍚庡啀琛ヤ笂銆
銆銆[2006.5.2] 鎵惧嚭鍘熷洜鍟︼紝琛ヤ笂锛
銆銆浠婂ぉ鍙堢湅浜嗕竴涓嬶紝鎵惧埌涓婇潰鐨勯敊璇鍑哄湪鍝浜嗐傚綋鏃舵槸鎯崇敤dis_index鐨勫煎仛涓轰綅鐮佺殑,鍗崇涓浣嶆樉绀0鏃,娈电爜涓篸is_code[0], 鍗砫is_index鍊间负0, 姝ゆ椂浣嶇爜鍊间负1銆傜浜屼綅鏄剧ず1鏃,娈电爜涓篸is_code[1],鍗砫is_index鍊间负1,姝ゆ椂浣嶇爜鍊间负2銆傛墍浠ュ氨绠鍗曠敤浜嗕釜鍔1杩愮畻锛屽皢P0鍙g殑鍋忕Щ鍊间笌P2鍙g殑浣嶇爜鑱旂郴璧锋潵銆備絾浠旂粏鎯充竴涓嬩綅鐮佺殑鍘熺悊锛屼笂杩版柟娉曟樉鐒舵槸閿欑殑锛屽彧瑕佸啀楠岃瘉涓姝ュ氨鏄庣櫧浜嗭紝鍗冲綋绗3浣嶆樉绀2鏃讹紝娈电爜涓篸is_code[2], dis_index鍊间负2锛屽姞1鍚庝负3锛屾寜涓婅堪鏂规硶鏃跺氨灏嗚繖涓3浣滀负浜嗕綅鐮侊紝鑰屾g‘鐨勪綅鐮佸簲璇ユ槸4 (00000100B)銆傛墍浠ュ嚭閿欍傚疄闄呬笂杩欎釜瀵瑰簲鍏崇郴鏄鏈夌殑锛屼絾涓嶆槸绠绠鍗曞崟鐨勫姞1锛屼綅鐮佸簲璇ユ槸2鐨刣is_index娆″箓銆傚嵆锛
銆銆0锛嶏紞1
銆銆1锛嶏紞2
銆銆2锛嶏紞4
銆銆3锛嶏紞8
銆銆4锛嶏紞16 鈥︹
銆銆骞傛¤繍绠楀嚱鏁癴laot pow(float x, float y)鍖呭惈鍦╩ath.h涓, 杩斿洖鍊间负xy (float鍨):
銆銆for (dis_index = 0; dis_index < 8; dis_index++)
銆銆{
銆銆P0 = dis_code[dis_index]; // 娈电爜閫丳0鍙
銆銆P2 = (char) pow(2, dis_index); // 浣嶇爜閫丳2鍙
銆銆delayms(255);
銆銆}
銆銆鍐嶆′笅杞藉埌鏉夸笂鍙戠幇浠嶆湁闂棰, 鍗冲欢鏃跺緢灏忕殑鏃跺欐樉绀烘贩涔,浣嗗姞澶у欢鏃舵椂闂(濡傜▼搴忎腑鐨勫)鍙浠ヨ傛煡鍒版暟鐮佺℃槸鎸変綅姝g‘鏄剧ず鐨勩傚彟澶栫敤杩欑嶆柟娉曚骇鐢熺殑浠g爜閲忎篃寰堝ぇ(浠庡啓鍏ラ熷害鐪,寰堟槑鏄)銆傝繖閲屼粎鎻愬嚭浜嗕竴涓鎬濊矾锛屽彧鍦ㄦゅ疄楠屼腑閫傜敤锛屾剰涔変笉澶э紝鍒版や负姝銆
銆銆[琛ュ厖缁撴潫]
銆銆--------------------------------------------------------------------------------
銆銆AS涓缁愬嚭鐨勪緥绋嬫槸鍒╃敤瀹氭椂涓鏂鍋氱殑寤舵椂锛屽弬鑰冧慨鏀瑰埌鎴戠殑鏉夸笂锛岀▼搴忓備笅锛
銆銆#include <reg51.h>
銆銆#include <intrins.h> // 鍖呭惈浜嗗乏绉诲嚱鏁癬crol_()
銆銆unsigned char data dis_digit; // 浣嶉夐氬, 浼犻佸埌P2鍙g敤浜庨夐氬綋鍓嶆暟鐮佺$殑鏁板,
銆銆// 濡傜瓑浜0x01鏃,閫夐歅2.0鍙f暟鐮佺
銆銆unsigned char code dis_code[11]={0x08,0xab,0x12,0x22,0xa1, // 0,1,2,3,4
銆銆0x24,0x04,0xaa,0x00,0x20, 0xff}; // 5,6,7,8,9,off
銆銆unsigned char data dis_buf[8]; // dis_buf 鏄句簬缂撳啿鍖哄熀鍦板潃
銆銆unsigned char data dis_index; // 鏄剧ず绱㈠紩, 鐢ㄤ簬鏍囪瘑褰撳墠鏄剧ず鐨勬暟鐮佺″拰缂撳啿鍖虹殑鍋忕Щ閲
銆銆void main()
銆銆{
銆銆P0 = 0xff; //鍏抽棴鎵鏈夋暟鐮佺
銆銆P2 = 0x00;
銆銆TMOD = 0x01; // 00000001B 瀹氭椂璁℃暟鍣0宸ヤ綔鍦ㄦ柟寮1锛16浣嶅畾鏃跺櫒/璁℃暟鍣
銆銆TH0 = 0xFC;
銆銆TL0 = 0x17; // 棰勭疆鍒濆 FC17H=64535D, 216-64535=1001us=1ms
銆銆IE = 0x82; // 10000010B T0婧㈠嚭涓鏂鍏佽
銆銆dis_buf[0] = dis_code[0x0];
銆銆dis_buf[1] = dis_code[0x1];
銆銆dis_buf[2] = dis_code[0x2];
銆銆dis_buf[3] = dis_code[0x3];
銆銆dis_buf[4] = dis_code[0x4];
銆銆dis_buf[5] = dis_code[0x5];
銆銆dis_buf[6] = dis_code[0x6];
銆銆dis_buf[7] = dis_code[0x7];
銆銆dis_digit = 0x01; // 閫夐氱0浣嶆暟鐮佺
銆銆dis_index = 0; // 鍋忕Щ鍒濆间负0
銆銆TR0 = 1; // 鍚鍔═0
銆銆while(1); // 寰鐜绛夊緟涓鏂
銆銆}
銆銆void timer0() interrupt 1 // 瀹氭椂鍣0涓鏂鏈嶅姟绋嬪簭, 鐢ㄤ簬鏁扮爜绠$殑鍔ㄦ佹壂鎻
銆銆{
銆銆TH0 = 0xFC; // 鍙戠敓涓鏂瀹氭椂/璁℃暟鍣ㄩ噸瑁呭垵鍊
銆銆TL0 = 0x17; // 鎰熻夋ゅ(鍙婁笂)搴旇ユ槸0x18,鑰屼笉鏄17锛屽垎鏋愬備笅
銆銆P2 = 0x00; // 鍏堝叧闂鎵鏈夋暟鐮佺
銆銆P0 = dis_buf[dis_index]; // 娈电爜閫丳0鍙
銆銆P2 = dis_digit; // 浣嶇爜閫丳2鍙
銆銆dis_digit = _crol_(dis_digit,1); // 浣嶉夐氬煎乏绉, 涓嬫′腑鏂鏃堕夐氫笅涓浣嶆暟鐮佺
銆銆dis_index++;
銆銆dis_index &= 0x07; // 8涓鏁扮爜绠″叏閮ㄦ壂鎻忓畬涓閬嶄箣鍚庯紝鍐嶅洖鍒扮涓涓寮濮嬩笅涓娆℃壂鎻
銆銆}
銆銆鈽 瀹氭椂鍣/璁℃暟鍣ㄧ殑杈撳叆鑴夊啿鍛ㄦ湡涓庢満鍣ㄥ懆鏈熶竴鏍, 涓烘椂閽熸尟鑽¢戠巼鐨1/12銆傛櫠鎸鐢12M鏃讹紝杈撳叆鑴夊啿鍛ㄦ湡闂撮殧涓1us銆傛満鍣ㄥ懆鏈熶负 1us銆傝綯0鐨勫垵鍊间负X锛岃$畻鍒濆肩殑鏂规硶锛氭湰渚嬩腑瀹氭椂鍣ㄧ敤鏂瑰紡1锛屾槸16浣嶇殑瀹氭椂鍣锛屽嵆鏈澶у间负216锛65536锛岃秴杩囨ゅ煎皢鍙戠敓婧㈠嚭锛屽紩璧蜂腑鏂锛岃繘鍏ヤ腑鏂澶勭悊绋嬪簭銆傝繖閲岃佽╁叾寤舵椂1ms锛屽嵆1000us, 鍒欐湁寮216锛峏锛1000锛屽彲寰梄锛64536锛屾崲绠椾负16杩涘埗涓篎C18锛屽嵆鍒濆糡H0=0xFC锛孴L0=0x18銆傚嵆瀹氭椂鍣ㄧ敱64536寮濮嬭℃暟锛岀粡1000娆¤℃暟鍚庡间负65536锛屽皢鍙戠敓瀹氭椂涓鏂锛屽啀杩涘叆涓鏂澶勭悊瀛愮▼搴忓悗锛岄噸鏂拌呭拰鍒濆硷紝濡傛ゅ惊鐜涓嬪幓銆
銆銆鑰屽湪涓婁緥涓鍏惰呭叆鐨勫垵鍊煎苟闈濬C18锛64536锛夛紝鑰屾槸FC17锛64535锛夈傛垜鎯冲ぇ姒傝や负鍏惰℃暟鑼冨洿鍦0锝65565鐨勫師鍥犲惂锛屾垜涔熸兂杩囪繖涓闂棰橈紝鏄鐢216-璁℃暟鍒濆=涓鏂闂撮殧 鍛,杩樻槸鐢(216-1)-璁℃暟鍒濆=涓鏂闂撮殧鍛? 闅忔墜鏌ヤ簡鍑犳湰涔, 璇存硶涓嶄竴,涓嶈繃鐢ㄥ墠鑰呯殑杈冨, 鎴戣嚜宸变篃璁や负鍓嶈呮瘮杈冨悎鐞, 鍥犱负鍦ㄨ$畻鏈轰腑16浣嶇殑浜岃繘鍒朵笉鑳借〃绀65536, 鍦ㄥ悇浣嶅潎涓1鏃惰〃绀虹殑鍊间负65535, 鍗65535H=1111111111111111B, 涔熷彲浠ヨ65536鏄婧㈠嚭寰楀埌鐨勩傝屼綍鏃跺搷搴斾腑鏂灏辨垚浜嗗叧閿锛屾嬁涓婁緥鏉ヨ达紝濡傝惧垵鍊间负64535锛團C17锛夛紝鍒欒℃暟鍒65535鏃讹紝宸茬粡璁℃暟涓1000涓锛屽嵆1ms锛屼絾姝ゆ椂骞舵湭鍙戠敓婧㈠嚭锛屽洜姝や篃娌℃湁瑙﹀彂涓鏂銆傝屾槸鍦ㄤ笅涓涓璁℃暟鍚庢墠鍙戠敓銆傜‘鍒囧煎簲涓1001us銆傝嫢鍒濆间负64536锛團C18锛夛紝鍒欐伆濂戒负鎵闇鍊硷紝鎵浠ヤ笂渚嬩腑鐨勫垵鍊煎簲璇ョ敤FC18鑰屼笉鏄疐C17銆傝繖浠呬粎鏄鎴戣嚜宸辩殑涓鐐圭湅娉曪紝鑷充簬鏄涓嶆槸杩欐牱锛岃繕鏈夊緟杩涗竴姝ヨ冭瘉銆
銆銆--------------------------------------------------------------------------------
銆銆鏈缁堜笅杞藉埌瀹為獙鏉夸笂缁撴灉锛
銆銆######################################琛ュ厖########################################
銆銆鐢≒roteus浠跨湡缁撴灉濡備笅(鏌愪竴鐘舵佺殑鎴鍥):
銆銆鈽 璇ョ數璺娈电爜鏄鎸変笌鏉夸笂鎺ユ硶瀵瑰簲鐨,鍗虫寜鍓嶉潰鐨勬电爜琛ㄦ″簭杩炴帴銆傚彟澶栬繖涓鍏浣嶇殑浠跨湡鏁扮爜绠℃渶宸︾鏄绗涓浣嶏紝鏈鍙崇鏄绗鍏浣嶏紝涓庢澘涓婄殑椤哄簭鐩稿弽锛屾墍浠ユ帴涓轰簡缁熶竴锛岃ュ浘浠ユ澘涓哄噯杩炴帴銆備笂鍥句笉鍔犱笂鎷夌數闃讳篃鍙浠跨湡鍑虹粨鏋滐紝鍙鏄疨0鍙i珮鐢靛钩鏄剧ず涓虹伆锛屽嵆楂橀樆銆
3. 80c51单片机 1 到20 数码管显示程序
A005光盘目录
1、一组C-51的程序设计 2、C51设计遥控器
3、Franklin C-51手册 4、一个C51讨论组的压缩包1
5、FrankLin For Windows使用经验谈 6、AT89C 系列单片机解密原理
7、一个C51讨论组的压缩包 8、微型打印机的C语言源程序
9、6B595或74HC595的C语言源程序 10、24C02串行EEPROM的C语言源程序
11、日历时钟DS12887或146818的C语言源程序 12、串行4路DAC TLC5620的C语言源程序
13、串行8位ADC TLC0831或TLC0832的C语言源程序 14、电力载波芯片PM2300与89C2051的接口电路
15、80C31与PC机AT总线接口卡 16、传感器信号采集电路
17、双音频红外接收和5087键盘电路 18、双音频8870接收电路
19、双音频红外遥控器发射电路 20、用74373,74573锁存器扩展I/O端口的方法
21、用74164串入并出移位寄存器扩展89C2051输出端口 22、用74165并入串出移位寄存器扩展89C2051输入端口
23、6位LED数码管显示模块 24、8位LED显示板
25、MPLAB集成开发环境软件 26、MPASM用户指南(包括MPLINK和MPLIB)
27、1000米语音立体声调频发射
28、315M遥控发射/接收电路的制作
29、微波报警器 30、定时控制器
31、装在火柴盒里的窃听器
32、远距离FM调频发射电路
33、10公里双向可视对讲系统 34、LED显示电脑电子钟
35、可直接用于无线发射的UHF频段调制盒 36、调频广播发射机
37、一个多用途信号发生器
38、实用电动窗帘电路
39、无线电遥控发射、接收头的制作 40、串行E2PROM--24C××读写器
41、PIC单片机编程器的自制 42、初学单片机几个不易掌握的概念
43、用单片机实现通用存贮器IC卡的读写 44、EM78系列单片机原理与应用技术
45、印刷电路板的基本设计方法和原则要求 46、Intel hex 文件格式解密
47、自制2051单片机编程器 48、AT89C系列单片机烧写器的自制
49、利用80C31单片机串行口实现多个LED
显示的一种简单方法
50、基于PIC单片机的智能IC卡燃气表电控系统设计
51、由单片机和多片DS1820组成的
多点温度测控系统 52、MCS-51系列单片机在SDH系统中的应用
53、异种单片机共享片外存储器及其与微机通信的方法 54、基于Intel80C196的通用伺服控制系统
55、12位A/D转换器ADS7804与51单片机的接口及程序设计
56、12位500KHz六通道同时采样的A/D转换器ADS7864及应用
57、单片机大容量FLASHRAM的扩展
58、单片机外围电路中的低功耗技术
59、基于MC68HC05CL16的可配置型电话计费器的设计和实现
60、W78E516及其在系统编程的实现
61、AVR单片机在柴油机转速测量中的应用
62、串行EEPROM X24128及其与AT89C51的接口及编程
63、用多路复用器扩展MCU串口
64、一种高性能便携式PIC单片机湿度检测仪的研制
65、单片机微处理器AT89C51在时隙变换和
控制中的应用
66、自制MSP430FET140仿真器的原理图和PCB板图