日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机C语言led流水灯及数码管实现秒表

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51单片机C语言led流水灯及数码管实现秒表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

51單片機C語言練習題

單片機型號

普中科技的

led練習題

led小燈閃爍

#include<reg52.h> sbit LED = P0^0; void main() {unsigned int i=0;while(1){LED = 1;for(i=0;i<60000;i++);LED = 0;for(i=0;i<60000;i++);} }

led流水燈

#include<reg52.h>void main() {unsigned char LED = 0x01;unsigned int i=0;while(1){P0 = LED;LED = LED << 1;//從左向右依次點亮LEDif(LED == 0) //點亮第八盞后,點亮第一盞{LED = 0x01;}for(i=0;i<40000;i++);//延遲} }

每隔一秒點亮一次 led,led閃爍,定時器實現

  • 配置定時器工作模式
  • 定時器賦初值
  • 啟動定時器
  • 判斷定時器是否溢出
#include<reg52.h> sbit LED = P0^0; void main() {unsigned char cnt = 0;unsigned int i=0;TMOD = 0x01;TH0 = 0xD8;TL0 = 0xF0;TR0 = 1;LED = 0;while(1){if(TF0 == 1){TF0 = 0;TH0 = 0xD8;TL0 = 0xF0;cnt++;if(cnt == 100){cnt = 0;LED = ~LED;}}}}

數碼管練習題

靜態數碼管依次顯示0-F,每隔一秒更換一次

#include<reg52.h> unsigned char code segCodeTable[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void main() {unsigned char cnt = 0;unsigned int i=0;TMOD = 0x01;TH0 = 0xD8;TL0 = 0xF0;TR0 = 1;while(1){if(TF0 == 1){TF0 = 0;TH0 = 0xD8;TL0 = 0xF0;cnt++;if(cnt == 100){cnt = 0;P0 = segCodeTable[i];i++;}if(i == 16){i = 0;}}}}

數碼管實現秒表

#include<reg52.h> //共陰極數碼管 unsigned char code segCodeTable[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79}; unsigned char code posCodeTable[8] = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選控制 查表的方法控制 //數碼管顯示緩沖區,初始時刻為全零 unsigned char LEDBuffer[6] = {0x3f,0x3f,0x3f,0x3f,0x3f,0x3f }; void main() { unsigned int cnt = 0;unsigned long sec = 0;unsigned char i = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;while(1){if(TF0 == 1){TF0 = 0;TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;sec++;//每隔一秒刷新一次數碼管顯示緩沖區LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];}//每隔1ms輸出一次段碼與位碼P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;}}}}

中斷方式實現數碼管秒表

#include<reg52.h> //共陰極數碼管 unsigned char code segCodeTable[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79}; unsigned char code posCodeTable[8] = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選控制 查表的方法控制 //數碼管顯示緩沖區,初始時刻為全零 unsigned char LEDBuffer[6] = {0x3f,0x3f,0x3f,0x3f,0x3f,0x3f }; unsigned char i = 0; unsigned char flag1s = 0;unsigned int cnt = 0; void main() { unsigned long sec = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;EA = 1;ET0 = 1;while(1){if(flag1s == 1){sec++;flag1s = 0;//每隔一秒刷新一次數碼管顯示緩沖區LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];}}}void InterruptTime0() interrupt 1 {TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;flag1s = 1;}//每隔1ms輸出一次段碼與位碼P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;} }

數碼管高位為零不顯示

#include<reg52.h> //共陰極數碼管 unsigned char code segCodeTable[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79}; unsigned char code posCodeTable[8] = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選控制 查表的方法控制 //數碼管顯示緩沖區 unsigned char LEDBuffer[8] = {0x3f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00}; unsigned int cnt = 0; unsigned char i = 0; unsigned char flag1s = 0; unsigned char temp = 0x7f; void main() {unsigned long sec = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;EA =1;ET0 =1;while(1){if(flag1s == 1){flag1s = 0;//刷新數碼管顯示緩沖區sec++;if(sec>=0&&sec<10){LEDBuffer[0] = segCodeTable[sec%10];}else if(sec>=10&&sec<100) //sec小于10,不更新數碼管高位顯示緩沖區{LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];}else if(sec>=100&&sec<1000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];}else if(sec>=1000&&sec<10000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];}else if(sec>=10000&&sec<100000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];}else if(sec>=100000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];} }} }void InterruptTimer0() interrupt 1 {TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;flag1s = 1;}//每隔一ms輸出一次段碼和位碼P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;}}

總結

以上是生活随笔為你收集整理的51单片机C语言led流水灯及数码管实现秒表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。