久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2617|回復: 8
打印 上一主題 下一主題
收起左側

誰能幫我看看單片機74HC595程序哪里有問題顯示亂碼

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include <REG52.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit sda =P2^0;
  5. sbit sclk=P2^2;
  6. sbit rclk=P2^1;
  7. uchar hou=12,min=32,sec=40;
  8. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f};//共陽數碼管段碼"0~f-."
  9. uchar code wela[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//共陽數碼管位碼
  10. uchar dis_buf[]={0,0,0xbf,0,0,0xbf,0,0};//顯示緩存
  11. void rck(void)
  12. {
  13. rclk=1;
  14. rclk=0;
  15. }
  16. void shift(uchar dat)
  17. {
  18. uchar i;
  19. for(i=0;i<8;i++)
  20. {
  21. sda=dat&0x80;//提取最高位
  22. sclk=1;
  23. sclk=0;
  24. dat<<=1;
  25. }
  26. }
  27. void DisplayScan()
  28. {
  29. static uchar i=0;
  30. shift(wela[ i]);//送位碼
  31.         shift(dis_buf[ i]);//送段碼
  32.         shift(wela[ i]);//送位碼
  33.         shift(dis_buf[i+4]);//送段碼
  34.         rck();//鎖存
  35.         i=++i%4;//循環掃描計數
  36. }
  37. void init(void)
  38. {
  39.         TMOD=0x01;
  40.         TH0=(65536-50000)/256;
  41.         TL0=(65536-50000)%256;
  42.         TR0=1;
  43.         ET0=1;
  44.         EA=1;
  45. }
  46. void main(void)
  47. {
  48.         uchar sec1=255;
  49.         init();
  50.         while(1)
  51.         {
  52.                 if(sec1!=sec)
  53.                 {
  54.                         dis_buf[7]=table[sec%10];
  55.                         dis_buf[6]=table[sec/10];
  56.                         dis_buf[4]=table[min%10];
  57.                         dis_buf[3]=table[min/10];
  58.                         dis_buf[1]=table[hou%10];
  59.                         dis_buf[0]=table[hou/10];
  60.                         sec1=sec;
  61.                 }
  62.                 DisplayScan();
  63.         }
  64. }
  65. void time0(void) interrupt 1
  66. {
  67.         static uchar tcount;
  68.         TH0=(65536-50000)/256;
  69.         TL0=(65536-50000)%256;
  70.         tcount++;
  71.         if(tcount==20)
  72.         {
  73.                 tcount=0;
  74.                 sec++;
  75.                 if(sec==60)
  76.                 {
  77.                         sec=0;
  78.                         min++;
  79.                         if(min==60)
  80.                         {
  81.                                 min=0;
  82.                                 hou++;
  83.                                 if(hou==24)
  84.                                 {
  85.                                         hou=0;
  86.                                 }
  87.                         }
  88.                 }
  89.         }
  90. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:390416 發表于 2021-5-16 19:34 | 只看該作者
兩片74HC595 驅動8位數碼管 單片機源代碼分享 http://www.zg4o1577.cn/bbs/dpj-201201-1.html
回復

使用道具 舉報

板凳
ID:57657 發表于 2021-5-16 23:00 | 只看該作者
級聯多少片,就執行多少次 shift()  函數,然后鎖存一次,不能多也不能少。
回復

使用道具 舉報

地板
ID:824490 發表于 2021-5-17 09:55 | 只看該作者
動態顯示要延時。沒有延時感覺上就亂了。。
回復

使用道具 舉報

5#
ID:824490 發表于 2021-5-17 10:02 | 只看該作者
本帖最后由 名字不是重點 于 2021-5-17 10:41 編輯

這個有問題:
void DisplayScan()
{
static uchar i=0;
shift(wela[ i]);//送位碼  //===>位碼i
        shift(dis_buf[ i]);//送段碼//====>段碼i       //每一個數碼管都要插入一個延時
        shift(wela[ i]);//送位碼//====>位碼還是i,一個數碼管顯示2個段碼?
        shift(dis_buf[i+4]);//送段碼//====>段碼i+4,段碼i+1、i+2、i+3被誰吃了?
        //每一個數碼管都要插入一個延時
        rck();//鎖存
        i=++i%4;//循環掃描計數
}
回復

使用道具 舉報

6#
ID:213173 發表于 2021-5-18 06:19 | 只看該作者
樓主想用4位數碼管交替顯示不同數據可以這樣改顯示函數
  1. void DisplayScan()
  2. {
  3.         static uchar i=0;
  4.         shift(wela[i]);//送位碼
  5.         if(sec%10<8)//每10秒顯示8秒時/分,顯示2秒分/秒
  6.         {
  7.                 if(i==1)shift(dis_buf[i]&0x7f);//送段碼加點
  8.                 else shift(dis_buf[i]);//送段碼不加點
  9.         }
  10.         else
  11.         {
  12.                 if(i==1)shift(dis_buf[i+2]&0x7f);//送段碼加點
  13.                 else shift(dis_buf[i+2]);//送段碼不加點
  14.         }
  15.         rck();//鎖存
  16.         i=++i%4;//循環掃描計數
  17. }
復制代碼

回復

使用道具 舉報

7#
ID:213173 發表于 2021-5-18 06:27 | 只看該作者
這里也要改一下
  1. void main(void)
  2. {
  3.         uchar sec1=255;
  4.         init();
  5.         while(1)
  6.         {
  7.                 if(sec1!=sec)
  8.                 {
  9.                         dis_buf[5]=table[sec%10];
  10.                         dis_buf[4]=table[sec/10];
  11.                         dis_buf[3]=table[min%10];
  12.                         dis_buf[2]=table[min/10];
  13.                         dis_buf[1]=table[hou%10];
  14.                         dis_buf[0]=table[hou/10];
  15.                         sec1=sec;
  16.                 }
  17.                 DisplayScan();
  18.         }
  19. }
復制代碼
回復

使用道具 舉報

8#
ID:332444 發表于 2021-5-18 08:03 | 只看該作者
回復

使用道具 舉報

9#
ID:332444 發表于 2021-5-18 08:03 | 只看該作者
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.亚洲国产精品 | 日韩二三区 | 欧美黑人一级爽快片淫片高清 | 91国内外精品自在线播放 | 久久久久久久夜 | 久久国产精品视频 | 精品亚洲一区二区三区 | 亚洲精品久久区二区三区蜜桃臀 | 色天天综合| 中文字幕在线观看av | 国产成人精品a视频一区www | 狠狠干五月天 | 中文字幕免费在线 | 欧洲亚洲一区二区三区 | 欧美91| 99精品免费久久久久久久久日本 | 日韩成人免费视频 | 欧美精品一区二区三区在线播放 | 黄色一级大片在线免费看产 | 久久av资源网 | 蜜桃视频在线观看免费视频网站www | 91久久久久久久久久久久久 | 伊人国产精品 | 极品的亚洲 | 精品av久久久久电影 | 91久久精品日日躁夜夜躁欧美 | 日韩一级免费观看 | 国产在线a| 国产一级特黄真人毛片 | 久久久观看 | 日本不卡一区 | 国产一区二区三区在线 | 国产亚洲精品久久19p | 国产在线视频在线观看 | 毛片网络 | 日日摸夜夜添夜夜添特色大片 | aaaa一级毛片| 日日摸日日碰夜夜爽2015电影 | 国产精品久久久久久久午夜片 | 二区三区视频 | 日本成人福利视频 |